为了在顶点着色器中插入顶点位置以在两个变形目标之间进行变形动画,我将两个顶点位置发送到着色器。现在我有一个大约有 600 个变形目标的网格,我觉得尝试发送到顶点着色器 600 个顶点位置不是一个好主意。有人可以告诉我用这么多变形目标为对象设置动画的正确方法是什么?
PS 我对 3d 编程很陌生。
为了在顶点着色器中插入顶点位置以在两个变形目标之间进行变形动画,我将两个顶点位置发送到着色器。现在我有一个大约有 600 个变形目标的网格,我觉得尝试发送到顶点着色器 600 个顶点位置不是一个好主意。有人可以告诉我用这么多变形目标为对象设置动画的正确方法是什么?
PS 我对 3d 编程很陌生。
这个想法很简单:只发送您实际打算使用的变形目标数据。
将所有变形目标数据放在一个缓冲区中。当需要渲染时,请使用glVertexAttribPointer
您正在变形的两个位置属性中的每一个。使用该函数指定特定变形目标的字节偏移量。
例如,想象以下缓冲内存布局:
|----Morph Target 0----|----Morph Target 1----|----...----|----Morph Target N----|
K L M Z
要在目标 0 和 1 之间混合,请调用glVertexAttribPointer(0, ..., (void*)K)
和glVertexAttribPointer(1, ..., (void*)L)
,其中K
和L
是缓冲区中变形目标的偏移量。
显然,您只能在两个变形目标之间进行混合。但是你可以在任何两者之间混合。
我有一种感觉,尝试将 600 个顶点位置发送到顶点着色器并不是一个好主意。
更何况这是不可能的。属性的数量受实现的限制,而且这个数量通常很小(在 16 到 32 之间)。