質問
次のコードで
私はゲーム世界に建物を描き、私は日陰にそれらをます:
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
}
解決
http://www.opengl.org/resources/faq/technical /lights.htmする
#18.050を参照してください。
要するに、あなたは右の参照フレームにあなたの光の位置を定義し、適切なを適用していることを確認する必要があり、あなたがそれをしたい場所、それを維持するために、各フレームを変換します。
他のヒント
私はあなたの問題はOpenGLのライトが世界座標で指定しますが、カメラ座標に内部的に保存されていることに起因すると考えています。これは、光を置いたら、あなたはカメラを移動するたびに、あなたの光がそれと一緒に移動することを意味します。
この問題を解決するには、あなたのカメラを移動するたびに、単にあなたのライトの位置を変更します。
所属していません StackOverflow