我有一个使用three.js的WebGL应用程序。它已经运行好几个月,直到今天,2014年9月7日。 它不再在Chrome上运行,但仍可继续在Firefox和Safari上运行。
我已将问题追溯到特定情况。 我从json文件中加载对象,如下所示:
loader.load("assets/Tables.json", callback_mesh, "assets/maps/", parent.texturesTable);
callback_mesh函数如下所示:
var callback_mesh = function (result, materials, userData) {
for (var i = 0; i < materials.length; i++) {
if (materials[i].uniforms != undefined) {
materials[i].uniforms.tDiffuse.value = userData[TEXTURE_DIFFUSE];
materials[i].uniforms.tNormal.value = userData[TEXTURE_NORMAL];
materials[i].uniforms.tSpecular.value = userData[TEXTURE_SPECULAR];
}
}
var mesh = new THREE.Mesh(result, new THREE.MeshFaceMaterial(materials));
mesh.scale.set(1, 1, 1);
mesh.receiveShadow = true;
mesh.castShadow = true;
objects.push(mesh);
}
以上代码不再在Chrome中运行。 如果我删除了行&#34; mesh.receiveShadow = true&#34;,它可以正常工作。 如果我创建一个新材质,而不是使用json文件中的材质并修改它们的参数/制服,我可以将receiveShadow设置为true并且它可以正常工作。
所以相当具体的问题是当我从json文件导入一个对象并将来自json文件的材质数组作为MeshFaceMaterial分配给网格并打开receiveShadow时,该对象不会加载,我得到以下内容错误讯息:
THREE.WebGLProgram:gl.getProgramInfoLog()(260,64-140):警告X3550:sampler数组索引必须是文字表达式,强制循环展开 (89,12):错误X6077:带有r#作为源的texld / texldb / texldp / dsx / dsy指令不能在动态条件内使用&#39;如果&#39;块,动态条件子程序调用或带break *的循环/ rep。
无法创建D3D着色器。 three.js所:25545 59WebGL:INVALID_OPERATION:getUniformLocation:程序未链接three.js:25283 21WebGL:INVALID_OPERATION:getAttribLocation:程序未链接
而且,再一次,我在今天之前从未见过这个,也许有Chrome更新。它在Firefox和Safari下工作正常,网格加载了receiveShadows,阴影被渲染。 在当前的Chrome中,仅当我关闭receiveShadows时它才有效。
任何人都有同样的问题,或者对可能导致这种情况的原因有什么想法? 谢谢。 -mat