私は現在、クリップ空間ビューでシーンを表示する OpenGL を使用した小さなおもちゃのプログラムに取り組んでいます。つまり、立方体を描画して正準ビュー ボリュームを視覚化し、立方体内に射影変換されたモデルを描画します。モデル図面のコード スニペットを表示するには:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(1.0f, 1.0f, -1.0f);
glMultMatrixd(projectionMat);
glMultMatrixd(modelviewMat);
glEnable(GL_LIGHTING);
draw_model();
glDisable(GL_LIGHTING);
したがって、当然、描画されたモデルは「歪んで」います (これが望ましい動作です)。ただし、サーフェス法線も射影行列によって変換されるため、変換後のサーフェスに対して直交しないため、ライティングは正しくありません。私が達成しようとしているのは、歪んだモデルの表面が正しい法線を持つという意味で「正しい」ライティングです。
問題は、どうすればそれができるかということです。私は通常の法線の転置逆行列ルールで遊んでいましたが、私が理解している限り、それは OGL がデフォルトで法線で行うことです。サーフェスがモデルビュー マトリックスで変換された後、サーフェス法線を再計算する必要があると思いますが、その方法は? それとも別の方法がありますか?