我是图形新手。我正在尝试使用OpenGL / JOGL。
我有一个我正在渲染的.obj文件。我很难把它放在我想要的世界里。考虑到模型的运行时设置大小,我有一台我希望它依赖的飞机。仅进行转换还不够,因为我需要考虑模型的维度。
即便如此,我也不确定如何在.obj的世界坐标系参考框架中翻译0。
处理这个问题的惯用模式是什么?
答案 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
我认为这应该让你的物体停留在飞机上。我做了这样的事情已经有一段时间了,所以我可能会有一些错误的方法 - 所以仔细检查数字并准备好进行实验。
答案 1 :(得分:0)
您应该将模型的原点设置在其底部,并且大约。在它的重心下。这样,当你缩放它时,它的位置(相对于地面)不会改变。
然后,只需将其翻译到您想要的位置,然后旋转,然后缩放(按此顺序) - 您就完成了。