AndroidのOpenGLを用いて、あるキャラクターの描画に困っています。
以下の、(1)と(2)の方法では同じ効果を発するはずですが、
結果が異なります。なぜでしょうか?
Xの処理を「頭部分」と「体部分」の描画にそれぞれ掛けるか、
両方の部分に一度に掛けるかで、結果は同じになると想定してます
数学でいうとx(a+b) = xa+xb
みたいな感じで同じになるはずなのに、異なります。
X----------------------------------------------------------------------
gl.glTranslatef(x, y, z);
gl.glRotatef(angle_x, 1.0f, 0.0f, 0.0f);
gl.glRotatef(angle_y, 0.0f, 1.0f, 0.0f);
gl.glRotatef(angle_z, 0.0f, 0.0f, 1.0f);
----------------------------------------------------------------------
(1)------------------------------------------------
gl.glPushMatrix();{
// 頭部分
gl.glPushMatrix(); {
gl.glTranslatef(x, y, z);
gl.glRotatef(angle_x, 1.0f, 0.0f, 0.0f);
gl.glRotatef(angle_y, 0.0f, 1.0f, 0.0f);
gl.glRotatef(angle_z, 0.0f, 0.0f, 1.0f);
gl.glTranslatef(0.0f , 0.0f, 0.0f);
[頭部分描画処理]
} gl.glPopMatrix();
// 体部分
gl.glPushMatrix(); {
gl.glTranslatef(x, y, z);
gl.glRotatef(angle_x, 1.0f, 0.0f, 0.0f);
gl.glRotatef(angle_y, 0.0f, 1.0f, 0.0f);
gl.glRotatef(angle_z, 0.0f, 0.0f, 1.0f);
gl.glTranslatef(0.0f, -4.2f, 0.0f);
[体部分描画処理]
} gl.glPopMatrix();
} gl.glPopMatrix();
------------------------------------------------
(2)------------------------------------------------
gl.glPushMatrix();{
gl.glTranslatef(x, y, z);
gl.glRotatef(angle_x, 1.0f, 0.0f, 0.0f);
gl.glRotatef(angle_y, 0.0f, 1.0f, 0.0f);
gl.glRotatef(angle_z, 0.0f, 0.0f, 1.0f);
// 頭部分
gl.glPushMatrix(); {
gl.glTranslatef(0.0f, 0.0f, 0.0f);
[頭部分描画処理]
} gl.glPopMatrix();
// 体部分
gl.glPushMatrix(); {
gl.glTranslatef(0.0f, -4.2f, 0.0f);
[体部分描画処理]
} gl.glPopMatrix();
} gl.glPopMatrix();
------------------------------------------------