私は自分のゲームの世界で建物を描き、次のコードでそれらをシェーディングします。
GLfloat light_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat light_position[] = {135.66f, 129.83f, 4.7f, 1.0f};
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glColorMaterial(GL_FRONT, GL_AMBIENT);
それはうまく機能します。
しかし、私が世界を飛び始めると、あたかも世界が回転しているオブジェクトであるかのように、照明がそれに反応します。つまり、カメラアングルが変わると、ライトも変わります。
その回転を元に戻すにはどうすればよいですか?そのため、照明は実際には世界を回転させていないと見なし、建物に静的な陰影を付けて、太陽が空のどこにあるかによって変化するようにすることができます。
編集:ここにレンダリングコードがあります:
int DrawGLScene()
{
// stuff
glLoadIdentity();
glRotatef(XROT, 1.0f, 0.0f, 0.0f);
glRotatef(YROT, 0.0f, 1.0f, 0.0f);
glRotatef(ZROT, 0.0f, 0.0f, 1.0f);
glTranslatef(-XPOS, -YPOS, -ZPOS);
// draw world
}