2010-09-20 64 views
0

我是新来的图形。我正在试验OpenGL/JOGL。3D图形:如何思考模型的位置

我有一个.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 

我想这应该把你的对象搁在平面上。我做了这样的事情已经有一段时间了,所以我可能会有一些错误的方向 - 所以仔细检查一下数字,准备做实验。