我制作了一个c ++ collada读卡器,但我使用opengl直接模式在4ms内绘制了一个3K动画网格。那太慢了。
所以我决定使用顶点着色器。在骨架中,每个顶点对每个骨骼都有一个权重(零或更多)。 对于具有40个骨骼的3K网格,整个对象有120000个权重。
唯一的问题是在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)不 加入属性数组。
答案 0 :(得分:1)
正如keltar和Andon M. Coleman所提到的,你应该使用vec4属性。 在某些情况下,一些顶点有超过4个控制它们的骨骼。你可以做的只是考虑具有最大权重的骨骼。