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 旋转对象?

4

3 回答 3

7

如果你想旋转,x=5你应该做一个glTranslatetox=5和你的 y 坐标是什么,然后glRotateglTranslate回到原点。

所以像

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

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

于 2013-01-28T20:11:30.560 回答
3

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

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

于 2013-01-28T20:11:22.420 回答
1

您不能简单地通过将轴相加来对旋转求和,它不会产生相同的结果级联变换。如果确实如此,则表明变换是可交换的,但显然不是。

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

虽然可以找到与任一排序产生相同结果的旋转,但它与总和不同。

当您改变其他参数(假设您统一缩放它们)时,没有任何变化,因为旋转轴是标准化的。

于 2013-01-28T20:33:53.410 回答