0

glRotate の後に座標を決定しようとしています。

最初に

 View.x = 0;
 View.y = 0;
 View.z = 10.0f;

そして、glRotate を実行します

新しい更新された座標を取得するにはどうすればよいですか?

 View.x = ?;
 View.y = ?;
 View.z = ?;

これはうまくいかないようです (何が間違っていますか?):

    glRotatef(angle, x, y, z);

    GLfloat theMatrix[16];
    glGetFloatv(GL_MODELVIEW_MATRIX, theMatrix);

    viewX  = View.x * theMatrix[0] + View.y * theMatrix[4] + View.z * theMatrix[8];
    viewY = View.x * theMatrix[1] + View.y * theMatrix[5] + View.z * theMatrix[9];
    viewZ = View.x * theMatrix[2] + View.y * theMatrix[6] + View.z * theMatrix[10];
4

1 に答える 1

0

glRotate は現在の modelView マトリックスを変更します... しかし、すべての変換は OpenGL パイプライン内で実行されるため、更新された結果を簡単に取得することはできません。

最も簡単な方法は、頂点データに回転行列を掛けることです。glm ライブラリ、その他のライブラリを使用するか、ベクトル/頂点変換用の独自のコードを作成できます。

描画したいすべての頂点の更新された値を取得したい場合は、変換フィードバックなどのより高度なものを使用できます

于 2012-05-11T09:02:35.253 に答える