初識open GL esコンビネーションアニメーション
1368 ワード
詳細
Translate&Rotate(平行移動と回転の組み合わせ変換)
通常の理解では、先に平行移動するのと先に回転するのは変わらないでしょうが、テストされた結果、確かに大きな違いがあります.結果が全く違う.例は次のとおりです.
まず四角を描いて中心点の周りを自転します.
次に、1つのブロックBを描いて、ブロックAの周りを回転します.通常のコード(回転してから平行移動)は次のようにします.
ただし、移動してから回転する場合は、次の手順に従います.
ブロックAとブロックBが同軸に回転する.
さらに回転
中パラメータX,Y,Zは全体であり,(x,y,z)のベクトル座標であるべきである.
原理的な問題はさらに理解している.
Translate&Rotate(平行移動と回転の組み合わせ変換)
通常の理解では、先に平行移動するのと先に回転するのは変わらないでしょうが、テストされた結果、確かに大きな違いがあります.結果が全く違う.例は次のとおりです.
まず四角を描いて中心点の周りを自転します.
// SQUARE A
// Save the current matrix.
gl.glPushMatrix();
// Rotate square A counter-clockwise.
gl.glRotatef(angle, 0, 0, 1);
// Draw square A.
square.draw(gl);
// Restore the last matrix.
gl.glPopMatrix();//
次に、1つのブロックBを描いて、ブロックAの周りを回転します.通常のコード(回転してから平行移動)は次のようにします.
// SQUARE B
// Save the current matrix
gl.glPushMatrix();
// Rotate square B before moving it, making it rotate around A.
gl.glRotatef(-angle, 0, 0, 1);
// Move square B.
gl.glTranslatef(2, 0, 0);
// Scale it to 50% of square A
gl.glScalef(.5f, .5f, .5f);
// Draw square B.
square.draw(gl);
gl.glPopMatrix();
ただし、移動してから回転する場合は、次の手順に従います.
gl.glTranslatef(2, 0, 0);//
gl.glRotatef(-angle, 0, 0, 1);//
ブロックAとブロックBが同軸に回転する.
さらに回転
public abstract void glRotatef (float angle, float x, float y, float z)
中パラメータX,Y,Zは全体であり,(x,y,z)のベクトル座標であるべきである.
原理的な問題はさらに理解している.