0

我有两个模型,每个模型都存储在一个单独的 VBO 中。我想要做的是链接它们,以便旋转一个旋转另一个,同时仍然让另一个连接到第一个模型。我现在要做的是拥有三个模型矩阵:一个用于整个对象的主矩阵,一个用于每个模型,以便它们可以相对于主矩阵进行转换。但是,当我这样做时,如果我旋转它们,两个模型就会断开连接。我将如何链接这两个模型,以便它们在旋转或平移期间保持连接?

4

2 回答 2

0

通常你会这样做:

glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();

当然,如果您更改firstModelMatrixsecondModelMatrix,则可能会导致两个模型断开连接。但是,这就是你的意图。如果您想让他们保持联系,只需更改mainMatrix.

但是,请注意,这些矩阵运算已被弃用。尽管如此,您应该能够从代码中获得诀窍。

编辑:假设你有一个头和一个身体。你想旋转头部。除了关于如何计算你的头部矩阵之外,应用平移和旋转的顺序尤为重要。我想,现在你有这样的东西:

HeadMatrix = Rotation * Translation

但是你需要的是这样才能使头部保持在身体的顶部:

HeadMatrix = Translation * Rotation
于 2013-01-25T16:10:59.627 回答
0

您没有两个模型。您所拥有的只是两个字节缓冲区,只有在与访问缓冲区中的数据并将其解释为三角形的 glDrawArrays 或 glDrawElements 调用结合使用时,它们才成为几何图形。

OpenGL 不知道什么是“模型”。OpenGL 不维护模型之间的场景或关系。它只是一次将点、线或三角形绘制到帧缓冲区,而没有任何回忆以前绘制过哪些其他点、线或三角形。

如果你想要一个场景,你必须自己维护它。

于 2013-01-26T01:23:35.243 回答