私はOpenGLのモデルビュー変換について本当に混乱しています。私はすべての変換プロセスを理解していますが、射影行列に関しては、私は迷子になっています:(
ポイントP(x、y、z)がある場合、このポイントが平行クリッピングボリュームまたは遠近法クリッピングボリュームのいずれかによって定義されたクリッピングボリュームに描画されるかどうかを確認するにはどうすればよいですか?このプロセスの背後にある数学的背景は何ですか?
モデル ビュー プロジェクション マトリックスをオブジェクトに適用し、平面によって定義されるクリップ座標錐台の外側にあるかどうかを確認します。
-w < x < w
-w < y < w
0 < z < w
したがってp
、vec3 であるポイントとモデル ビュー プロジェクション マトリックスがM
ある場合、GLSL では次のようになります。
bool in_frustum(mat4 M, vec3 p) {
vec4 Pclip = M * vec4(p, 1.);
return abs(Pclip.x) < Pclip.w &&
abs(Pclip.y) < Pclip.w &&
0 < Pclip.z &&
Pclip.z < Pclip.w;
}
特定の点が画面に表示されるかどうかを判断するには、視錐台に対してテストします。この錐台カリングのチュートリアルを参照してください。