如何使用 VBO 进行变形?

Posted

技术标签:

【中文标题】如何使用 VBO 进行变形?【英文标题】:how to use VBO for morphing? 【发布时间】:2011-09-27 06:22:30 【问题描述】:

我想要一个可以动画的网格。我正在从文件中加载网格,包括关键帧。我想将所有帧放入 VBO 并在 GPU 上的顶点着色器中组合其中的两个。所以我想将帧传递给 GPU 和一些允许从这两个创建一个结果帧的统一帧

有可能吗?如果是这样,我该怎么做?

【问题讨论】:

【参考方案1】:

你只会有更多的顶点属性。通常,您可能有:

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;

实际的模型空间位置将是position0position1 之间的线性插值。正常情况也是如此(我猜)。一旦你得到它们,你就可以通过通常的转换来传递它们。颜色和纹理坐标大概不会改变,但如果改变了,那么它们也需要有01 版本。

实际的渲染非常简单。大概,您将在同一个缓冲区中拥有变形目标的所有位置。因此,只需将position0 的属性绑定到第一个变形目标,将position1 的属性绑定到第二个变形目标。法线也一样。然后你照常渲染。

【讨论】:

以上是关于如何使用 VBO 进行变形?的主要内容,如果未能解决你的问题,请参考以下文章

两个不同的对象 OpenGL。 VAO VBO IBO 网格变形问题

如何在 OpenGL ES 2 中创建和使用 VBO

使用 VBO 使用 LWJGL 对 3D 立方体进行纹理处理

如何使用 VBO 和单个 OpenGL drawelements 调用绘制多个对象?

使用 VBO 进行截锥剔除

如何在 ES2.0 中使用 VBO 画圆