2011-01-20 12 views
0

のコード作成日が間違っています。Iphone OpenGL:glOrthofとglFrustumf。 3次元ではありませんか?

私は、ユーザーのやりとりを介して周りを回転する3Dキューブを作成する必要があります。やあ、大したことはない。
3Dキューブを作成するすべての例はglOrthofを使用するように見えますが、私が人にデモするときに3Dではないと言っています。

問題はglFrustumfが私の目の代わりにキューブに入れているように見えることです。それはのModelViewマトリックスを再使用していますので、私は質問があるので、(私は手動でもあることを変更しようとした)glTransformを使用して

/* save current rotation state */ 
GLfloat matrix[16]; 
glGetFloatv(GL_MODELVIEW_MATRIX, matrix); 

/* re-center cube, apply new rotation */ 
glLoadIdentity(); 


glRotatef(self.angle, self.dy,self.dx,0); 

/* reapply other rotations so far */ 
glMultMatrixf(matrix); 

それをバックに移動傾けます。 3D立方体を行うには
私はglFrustumfを使用しなければならないし、もしそうなら、私は戻って5まだ再利用モデル行列どのように地獄ステップん(それは、ユーザーがそれを移動し、これまでどのような方向でのキューブの回転を保つ)

+0

あなたの['glMatrixMode()'](http://www.khronos.org/opengles/documentation/opengles1_0/html/glMatrixMode.html)の呼び出しはどこですか? – genpfault

答えて

3

glOrthof()が「3-Dではない」という意味がわかりません。回転キューブの例では、here(テクスチャキューブのレンダリングにOpenGL ES 1.1と2.0の両方を使用しています)が3-Dで動作しているようですが、レンダラのOpenGL ES 1.1側ではglOrthof()を使用します。シェーディングその他のエフェクトは、glOrthof()の使用方法とは独立して適用できます。

この例では、モデルビューマトリックスを読み込んでキューブを操作しません。代わりに、マトリックスのコピーをローカルに保持し、いくつかのCore Animationヘルパ関数を使用してそれを修正します。キューブで実行するCATransform3DRotate()に加えて、CATransform3DTranslate()を投げ込んで、それをまだ回転させながら特定の方向に置き換えることができます。

パフォーマンスのためにモデルビューマトリックスのローカルコピーを保持しています(モデルビューマトリックスを読み返すとOpenGL ES 1.1のレンダリングパイプラインが停止します)。2.0との互換性のためにシェイダー)。

また、あなたの後の質問(閉鎖される可能性があります)に対する回答では、モデルビューマトリックス内の値を任意に変更することはできず、それから線形変位を見込むことはできません。あなたは数学の権利を得る必要があり、行列の数学は決して私の強みの一つではありませんでした。私は、(Core Animationで提供されているような)変換操作で、行列を操作するときにあなたに数学をさせるのが最善の方法です。

関連する問題