为了在两个变形目标之间的变形动画中插入顶点位置,我向着色器发送了两个顶点位置。现在我有一个网格,它有大约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)
,其中K
和L
是缓冲区中变形目标的偏移量。
显然,你只能在两个变形目标之间混合。但你可以将两者融合在一起。
我有一种感觉,这不是一个好主意,试图发送到顶点着色器600顶点位置。
更重要的是它不可能。属性的数量受到实现的限制,并且这个数量通常很小(在16到32之间)。