0

我有麻烦opengl。我想在向前/向后移动时旋转我的车辆。这是一张图片,它准确地显示了我的问题。当前代码的效果是蓝色的 - 移动汽车后,它会在起始位置而不是当前位置上旋转。我想要红色的情况 - 我的车辆将在当前位置上旋转,然后正确地向前/向后移动。

我当前的代码:

lxr=sin(angle);
lzr=cos(angle);

xr+=speed*lxr;
zr+=speed*lzr;

totalangle+=angle

glRotatef(totalangle,0.0,1.0,0.0);
glTranslatef(0.0,0.0,xr);
drawVehicle();
4

3 回答 3

2

您可以尝试在旋转之前调用翻译。glRotatef 旋转视图矩阵,它影响当前视图和矩阵 glTranslatef。

于 2013-06-18T04:32:03.043 回答
1

从图像中,我以为您是在平移然后旋转,但是查看代码,我发现这不是真的。

所以,很明显你在drawVehicle();函数中没有在中心(0,0)渲染你的对象。您需要在中心渲染它,旋转然后平移。

另外,你的翻译是假的。您只是在 z 方向上平移,而不是在 y 方向上:

glTranslatef(0.0,0.0,xr);

你需要做这样的事情:

glRotatef(totalangle,0.0,1.0,0.0);
glTranslatef(0.0,yOffset,0.0);
drawVehicle(); // render around [0,0]
于 2013-06-18T06:32:53.910 回答
0

您还必须移动坐标系的原点,以便根据需要旋转汽车。

于 2013-06-18T04:39:20.330 回答