【发布时间】:2010-10-12 21:37:56
【问题描述】:
我有一个汽车模型,它在顶点组中描述了汽车的不同部分。
【问题讨论】:
-
单位矩阵根本不会移动它。这里的身份是“相同”的意思:根本不改变位置。使用@ChrisF 的平移矩阵将每个轮胎从其中心移动到原点并返回。
我有一个汽车模型,它在顶点组中描述了汽车的不同部分。
【问题讨论】:
您知道轮胎的当前位置,因此您可以使用从单位矩阵和求反位置构建的平移矩阵将其转换为原点:
1 0 0 -x
0 1 0 -y
0 0 1 -z
0 0 0 1
然后旋转,然后应用正向变换将其放回原处:
1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1
【讨论】:
您可能想查看 glPushMatrix() 和 glPopMatrix()。 glPushMatrix() 将保存您之前使用的任何平移/缩放/旋转操作(即您的旧模型视图矩阵)。当您推送旧模型视图矩阵时,您将在原点工作。然后,您可以对当前正在绘制的任何内容执行任何新的平移/旋转/缩放操作。最后,调用 glPopMatrix()。这将重新加载您的旧模型视图矩阵。这是考虑这些操作的最简洁和最简单的方法。
glPushMatrix();
// at this point you're working at the origin
// translate the tire here
// rotate the tire here
glPopMatrix();
一般来说,这是定位您正在绘制的东西的好方法。
【讨论】:
代码如下:
glTranslatef(x_translate_factor,y_translate_factor,z_translate_factor);
glRotatef(global_car_rotate,0,1,0) ;
glRotatef(global_tire_rotate,0,1,0);
glRotatef(tire_speed,1,0,0);
其中tyre_speed 是轮胎旋转速度,global_tire_rotate 是轮胎相对于汽车的旋转。 Global_car_rotate 是汽车(以及带有它的物体,例如车轮)相对于 z 轴的旋转。 *_translate_factor 是汽车在您的场景中的 * 位置。它对我来说很好,希望对你有用;)。
【讨论】: