Javascript Three.js地图材质显示警告,尽管更新了缓冲区
我试图加载一个OBL对象,并在预先指定的容器(平面)上显示纹理。但是,在加载对象后,我开始出现以下错误:Javascript Three.js地图材质显示警告,尽管更新了缓冲区,javascript,three.js,textures,webgl,Javascript,Three.js,Textures,Webgl,我试图加载一个OBL对象,并在预先指定的容器(平面)上显示纹理。但是,在加载对象后,我开始出现以下错误: THREE.WebGLRenderer 58 XHR finished loading: "http://localhost:8000/original-material/room2/soba-5-2.obj". about to traverse... about to add to scene WebGLRenderingContext: GL ERROR :GL_INVALI
THREE.WebGLRenderer 58
XHR finished loading: "http://localhost:8000/original-material/room2/soba-5-2.obj".
about to traverse...
about to add to scene
WebGLRenderingContext: GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 0
WebGL: too many errors, no more errors will be reported to the console for this context.
接下来,我明确地开始设置以下标志,尽管在向场景添加任何内容之前(甚至在之前)修改了材质属性
child.material.needsUpdate = true;
child.geometry.buffersNeedUpdate = true;
child.geometry.uvsNeedUpdate = true;
尽管如此,这个问题仍然存在。有什么想法吗
代码
纹理加载是异步的。Try
child.material.map=THREE.ImageUtils.loadTexture(image,null,函数(child){child.geometry.buffersNeedUpdate;child.geometry.uvsNeedUpdate;})代码>加载器设置物料.needsUpdate
标志。@WestLangley我认为异步加载可能是个问题,但它没有任何好处。。。即使在异步调用中显式设置child.material.map
,也无助于child.material.map=THREE.ImageUtils.loadTexture(container_data.image,null,function(texture){child.material.map=texture;child.geometry.buffersNeedUpdate=true;child.geometry.uvsNeedUpdate=true;})代码>尝试从虚拟白色纹理开始,这样几何体将具有必要的UV缓冲区。如果这不起作用,那么提供一个简单的实例——而不是整个项目。另外,我建议您更新到r.60。@WestLangley我尝试将其上载到JSFIDLE,但由于加载OBJ文件而出现问题。无论如何我使用了上一个示例中的另一个.obj文件,更新为r60,并更新了示例以反映webgl\u loader\u obj
示例中r60的更改。这次我没有收到前面提到的警告,但仍然收到性能警告:有些纹理无法渲染。
。也尝试了objmtloader
,但运气不佳。哦,为了更容易编辑
var container_re_match = /container_/
console.log('about to traverse...');
data.traverse(function(child){
if (child instanceof THREE.Mesh) {
child.material = new THREE.MeshPhongMaterial({
ambient: 0xff0000, color: 0xffffff, specular: 0xffffff, shininess: 30, shading: THREE.SmoothShading});
if (child.parent.name.match(container_re_match)) {
var container_data = CONTAINER_DATA[child.parent.name]
child.material.map = THREE.ImageUtils.loadTexture(container_data.image);
child.material.needsUpdate = true;
child.geometry.buffersNeedUpdate = true;
child.geometry.uvsNeedUpdate = true;
}
}
});
console.log('about to add to scene');
scene.add(data) // Adding only after everything has been processed
}