【问题标题】:3D Graphics: How to think about a model's position3D 图形:如何考虑模型的位置
【发布时间】:2010-09-20 22:28:21
【问题描述】:

我是图形新手。我正在试验 OpenGL / JOGL。

我有一个正在渲染的 .obj 文件。我很难将它准确地放置在世界上我想要的位置。考虑到模型的运行时集大小,我有一架我希望它休息的飞机。仅仅做一个转换是不够的,因为我需要考虑模型的尺寸。

即便如此,我也不确定如何将 .obj 参考系中的 0 转换为世界坐标系。

处理这个问题的惯用模式是什么?

【问题讨论】:

    标签: opengl graphics 3d jogl


    【解决方案1】:

    对于简单的翻译(分步):

    获取对象原点在世界坐标中的位置,并通过首先将原点乘以 -1 来创建一个平移矩阵:

    1 0 0 -xo
    0 1 0 -yo
    0 0 1 -zo
    0 0 0  1
    

    这将移动对象,使其原点与世界原点重合。因此,取您希望对象停留在平面上的 y 值(假设 y 为“向上”)并将其添加到上面计算的向量中,这样您的矩阵就变为:

    1 0 0 -xo
    0 1 0 (-yo + yp)
    0 0 1 -zo
    0 0 0  1
    

    这意味着平面与对象相交(假设原点位于对象内部)。现在找到对象的边界框,并从对象的原点取最小 y 值:

    +------+ ymax
    |      |
    |      |
    |   o  |
    |      |
    +------+ ymin
    

    其中“o”是原点。

    将其包含在矩阵中:

    1 0 0 -xo
    0 1 0 (-yo + yp + (yo - min))
    0 0 1 -zo
    0 0 0  1
    

    我认为这应该将您的对象放在飞机上。我已经有一段时间没有做这种事情了,所以我可能会有一些错误的迹象 - 所以仔细检查数字并准备好进行实验。

    【讨论】:

      【解决方案2】:

      您应该将模型的原点设置在它的脚下,并且大约在它的脚上。在它的重心之下。这样,当您缩放它时,它的位置(相对于地面)不会改变。

      然后,只需将其平移到您想要的位置,然后旋转,然后缩放(按此顺序) - 就完成了。

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 1970-01-01
        • 2018-01-26
        • 2021-12-27
        • 1970-01-01
        • 2018-08-23
        • 2012-01-05
        • 2011-09-16
        • 2014-04-17
        相关资源
        最近更新 更多