FreeStyleWiki

OpenGL関連

[OpenGL]

OpenGL関連

  • GLSLを使ったOpenGLについては GLFW による OpenGL 入門 が公開されている
    • シェーダーとかMVP行列を使った描画について詳しく解説されている

  シェーダー関連のTips

  • 複数のシェーダーを使うことは可能(1つのシェーダーで全部やるのは非推奨)
    • 複数のシェーダーを使う場合は glUseProgram(X) ... glUseProgram(0) のように、明示的にシェーダープログラムを切り替える
  • glUniform系の関数はglUseProgramを実行している間に呼び出す
    • さもないとINVALID_OPERATIONでエラーが発生する
// シェーダープログラムを起動
glUseProgram(X)

// 頂点シェーダーのグローバルGLSL変数"model"に設定
val uniModel = glGetUniformLocation(this.shader, "model")
glUniformMatrix4fv(uniModel, false, Matrix4f().value()) // <-- 成功する

  カメラ関連

  • jomlの関数中心に

Matrix4f#rotation*

ミクさんが(x, y, z) = (0, 0, 0) で描画されている場合…

  • Matrix4f#rotationX 物体をX軸で回転させる:足元を中心にばったんばったん回転
  • Matrix4f#rotationY 物体をY軸で回転させる:ぐるぐると横回転、自然
  • Matrix4f#rotationZ 物体をZ軸で回転させる:足元を中心にばったんばったん回転

直観と異なることがわかる

Matrix4f#setLookAt

  • setLookAt( eye(x,y,z), center(x,y,z), up(x,y,z) )
    • カメラの位置を指す、view行列の位置を設定するとき使う
    • eyeがカメラの位置、centerが見たい位置、upは(0,1,0)固定

centerは(0,0,0)だとだめで、モデルの中心を計算したほうがよさそう→ (0, (面頂点.y max + 面頂点.y min) / 2, 0) で計算できる

  テクスチャ関連

  • ミップマップ
    • テクスチャに付随して設定される、そのテクスチャより小さいサイズのコピー