0

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

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

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

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

4

2 回答 2

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

我认为这应该把你的物体放在飞机上。自从我做这种事情以来已经有一段时间了,所以我可能会有一些错误的迹象 - 所以仔细检查数字并准备好进行实验。

于 2010-09-20T22:43:23.187 回答
0

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

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

于 2010-09-25T14:09:39.467 回答