【问题标题】:OpenGL glRotatefOpenGL glRotatef
【发布时间】:2013-01-28 20:08:45
【问题描述】:

有什么区别

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

【问题讨论】:

    标签: opengl glrotate


    【解决方案1】:

    如果你想围绕x=5 旋转,你应该做一个glTranslatex=5,不管你的y 坐标是什么,然后做glRotate 然后glTranslate 回到原点。

    类似

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

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

    【讨论】:

    • 谢谢,第一个问题呢?
    • @peaceman 查看 genpfaults 的答案,了解为什么它不会改变。如果您愿意,我可以将其编辑到我的答案中。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多