1

任意の位置ではなく、独自の軸に沿って立方体を回転させる際に問題が発生しています。立方体は他の 27 個の立方体のコレクションであり、立方体のグループを正常に回転させることができましたが、正しい方法ではありませんでした。つまり、立方体を x 軸で回転させると、それ自体の軸ではなく、入力 (0,0,0) の周りを周回します。キューブを独自の軸を中心に回転させるにはどうすればよいですか?

public void onDrawFrame(GL10 gl) 
{
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glLoadIdentity();
    gl.glScalef(0.8f, 0.8f, 0.8f);  
    int k=0;

    gl.glPushMatrix();
    gl.glRotatef(cubeRotX, 0.0f, 0.0f , 1.0f);
    gl.glRotatef(cubeRotY, 0.0f, 1.0f , 0.0f);
    for(int l=0; l<3; l++)
    {
        if(l == 2)  //To rotate only the first front polygon in 1.7f angle
        {
            gl.glPushMatrix();
            gl.glRotatef(rot, 0.0f, 0.0f, 1.0f);
        }
        for(int i=0; i<3; i++)
        {               
            for(int j=0; j<3; j++)
            {
                gl.glPushMatrix();
                gl.glTranslatef(-2.1f+(2.1f*i), -2.1f+(2.1f*j), -23.1f+(2.1f*l));
                cube[k++].draw(gl);
                gl.glPopMatrix();
            }

        }
        if(l ==2)
        {
            gl.glPopMatrix();
            if(rot >= 90.0f)
                rot = 90.0f;
            else
                rot += 4.0f;  
        }
    }
    gl.glPopMatrix();
    cubeRotX -= 5.0f;
    cubeRotY -= 5.0f;
}
4

1 に答える 1

0

個々のキューブをそれぞれ回転するには、内側の glPushMatrix 内で回転を適用します。

編集:私はあなたを誤解しました。さらに情報を求めた。

明確化した後:

  • ID のロード
  • すべてのオブジェクトに一般的な変換を適用する
  • プッシュ マトリックス
  • 太陽の周りのすべての子立方体と太陽自体に回転を適用します (太陽の周りのすべての立方体の一般的な回転。アーカイブする対象によっては、おそらくこれはまったく回転しない可能性があります)。
  • プッシュ マトリックス
  • あなたの「太陽」に革命を起こしましょう。
  • 太陽を描く
  • ポップ マトリックス
  • 内部/子キューブごとに:
    • プッシュ マトリックス
    • 腐敗を適用
    • 立方体を描く
    • ポップマトリックス
  • ポップ マトリックス
于 2013-05-07T10:31:41.133 に答える