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

时间:2011-04-17 02:31:02

标签: c++ opengl-es opengl-es-2.0

我想知道在3D场景中存储物体位置的最佳方法是什么。就我而言,场景实际上是游戏的等级。

每个场景都有:

  • 它是自己的投影矩阵。
  • 要呈现的模型列表

每个模型都有:

  • 顶点列表
  • 自我渲染的GLSL程序
  • 纹理
  • “模型”矩阵

我正在使用GLES 2.因此没有glPushMatrix,glPopMatrix,glTranslate等。它们不可用。相反,我有自己的函数,它们在我自己的Matrix对象上运行。

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以及旋转,缩放和翻译因子存储在某个文件中吗?

1 个答案:

答案 0 :(得分:1)

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