【问题标题】:How to properly apply transformations to OpenGL models如何正确地将转换应用于 OpenGL 模型
【发布时间】:2011-05-04 13:01:51
【问题描述】:

六个月以来,我一直在努力解决这个问题,并找到了一个可行的解决方案,但我就是不知道如何让我的模型完全按照我的意愿行事。我正在为 iPad 渲染一个带有轨迹球旋转实现和缩放/平移功能的 3D 模型,尽管转换代码将与桌面 OpenGL 的代码相同。目前,用户可以通过点击模型来改变模型的旋转中心。旋转中心发生变化,但原点保持静止,这导致模型远离用户触摸屏幕的位置。我想做的是允许用户触摸模型并使模型保持静止,但让它将原点移动到用户触摸的位置。我不确定执行此操作需要哪些转换或转换顺序。当前的转换顺序是:

glPushMatrix();
glTranslatef(pan.x, pan.y, 0);
glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
glTranslatef(-origin.x, -origin.y, -origin.z);
//draw model
glPopMatrix();

知道需要进行哪些更改才能使原点而不是模型移动吗?

【问题讨论】:

    标签: ipad opengl-es


    【解决方案1】:

    乍一看,我想说你应该在应用旋转矩阵之前将场景的原点移动到所需的旋转点,这样移动就会沿着全局轴发生。然后应用旋转矩阵,绘制项目,并将原点移回原始原点以用于显示功能的其余部分(应在 glPopMatrix 中处理)。

    glPushMatrix();
    glTranslatef(pan.x, pan.y, 0);
    glTranslatef(-origin.x, -origin.y, -origin.z);
    glMultMatrixf(mat); //this is my rotation/scale matrix I get from my arcball class
    //draw model
    glPopMatrix();
    

    【讨论】:

    • 我试过了,它使原点甚至不会改变,它只是改变模型。
    猜你喜欢
    • 2019-11-04
    • 2013-02-03
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 2018-07-19
    • 2021-11-21
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多