如果您确实确定减速是唯一索引检查,我建议您让预处理代码将其结果作为二进制数据写入您加载的文件而不是 OBJ 文件 - 您可以复制粘贴您的将代码预处理到命令行实用程序,将生成的文件放入项目中,然后使用 NSData 获取其内容并将 VBO 设置为数据。没有代码很难说它是否可以加速——你如何执行检查?您也许可以使用字典在每次检查时获取 O(1) 查找,或者如果几何图形非常大,那么多线程可能会有所帮助。
您对骨骼动画通常如何在着色器中实现是正确的。以下是我编写的着色器中的一些代码,可能会对您有所帮助。注意它只支持16个骨骼,每个点只有3个骨骼可以影响。
据我所知,网上最好的 COLLADA 动画教程是这个(http://www.wazim.com/Collada_Tutorial_1.htm),虽然作者的英文不是最好的,而且他的代码是 C++ 和 C#。至于影响,您可能会将其设为顶点属性并将其添加到您的交错 VBO。
uniform mat4 modelViewProjectionMatrix;
attribute vec3 boneWeights;
attribute vec4 position
void main()
{
vec4 animatedPosition;
animatedPosition = ((position * boneMatrices[int(boneIndex[0])])) * boneWeights[0];
animatedPosition += ((position * boneMatrices[int(boneIndex[1])])) * boneWeights[1];
animatedPosition += ((position * boneMatrices[int(boneIndex[2])])) * boneWeights[2];
gl_Position = modelViewProjectionMatrix * animatedPosition;
}