2010-12-05 29 views
0

回転についてZ軸45度:glRotatef(45.0,0.0,0.0,1.0); ポイント(10.0、-5.0,0.0)の周りをZ軸回りに45度回転させるには、翻訳する必要がありますか?OpenGLのz軸回りの回転

+0

ポイント周りを回転するには、はい、翻訳する必要があります。翻訳したり、オブジェクトを回転させたり、次のトランスフォームをカスケードしないように変換したり、glPushMatrix()とglPopMatrix()の間にこれら2つを入れたい場合は、あなたに任されます。 –

+0

push、gltranslatef、glrotatef、popありがとう! – rotate

答えて

1

glRotatef()関数に関することは、原点を回転させるだけであるということです。したがって、特定の点を回転させるには、その点を原点に変換し、回転を行い、元に戻す必要があります。だから、あなたのポイントのために(10、-5、0)あなたはどうなる:私は例示なぜ

glPushMatrix(); // you do this to avoid disturbing the transformation matrices for any code following the below lines 

glTranslatef(-10, +5, 0); // translate so that (10, -5, 0) lies at the origin 
glRotatef(45, 0, 0, 1); // now rotate 
glTranslatef(10, -5, 0); // translate back 

// now you have rotated the scene by 45 degrees arround z-axis, at point (10, -5, 0) 

// (draw your object *here*) 

glPopMatrix(); // the old matrix is back 

// now it is as if nothing happened 

プッシュ/ポップ行列がしばしば誤解され、それはです。新しいOpenGLでは、暗黙的な行列スタックは存在しないため、行列を手作業で管理する必要があります。やや複雑になりますが、代わりに混乱はありません。