【发布时间】:2017-08-28 15:53:41
【问题描述】:
我有以下从 JSON 文件加载网格的函数:
loadJSONModel(filename, modelName) {
let loader = new THREE.JSONLoader();
loader.load(`assets/${filename}`, (geometry, materials) => {
let material = Shader.createShaderMaterial(Shader.LINEAR_BLEND_SKINNING_VERT, Shader.BASIC_FRAG);
let mesh = new THREE.SkinnedMesh(geometry, material);
mesh.material.skinning = true;
mesh.rotation.x = 0.5 * Math.PI;
mesh.rotation.z = 0.7 * Math.PI;
this.scene.add(mesh);
});
Shader.createShaderMaterial 函数执行以下操作:
static createShaderMaterial(vertex, fragment, uniforms) {
if (uniforms === undefined) uniforms = {};
return new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: vertex,
fragmentShader: fragment,
});
}
现在我不断收到这个卑鄙的错误:
THREE.WebGLProgram: shader error: 0 gl.VALIDATE_STATUS false gl.getProgramInfoLog invalid shaders ERROR: too many uniforms
如果我不做mesh.material.skinning = true,它就会消失,但当然,我需要在着色器中设置蒙皮标志,所以我需要在那里。
我的问题似乎与我迄今为止通过 Google 找到的其他问题不同。我没有从另一个网格重用我的几何图形。我也在构建一个 SkinnedMesh,而不是任何旧网格。我的设置可以支持 1024 个制服。我很困惑。任何帮助将不胜感激。
【问题讨论】: