-1

我制作了一个 c++ collada 阅读器,但我使用 opengl 直接模式在 4 毫秒内绘制了一个 3K 动画网格。那太慢了。

所以我决定使用顶点着色器。在骨架中,每个顶点对每个骨骼都有一个权重(零或更多)。对于具有 40 个骨骼的 3K 网格,整个对象有 120 000 个权重。

唯一的问题是在 GLSL 中你不能声明大尺寸的统一数组。

例如,这将编译(顶点着色器):

////////////////////////////////////

uniform float weights [10] ;

void main (void)

{
 float test= weights[0];

  gl_Position = ftransform();

}

/// 但不是这个:

uniform float weights [120000] ;

void main (void)

{
  float test= weights[0];

  gl_Position = ftransform();

}

///////////////////////////////////

我在一些页面中看到我可以使用 glVertexAttribPointer() 来设置每个顶点的属性。如果我有 1 到 4 个骨骼(我可以使用 vecX 属性),这将完成,但 GLSL(在我的情况下为 1.20)不接受属性数组。

4

1 回答 1

1

正如 keltar 和 Andon M. Coleman 提到的,您应该使用 vec4 属性。在某些情况下,某些顶点有超过 4 个骨骼来控制它们。你可以做的只是考虑重量最大的骨头。

于 2014-06-30T18:49:12.790 回答