私は次のように初期化する直交する視点を持っています:
gl.glViewport(0, 0, Constants.SCREEN_WIDTH, Constants.SCREEN_HEIGHT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0,Constants.GAME_AREA_WIDTH, Constants.GAME_AREA_HEIGHT, 0, 1, 10);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
ここでやりたいのは、画面の上部から正方形を開始することです((x、-100、z)のように、その正方形は(yで)下降し、同時に(zで)回転します。
正方形の左上は、正方形の位置の参照として使用するものです。
さて、今、私はそれを自分の周りで回転させる方法を理解していると思います。モノを(-squareSize / 2、-squareSize / 2、z)に変換し、zに沿って回転させてから、逆に変換します。実際、この回転のみをテストすれば、問題なく機能します。
gl.glLoadIdentity();
angle = angle + 3;
if(angle>360) {
angle = angle - 360;
}
gl.glTranslatef(xCurrent+size/2, yCurrent+size/2,0);
gl.glRotatef(angle, 0, 0, 1);
gl.glTranslatef(-(xCurrent+size/2), -(yCurrent+size/2),0);
//omitted: enable client state, draw elements, disable client state.
これだけで、正方形をどこに配置しても(xとyの小さな負の値でさえ、画面に部分的にしか表示されません)、その中心を中心に回転します。
しかし、yに下向きの翻訳を追加する方法がわかりません。私がこのようなことをした場合:
angle = angle + 3;
if(angle>360) {
angle = angle - 360;
}
gl.glTranslatef(xCurrent+size/2, yCurrent+size/2,0);
gl.glRotatef(angle, 0, 0, 1);
gl.glTranslatef(-(xCurrent+size/2), -(yCurrent+size/2),0);
yCurrent = yCurrent + realSpeed;
if(yCurrent>Constants.GAME_AREA_HEIGHT+size) {
yCurrent=-size;
}
gl.glTranslatef(0f, yCurrent,0f);
正方形が(0,0、z)から始まる場合にのみ問題なく機能します。その場合、正方形は下に移動し、中心を中心に回転します。
ただし、xまたはyのいずれかに対して0以外の正または負の値で開始した場合でも、下に移動しますが、中心に対して回転する代わりに、奇妙なスパイラルモーションを実行します。