OpenGL glRotatef

6
什么是两者之间的区别?
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个回答

7
如果您想围绕 x=5 旋转,应该先进行一次 glTranslatex=5 和您的 y 坐标,然后进行 glRotate 操作,最后再进行一次 glTranslate 回到原点。
所以,大致操作如下:
glTranslate(5, 0, 0);
glRotatef(...);
glTranslate(-5, 0, 0);

为了完整起见,我将包括@genpfault的答案来回答第一个问题。这是由于glRotatef()对您传入的向量进行的向量归一化造成的。


谢谢,第一个问题呢? - peaceman
@peaceman 请看genpfault的回答,了解为什么它不会改变。如果你想的话,我可以将其编辑到我的答案中。 - Jesus Ramos

3

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

在使用之前,您传递给glRotatef()的向量会被归一化。


1
您不能简单地通过将轴相加来求和旋转,这不会产生相同的连接变换结果。如果是这样的话,它会表明变换是可交换的,而它们显然不是可交换的。
拿起一个物体并围绕Y轴旋转90度,然后围绕X轴旋转90度。观察它的定位方式。现在返回原始位置,并在X轴上旋转90度,然后在Y轴上旋转90度。请注意,方向不同。
虽然可能找到一种旋转方法,可以产生与任一顺序相同的结果,但它不同于总和。
当您改变其他参数(只要您统一缩放它们)时,没有任何变化,因为旋转轴被规范化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接