3D 图形:如何考虑模型的位置

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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】:

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

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

【讨论】:

以上是关于3D 图形:如何考虑模型的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Autodesk Forge 查看器在 3D 模型中查找位置(x、y、z 坐标)

如何将 3D 模型添加到场景中以使它们具有特定的 XYZ 位置?

如何使用4个角的位置获得3d平面的角度

为啥 3D 模型具有不同 uv 坐标的重复顶点位置

unity3d摄像机角度怎么调整啊?u3d如何调整摄像机的位置?求解

XNA 3D Skybox模拟问题,包括相机位置和模型转换