2

私のプロジェクトの単純なバージョンは、ユーザー入力に基づいて球を回転させています。

ただし、openGLのローカル座標系が原因で、特定の状況で複数回回転すると、回転がおかしくなります。私が本当に必要としているのは、ワールド/固定座標系に基づいて回転することです。球を一度回転させると、その回転軸も回転しないようになります。この問題については、 http: //www.opengl.org/resources/faq/technical/transformations.htm(9.070)で説明されています。

私はそれをすべて理解しています。しかし、彼らが提案するものを設定することは、私のスキルレベルを少し超えています。誰かがこれを経験したことがありますか?ここで見つけたコードhttp://chaosengineer.com/?cat=19を使用してみましたが、うまくいきませんでした。

これが私が使用している基本的なコードです。

glPushMatrix();

//draw in middle of the screen
glTranslatef(ofGetWidth()/2,ofGetHeight()/2,0);

glRotatef(xRot,1,0,0);
glRotatef(zRot,0,0,1);

glTranslatef(-ofGetWidth()/2,-ofGetHeight()/2,0);

ofSetColor(255, 255, 255, 255);
squirrelModel.draw();
glPopMatrix();
4

1 に答える 1

2

オブジェクト指向をマトリックスとして保存する必要があります。または、ベクトルのセット(ローカルX、ローカルY、ローカルZ)として。

オブジェクトを少し回転させるには、毎回方向行列に回転行列を掛けます。方向行列のすべてのベクトルが互いに垂直のままであることを確認してください。

この場合、レンダリング時に、glRotate/glTranslateの代わりにglMultMatrixを使用する必要があります。

または、クォータニオンを使用します。

完全な答えではないことは理解していますが(これを行うためのライブラリとコードを作成しましたが)、これを説明するにはかなりの時間がかかります。

NVidia OpenGL SDKをダウンロードして、デモでオブジェクトの回転をどのように処理したかを確認してください。また、グーグルで3D方向を検索します。一部の論文では、行列などを使用してオブジェクト指向を格納する方法を説明する必要があります。

そしてeuclidianspace.comをチェックしてください

于 2010-08-23T21:53:53.750 に答える