z=0
上から中央に拡散照明を配置して、2つの三角形を描画しています。それらの1つをz
軸でスケーリングすると、照明が変わります。以来z=0
、z軸でのスケーリングは効果がないと思っていたでしょう。
私は何が欠けていますか?
レンダリングコード
// Set up the a light centered horizontally.
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
float light1Position[] = { 0.0f, 2.0f, 0.0f, 1.0f };
float light1Diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glLightfv(GL_LIGHT0, GL_POSITION, light1Position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light1Diffuse);
// Set up the material.
float material1Diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
glMaterialfv(GL_FRONT, GL_DIFFUSE, material1Diffuse);
// Transform such that we can draw in (-1, -1) to (1, 1) at z = 0.
glTranslated(0, 0, -1);
glScaled(2, 2, 1);
// Draw two triangles, symmetric w.r.t. to the light and camera.
glBegin(GL_TRIANGLES);
glVertex3d(-1, -1, 0);
glVertex3d( 0, 1, 0);
glVertex3d(-1, 1, 0);
glEnd();
glScaled(1, 1, 5.0); // This should be a no-op since 5 * 0 = 0.
// However, the following triangle is darker.
glBegin(GL_TRIANGLES);
glVertex3d( 1, -1, 0);
glVertex3d( 1, 1, 0);
glVertex3d( 0, 1, 0);
glEnd();
レンダリング結果
これを再現するCocoaプロジェクトをgithubにアップロードしました。私はこれをObjective-CとC++の両方で試しました。