在顶点着色器中变形动画

时间:2016-09-28 15:27:11

标签: opengl-es glsl opengl-es-2.0 morphing

要在顶点着色器中插入顶点位置,以便在两个变形目标之间变形动画,我会向着色器发送两个顶点位置。现在我有一个大约600个变形目标的网格,我觉得尝试发送到顶点着色器600顶点位置不是一个好主意。有人可以告诉我,使用如此多的变形目标动画对象的正确方法是什么?

P.S。我对3d编程很陌生。

1 个答案:

答案 0 :(得分:0)

这个想法很简单:只发送你真正打算使用的变形目标数据。

将所有变形目标数据放在一个缓冲区中。当渲染时,在你正在变形的两个位置属性中的每一个上使用glVertexAttribPointer。使用该函数指定特定变形目标的字节偏移量。

举个例子,想象一下下面的缓冲存储器布局:

|----Morph Target 0----|----Morph Target 1----|----...----|----Morph Target N----|
K                      L                      M           Z

要在目标0和1之间进行混合,请调用glVertexAttribPointer(0, ..., (void*)K)glVertexAttribPointer(1, ..., (void*)L),其中KL是缓冲区中变形目标的偏移量。

显然,你只能在两个变形目标之间进行混合。但你可以在任何两个之间混合。

  

我感觉尝试向顶点着色器600顶点位置发送不是一个好主意。

更多的是,这是不可能的。属性的数量受实现的限制,并且该数量通常很小(在16到32之间)。