[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*
- 回転
- 5-2 OpenGLの座標系と回転方向 でOpenGLの座標系を確認
ミクさんが(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) で計算できる
テクスチャ関連
- ミップマップ
- テクスチャに付随して設定される、そのテクスチャより小さいサイズのコピー
axis_open_gl1.png