Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在opengl中连接两个模型_C++_Opengl - Fatal编程技术网

C++ 在opengl中连接两个模型

C++ 在opengl中连接两个模型,c++,opengl,C++,Opengl,我有两个模型,每个模型存储在单独的VBO中。我要做的是将它们链接起来,以便旋转其中一个旋转另一个,同时保持另一个连接到第一个模型。我现在要做的是有三个模型矩阵:一个主要矩阵用于整个对象,另一个用于每个模型,以便它们可以相对于主矩阵进行转换。但是,当我这样做时,如果我旋转这两个模型,它们就会断开连接。如何链接这两个模型,以便它们在旋转或平移期间保持连接?通常您会这样做: glLoadMatrix( mainMatrix ); glPushMatrix(); glMultMatrix( firstM

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

通常您会这样做:

glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();
HeadMatrix = Rotation * Translation
当然,如果更改
firstModelMatrix
secondModelMatrix
,这两个模型可能会呈现为断开连接。但是,这就是你的意图。如果要保持它们的连接,只需更改
main矩阵

但是,请注意,这些矩阵操作已被弃用。然而,您应该能够从代码中获得技巧

编辑:假设你有头和身体。你想旋转头部。与计算头部矩阵的方式相比,应用平移和旋转的顺序尤为重要。我想,现在你有这样的事情:

glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();
HeadMatrix = Rotation * Translation
但你需要的是,为了保持头部在身体上方:

HeadMatrix = Translation * Rotation

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

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


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

这是我的基本工作。但是,我使用着色器执行此操作。我有一个头部模型和一个身体模型。我将头部模型转换为高于身体模型。但是,如果我旋转这个,那么头部模型将不会保持与身体模型的连接,至少不会保持在身体模型上的原始位置。谢谢!这并不完全是我想要的,但它帮助我实现了目标。我试图旋转整个模型,同时保持头部连接。那没用。通过乘以headmatrix,然后乘以mainmatrix,我就可以修复它了。在我乘以主矩阵和头矩阵之前,不用客气。你必须知道矩阵乘法是不可交换的。这使得应用它们的顺序变得很重要。