之间有什么区别
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左右旋转对象?
答案 0 :(得分:6)
如果您要围绕x=5
进行轮播,则应glTranslate
至x=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度。注意方向不同。
虽然可以找到一个与任何一个排序产生相同结果的轮换,但它与总和不一样。
当您更改其他参数(假设您将它们均匀缩放)时,没有任何变化,因为旋转轴已标准化。