OpenGL glRotatef

时间:2013-01-28 20:08:45

标签: opengl glrotate

之间有什么区别
glRotatef(angle, 1.0f, 0.0f, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);

glRotatef(angle, 1.0f, 0.0f, 1.0f);

当我将第二个参数1.0f更改为5.0f时,为什么没有变化? 最后,如何围绕x = 5而不是x = 0左右旋转对象?

3 个答案:

答案 0 :(得分:6)

如果您要围绕x=5进行轮播,则应glTranslatex=5以及y坐标,然后执行glRotate然后glTranslate返回到原点。

类似

glTranslate(5, 0, 0);
glRotatef(...);
glTranslate(-5, 0, 0);

对于第一个问题我包括@ genpfault的完整答案。这是由于glRotatef()对您传入的矢量进行矢量归一化。

答案 1 :(得分:3)

  

当我将第二个参数1.0f更改为5.0f时,为什么没有任何变化?

您传递的矢量glRotatef()在使用前已标准化。

答案 2 :(得分:1)

您不能通过将轴添加到一起来简单地对旋转进行求和,它不会产生相同的结果连接变换。如果确实如此,则表明转换是可交换的,但它们显然不是。

拾取物体并围绕Y轴旋转90度,然后围绕X轴旋转90度。看看它是如何定向的。现在返回原始位置,并在X中旋转90度,然后在Y中旋转90度。注意方向不同。

虽然可以找到一个与任何一个排序产生相同结果的轮换,但它与总和不一样。

当您更改其他参数(假设您将它们均匀缩放)时,没有任何变化,因为旋转轴已标准化。