我制作了一个 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)不接受属性数组。