旋转一个Object,但始终将Object转换为自己的前轴

时间:2012-11-23 18:01:40

标签: android opengl-es rotation transformation

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

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

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

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

2 个答案:

答案 0 :(得分:0)

Opengl使用矩阵来创建图像。

在矩阵中,乘法没有关联属性。因此,当您旋转对象然后对其进行翻译时,如果您没有先将其翻译,则该对象将以不同的位置结束。

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

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

答案 1 :(得分: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);