在3D场景中存储模型位置的好方法是什么?



我想知道在3D场景中存储对象位置的最佳方法是什么。在我的例子中,场景实际上是游戏的关卡。

每个场景有:

  • 它自己的投影矩阵。
  • 要渲染的模型列表

每个模型有:

  • 一个显示自身的GLSL程序
  • 纹理
  • "模型"矩阵

我正在使用gles2。所以没有glPushMatrix glPopMatrix glTranslate等。他们不在。相反,我有我自己的函数来操作我自己的矩阵对象。

1)设置投影矩阵(使用正交矩阵)

_math_matrix_ortho(&this->ProjectionMatrix, 0.0, 1.0, 0.0, (float)height / (float)width, -1.0f, 1.0f);

2)加载每个模型

3)缩放每个模型,使它们按比例排列在右边。缩放函数调整模型的"模型"矩阵。

model->modelMatrix.Scale(0.25, 0.25, 0.25);

4)将每个模型移动到合适的位置

model->modelMatrix.Translate(2.0, 0.0, 0.0);
7)渲染每个模型

对我来说似乎很奇怪:为了定位模型,翻译模型的矩阵是否合适?

我应该将模型ID与旋转,缩放和翻译因素一起存储在某个文件中吗?

一般来说,你希望每帧尽可能少地进行矩阵计算,因为这些计算非常昂贵。所以在你的实体类中,将它们的位置,旋转,缩放绝对值存储在单独的3D向量中(旋转甚至可能是四元数),并且仅在渲染期间将它们连接到矩阵。

相关内容