0

シーンを表示する方法の 1 つは、gluLookAt を使用するか、独自のカスタム表示ルーチンを作成することです。本のフライト シミュレーターで、このカスタム表示ルーチンに出会いました。

void pilotView(GLdouble planex, GLdouble planey,
GLdouble planez, GLdouble roll,
GLdouble pitch, GLdouble heading)
{
    glRotated(roll, 0.0, 0.0, 1.0);
    glRotated(pitch, 0.0, 1.0, 0.0);
    glRotated(heading, 1.0, 0.0, 0.0);
    glTranslated(-planex, -planey, -planez);
}

カメラを時計回りに x 度回転させることは、ターゲット オブジェクトを反時計回りに x 度回転させることと同じです。したがって、たとえば「ロール」角度を指定する場合、「glRotated(roll, 0.0, 0.0, 1.0)」ではなく「glRotated(-roll, 0.0, 0.0, 1.0)」と記述すべきではないでしょうか?

4

1 に答える 1

0

いいえ、すべきではありません。OpenGL では、三角形はカメラではなく変換されます。OpenGL にはカメラの概念がありません。したがって、変換に回転を追加すると、オブジェクトはこの更新された変換によって回転します。

gluLookAt は、オブジェクトを見ているかのようにオブジェクトの変換を設定するだけですが、それでも変換されるのはオブジェクトです。

この関数に関しては、ビューが水平に整列するのではなく平面に整列し、後ろではなく中央にぶら下がるように設定するように変換を設定すると思います。 . 呼び出しは変換を設定するのではなく、更新することに注意してください。

于 2013-06-26T15:21:19.197 に答える