WebGLRenderingContext错误加载纹理贴图

时间:2012-12-21 10:44:43

标签: three.js

首先,感谢您的精彩工作,我在使用three.js时有很多乐趣。

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

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

THREE.MTLLoader.loadTexture = function(url,mapping,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;

}; 我很确定它来自于此,因为当我禁用此功能时,不再发出警告。

是否因为网格在加载数据时具有带空图像的纹理? 对图像的尺寸有任何限制吗?

现在一切都有罚款,但我觉得在控制台里有这些消息很奇怪。

由于

1 个答案:

答案 0 :(得分:1)

此错误的原因是Three.js缓冲区已过时。当你向网格添加一些纹理(map,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