2012-12-21 58 views
3

首先,感谢您为这个奇妙的工作,我有与three.js工作很多乐趣。WebGLRenderingContext错误加载纹理贴图

我试图找到有关复发性问题,.WebGLRenderingContext答案:GL错误:GL_INVALID_OPERATION:glDrawElements:试图访问超出范围的顶点的属性2

我做的WebGL中的一个网站,我花了几周了解所有关于three.js,但我无法解决这个问题。 每次我尝试将画布加载到地图,凹凸贴图和specmap中时,我都会在Chrome和Firefox上收到此消息(最新版本)。 我的所有网格都是从obj文件加载的,我重写了OBJMTLLoader.js以便能够从obj文件等加载更多参数。这里用于加载图像的代码为 。

THREE.MTLLoader.loadTexture =函数(URL,映射,的onLoad,的onError){

var isCompressed = url.toLowerCase().endsWith(".dds"); 
var texture = null; 

if (isCompressed) { 

    texture = THREE.ImageUtils.loadCompressedTexture(url, mapping, onLoad, onError); 

} else { 

    var image = new Image(); 

    texture = new THREE.Texture(image, mapping); 

     var loader = new THREE.ImageLoader(); 

     loader.addEventListener('load', function (event) { 

      texture.image = THREE.MTLLoader.ensurePowerOfTwo_(event.content); 
      texture.needsUpdate = true; 
      if (onLoad) 
       onLoad(texture); 

     }); 

     loader.addEventListener('error', function (event) { 

      if (onError) onError(event.message); 

     }); 

     loader.crossOrigin = this.crossOrigin; 
     loader.load(url, image); 

} 

return texture; 

}; 我很确定它是从这个,因为当我禁用此功能,没有更多的警告。

这是因为在加载数据时网格物体具有空图像的纹理? 图像的尺寸是否有限制?

现在一切工作都是罚款,但我觉得奇怪的是在控制台中有这些消息。

谢谢

+0

也许如果你能提供更多的代码(的jsfiddle?)我们可以模拟这个警告,看到的是怎么回事......? –

回答

1

此错误成为因为Three.js缓冲区已过时。当你添加一些纹理(地图,bumpMap ...)到网格,必须重新构图缓冲区这样的:

ob is THREE.Mesh, mt is a Material, tex is a texture. 

tex.needsUpdate = true; 
mt.map = tex; 
ob.material = mt; 
ob.geometry.buffersNeedUpdate = true; 
ob.geometry.uvsNeedUpdate = true; 
mt.needsUpdate = true; 

这是所有乡亲!

希望它的帮助。

问候。

Sayris