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

时间:2010-09-20 22:28:21

标签: opengl graphics 3d jogl

我是图形新手。我正在尝试使用OpenGL / JOGL。

我有一个我正在渲染的.obj文件。我很难把它放在我想要的世界里。考虑到模型的运行时设置大小,我有一台我希望它依赖的飞机。仅进行转换还不够,因为我需要考虑模型的维度。

即便如此,我也不确定如何在.obj的世界坐标系参考框架中翻译0。

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

2 个答案:

答案 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)

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

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