1

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);

}
4

0 に答える 0