0

我想为 Android 编写一个赛车游戏。我的问题是,如果我旋转汽车并想要平移位置,它不会平移到汽车的新方向,而是始终在世界的 X 轴上。

这是我的错误代码..谢谢

gl.glTranslatef(car.position.x, car.position.y, car.position.z);

gl.glRotatef(car.currentAngle, 0, 1, 0);
4

2 回答 2

0

Opengl 使用矩阵来创建图像。

在矩阵中,乘法没有关联属性。因此,当您旋转一个对象然后平移它时,如果您没有先平移它,那么该对象将最终处于不同的位置。

转换和平移对象的解决方案是动画和平移。这样您就可以在任何地方进行翻译,而不必担心对象旋转的关联属性。

要查看非关联乘法对对象的影响,请尝试以下操作:旋转和平移对象约 8 次,分别旋转和平移 8 次。你会注意到你的对象会消失。与“在改变位置时旋转一圈”相反。

于 2012-11-23T19:32:32.823 回答
0

好的,我有解决方案。我所要做的就是将我的汽车翻译成新的方向矢量,该矢量会被我的汽车的新角度改变:)

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);
于 2012-11-24T10:41:54.340 回答