顶点着色器中的变形动画



为了在两个变形目标之间的变形动画中插入顶点位置,我向着色器发送了两个顶点位置。现在我有一个网格,它有大约600个变形目标,我有一种感觉,这不是一个好主意,试图发送到顶点着色器600个顶点位置。有人能告诉我什么是正确的方式来动画对象与如此多的变形目标?

注:我对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),其中KL是缓冲区中变形目标的偏移量。

显然,你只能在两个变形目标之间混合。但你可以将两者融合在一起。

我有一种感觉,这不是一个好主意,试图发送到顶点着色器600顶点位置。

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

相关内容

  • 没有找到相关文章

最新更新