我有一个汽车模型,用顶点组描述汽车的不同部分。OpenGL:将对象转换为原点
回答
你知道轮胎的当前位置,使您在使用从单位矩阵和否定的位置建了平移矩阵将其翻译为原点:
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
这是原始的海报。感谢您的回应。如果我给了一堆组成轮胎的顶点,我该如何找到这些顶点的中心点?我猜这就是这些翻译矩阵中的x y z值。我需要为我的轮胎定义一个向量基础吗? – TheGambler 2010-10-12 23:55:52
@ TheGambler:查看轴对齐边界框(AABB)。找到轮胎顶点的AABB。那个盒子的中心通常通常可以很好地工作在轮胎的中心。对于更奇怪的形状的物体,你可能会想要质心,这是更复杂的计算。在这些情况下,艺术家的工作通常是将模型置于适当的位置,或者至少添加一些可导出的标记来标记该位置。 – Alan 2010-10-14 15:05:44
下面是代码:
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);
当轮胎速度是轮胎旋转速度时,global_tire_rotate是轮胎相对于汽车的旋转。 Global_car_rotate是汽车(以及诸如车轮之类的物体)相对于z轴的旋转。 * _translate_factor是车内的位置。它对我来说工作得很好,希望它对你有用;)。
您可能想要查看glPushMatrix()和glPopMatrix()。 glPushMatrix()将保存您之前使用的任何平移/缩放/旋转操作(即您的旧模型视图矩阵)。当你推动旧的模型视图矩阵时,你将在原点工作。然后,您可以执行任何新的翻译/旋转/缩放操作,以适应您目前绘制的任何内容。最后,你调用glPopMatrix()。这将重新加载您的旧模型视图矩阵。这是考虑这些操作的最简单和最简单的方法。
glPushMatrix();
// at this point you're working at the origin
// translate the tire here
// rotate the tire here
glPopMatrix();
一般来说,这是定位你正在绘制的东西的好方法。
- 1. 将OpenGL原始图转换为OpenGLES
- 2. OpenGL - 对象转换和VBOs
- 3. 从对象转换为原始类
- 4. 将@RequestBody转换为对象
- 5. 将对象转换为json
- 6. 将对象转换为json?
- 7. 将对象转换为行
- 8. 将对象转换为xml
- 9. 将HttpResponseMessage转换为对象
- 10. 将流转换为对象?
- 11. 将对象转换为NameValueCollection
- 12. 将对象转换为NSDictionary
- 13. 将jcas对象转换为json对象
- 14. 将javascript对象转换为json对象
- 15. 将对象转换为jquery对象
- 16. 将Image对象转换为BufferedImage对象
- 17. 将TS对象转换为data.frame对象
- 18. 将Image对象转换为FormFile对象
- 19. 将对象坐标转换为屏幕坐标Android OpenGL ES
- 20. 将OpenGL 1.1代码转换为OpenGL 2.0
- 21. 转换对象为对象
- 22. opengl:将原点更改为左上角
- 23. 犀牛Javascript:如何将对象转换为Javascript原始?
- 24. 如何将字节从Kafka转换为原始对象?
- 25. 将原始XML字符串转换为java对象列表?
- 26. 将原始HTTP请求转换为HTTPWebRequest对象
- 27. 犀牛 - 将参数映射转换为原生JS对象
- 28. OpenGL对象旋转
- 29. 将矩形的顶点转换为不以原点为中心
- 30. 将jQuery转换为原型
身份矩阵根本不会移动它。 *身份*在这里是“相同”的意思:根本不要改变立场。使用@ ChrisF的翻译矩阵将每个轮胎从中心移动到原点和后面。 – LarsH 2010-10-12 21:47:43