加载three.js纹理时,如何消除无效的_值警告?

加载three.js纹理时,如何消除无效的_值警告?,three.js,webgl,Three.js,Webgl,使用三个.Js r66和类似的设置: var texture = THREE.ImageUtils.loadTexture('/data/radar.png'); texture.wrapS = THREE.RepeatWrapping; var radar = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial({ map: texture, transparent: true, }));

使用三个.Js r66和类似的设置:

var texture = THREE.ImageUtils.loadTexture('/data/radar.png');
texture.wrapS = THREE.RepeatWrapping;
 var radar = new THREE.Mesh(
    sphere,
    new THREE.MeshBasicMaterial({
      map: texture,
      transparent: true,
    }));
我在控制台上收到以下警告:

WebGL: INVALID_VALUE: texImage2D: invalid image dev_three.js:26190
[.WebGLRenderingContext]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete' 
我很确定这是因为对象是在加载纹理之前渲染的,因此WebGL试图访问:three.js line 26190中的空纹理

_gl.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, texture.image );
上面引用的代码有效-一旦加载纹理,它就会显示得很好。不过,我想摆脱这些警告——有什么想法吗?其他材质(例如phong)似乎可以更好地处理异步纹理加载。它们显示为黑色,直到纹理到达。值得注意的是,它们不会向控制台发送警告


此演示()显示了相同的问题。

等待纹理加载

var safeToRender = true;
var texture = THREE.ImageUtils.loadTexture('/data/radar.png', 
                                           undefined, 
                                           textureHasLoaded);

function textureHasLoaded() {
  safeToRender = true;
}
然后在
safeToRender
为真之前不要开始渲染。
当然,如果要加载多个图像,则需要使用计数或其他内容,而不是标志。

我更喜欢异步加载-显示进度条的时间更短。当前解决方案将使用纯色对象渲染场景,直到最终显示纹理。在我继续之前,我确实有一些必须存在的东西的加载程序(模型…),但我希望尽可能地延迟加载。(1) 使用不同的纹理直到图像加载完毕,或者(2)更改
THREE.ImageUtils.loadTexture
,以创建1x1像素纹理开始。看见