我有两个模型,每个模型都存储在一个单独的 VBO 中。我想要做的是链接它们,以便旋转一个旋转另一个,同时仍然让另一个连接到第一个模型。我现在要做的是拥有三个模型矩阵:一个用于整个对象的主矩阵,一个用于每个模型,以便它们可以相对于主矩阵进行转换。但是,当我这样做时,如果我旋转它们,两个模型就会断开连接。我将如何链接这两个模型,以便它们在旋转或平移期间保持连接?
问问题
213 次
2 回答
0
通常你会这样做:
glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();
当然,如果您更改firstModelMatrix
或secondModelMatrix
,则可能会导致两个模型断开连接。但是,这就是你的意图。如果您想让他们保持联系,只需更改mainMatrix
.
但是,请注意,这些矩阵运算已被弃用。尽管如此,您应该能够从代码中获得诀窍。
编辑:假设你有一个头和一个身体。你想旋转头部。除了关于如何计算你的头部矩阵之外,应用平移和旋转的顺序尤为重要。我想,现在你有这样的东西:
HeadMatrix = Rotation * Translation
但是你需要的是这样才能使头部保持在身体的顶部:
HeadMatrix = Translation * Rotation
于 2013-01-25T16:10:59.627 回答
0
您没有两个模型。您所拥有的只是两个字节缓冲区,只有在与访问缓冲区中的数据并将其解释为三角形的 glDrawArrays 或 glDrawElements 调用结合使用时,它们才成为几何图形。
OpenGL 不知道什么是“模型”。OpenGL 不维护模型之间的场景或关系。它只是一次将点、线或三角形绘制到帧缓冲区,而没有任何回忆以前绘制过哪些其他点、线或三角形。
如果你想要一个场景,你必须自己维护它。
于 2013-01-26T01:23:35.243 回答