OpenGL:将对象转换为原点

时间:2010-10-12 21:37:56

标签: opengl graphics

我有一个汽车模型,其中包含顶点组中描述的汽车的不同部分。

3 个答案:

答案 0 :(得分:8)

你知道轮胎的当前位置,所以你使用从单位矩阵构建的平移矩阵和否定位置将其转换为原点:

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

答案 1 :(得分:1)

您可能想要查看glPushMatrix()和glPopMatrix()。 glPushMatrix()将保存您以前使用的任何平移/缩放/旋转操作(即旧的模型视图矩阵)。当您按下旧模型视图矩阵时,您将在原点工作。然后,您可以对当前绘制的任何内容执行任何新的平移/旋转/缩放操作。最后,你调用glPopMatrix()。这将重新加载旧的模型视图矩阵。这是考虑这些操作的最简洁,最简单的方法。

glPushMatrix();
// at this point you're working at the origin
// translate the tire here
// rotate the tire here
glPopMatrix();

一般来说,这是定位你正在绘制的东西的好方法。

答案 2 :(得分:0)

以下是代码:

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);

当tire_speed是轮胎旋转速度时,global_tire_rotate是轮胎相对于汽车的旋转。 Global_car_rotate是相对于z轴的汽车(以及带有它的物体,如车轮)的旋转。 * _translate_factor是你场景中汽车的*位置。它对我来说很好,希望它对你有用;)。