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 位置?