Opengl es 顶点着色器中的变形动画

Opengl es 顶点着色器中的变形动画,opengl-es,glsl,opengl-es-2.0,morphing,Opengl Es,Glsl,Opengl Es 2.0,Morphing,要在顶点着色器中为两个变形目标之间的变形动画插值顶点位置,我将发送到着色器的两个顶点位置。现在我有一个网格,它有大约600个变形目标,我觉得尝试发送到顶点着色器600个顶点位置不是一个好主意。有人能告诉我什么是正确的方式来动画对象这么多变形目标 另外,我对3d编程非常陌生。想法很简单:只发送您实际想要使用的变形目标数据 将所有变形目标数据放在一个缓冲区中。在渲染时,对正在变形的两个位置属性中的每一个使用glvertexattributepointer。使用该函数指定特定变形目标的字节偏移量 例如

要在顶点着色器中为两个变形目标之间的变形动画插值顶点位置,我将发送到着色器的两个顶点位置。现在我有一个网格,它有大约600个变形目标,我觉得尝试发送到顶点着色器600个顶点位置不是一个好主意。有人能告诉我什么是正确的方式来动画对象这么多变形目标


另外,我对3d编程非常陌生。

想法很简单:只发送您实际想要使用的变形目标数据

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

例如,设想以下缓冲区内存布局:

|----Morph Target 0----|----Morph Target 1----|----...----|----Morph Target N----|
K                      L                      M           Z
要在目标0和1之间混合,可以调用
glvertexattributepointer(0,…(void*)K)
glvertexattributepointer(1,…(void*)L)
,其中
K和
L
是缓冲区中变形目标的偏移量

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

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

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