初識open GL esコンビネーションアニメーション

1368 ワード

詳細
 
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)のベクトル座標であるべきである.
原理的な問題はさらに理解している.