我想为 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);