6つの異なるテクスチャを持つ立方体があります。シンプルなアニメーションを書きました。立方体を回転させているときは、すべて問題ありませんが、アニメーションの後、テクスチャによって位置が変わります。
例では。立方体を左側に回転させています。そして、右側が見えますが、正面からのテクスチャがあります(アニメーション後)。
アニメーション中に立方体が評価されているときは、正しいテクスチャが表示されていますが、テクスチャが正面からテクスチャに変更された後です。
これは私のキューブの描画メソッドのコードです。
public void draw(GL10 gl) {
gl.glFrontFace(GL10.GL_CCW);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuffer);
// front
gl.glPushMatrix();
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[front]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glPopMatrix();
// left
gl.glPushMatrix();
gl.glRotatef(270.0f, 0f, 1f, 0f);
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[left]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
gl.glPopMatrix();
// back
gl.glPushMatrix();
gl.glRotatef(180.0f, 0f, 1f, 0f);
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[back]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
gl.glPopMatrix();
// right
gl.glPushMatrix();
gl.glRotatef(90.0f, 0f, 1f, 0f);
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[right]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
gl.glPopMatrix();
// top
gl.glPushMatrix();
gl.glRotatef(270.0f, 1f, 0f, 0f);
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[top]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
gl.glPopMatrix();
// bottom
gl.glPushMatrix();
gl.glRotatef(90.0f, 1f, 0f, 0f);
gl.glTranslatef(0f, 0f, cubeHalfSize);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[bottom]);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
gl.glPopMatrix();
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
これが私の更新方法です
public void updateRotation(GL10 gl) {
if (currentProgress >= 1f) {
return;
}
long dt = System.currentTimeMillis() - getAnimStart();
currentProgress = dt / (float) animTime;
Log.d("progress", "" + currentProgress);
if (currentProgress > 1f) {
currentProgress = 1;
}
else if(currentProgress < 0){
currentProgress = 0;
}
currentProgress = interpolator.getInterpolation(currentProgress);
setCurrentRotX((initialRotX + (targetRotX - initialRotX) * currentProgress));
gl.glRotatef(-(float)((getCurrentRotX() * 180)/Math.PI), 1.0f, 0.0f, 0.0f);
setCurrentRotY(initialRotY + (targetRotY - initialRotY) * currentProgress);
gl.glRotatef(-(float)((getCurrentRotY() * 180)/Math.PI), 0.0f, 1.0f, 0.0f);
}