我想要一个可以动画化的网格。我正在从文件加载网格,包括关键帧。我想将所有帧放入 VBO 中,并在 GPU 上的顶点着色器中组合其中两个帧。所以我想将帧传递给 GPU 和一些制服,以便从这两个帧创建一个结果帧
这可能吗?如果可以,我该怎么做?
最佳答案
您将拥有更多顶点属性。通常,您可能会:
in vec3 position;
in vec3 normal;
in vec4 color;
in vec2 texCoord;
对于变形目标,您需要:
in vec3 position0;
in vec3 position1;
in vec3 normal0;
in vec3 normal1;
in vec4 color;
in vec2 texCoord;
实际的模型空间位置将是position0
和position1
之间的线性插值。正常情况也是如此(我猜)。一旦获得它们,您就可以将它们传递给通常的转换。颜色和纹理坐标大概不会改变,但如果改变了,那么它们也需要有 0
和 1
版本。
实际渲染非常简单。据推测,您将在同一缓冲区中拥有变形目标的所有位置。因此,只需将 position0
的属性绑定(bind)到第一个变形目标,将 position1
的属性绑定(bind)到第二个变形目标。法线也是如此。然后你就可以正常渲染了。
关于c++ - 如何使用VBO进行变形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565007/