Android 用のレーシングゲームをプログラムしたいと考えています。私の問題は、車を回転させて位置を変換したい場合、車の新しい方向に変換されず、常に世界の X 軸に変換されることです。
これが私の間違ったコードです..ありがとう
gl.glTranslatef(car.position.x, car.position.y, car.position.z);
gl.glRotatef(car.currentAngle, 0, 1, 0);
Android 用のレーシングゲームをプログラムしたいと考えています。私の問題は、車を回転させて位置を変換したい場合、車の新しい方向に変換されず、常に世界の X 軸に変換されることです。
これが私の間違ったコードです..ありがとう
gl.glTranslatef(car.position.x, car.position.y, car.position.z);
gl.glRotatef(car.currentAngle, 0, 1, 0);
OpenGL は行列を使用して画像を作成します。
行列では、乗算には連想プロパティがありません。したがって、オブジェクトを回転してから平行移動すると、最初に平行移動しなかった場合とは対照的に、オブジェクトは別の位置に配置されます。
オブジェクトの変換と変換の解決策は、アニメーション化と変換です。そうすれば、オブジェクトの回転の連想特性を気にせずに、好きな場所に移動できます。
オブジェクトに対する非関連乗算の効果を確認するには、これを試してください。オブジェクトを約 8 回回転および平行移動し、それぞれ 8 回回転および平行移動します。オブジェクトが消えることに気付くでしょう。「位置を変えながら円を描くように回転する」のとは対照的です。
わかりました、解決策があります。私がしなければならないことは、私の車の新しい角度によって変更される新しい方向ベクトルに向かって私の車を移動することです:)
if (accel < 0)
position.add((float) Math.sin(current * Math.PI/180)/5, 0, (float) Math.cos(currentangle * Math.PI/180)/5);
if (accel > 0)
position.sub((float) Math.sin(current * Math.PI/180)/5, 0, (float) Math.cos(currentangle * Math.PI/180)/5);
そしてレンダリングクラスで
gl.glTranslatef(car.position.x, car.position.y, car.position.z);
gl.glRotatef(car.currentAngle, 0, 1, 0);