Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js地图材质显示警告,尽管更新了缓冲区_Javascript_Three.js_Textures_Webgl - Fatal编程技术网

Javascript Three.js地图材质显示警告,尽管更新了缓冲区

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

我试图加载一个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_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
}