禁止Three.js图像不是二次警告的力量

时间:2018-06-29 14:00:40

标签: three.js

我正在使用带有纹理的Three.js 92版本。

three.js warn demo

由于three.js,我已经自动将图像的尺寸转换为2的幂,但是我想抑制它在控制台中显示的警告,而不会从其他模块或功能中删除所有其他警告。 我会为用户隐藏three.js,但我想从其他库中使用其余的。

是否可以设置纹理加载器以隐藏它们?

1 个答案:

答案 0 :(得分:2)

您有一些选择。

第一个也是最简单的是从three.js中删除console.warn行。您已经说过,由于如何获取Three.js,这是不可行的,但是还有其他方法。

下一步是覆盖发生警告的代码。此警告(可能在多个地方发生)发生在WebGLRenderer对象中。

  1. 下载THREE.js源。
  2. 在编辑器中的threejs/build/three.js中打开。
  3. 找到WebGLRenderer
  4. 将整个功能复制到您控制的JavaScript文件中。
  5. 编辑该新文件以删除那些控制台警告。
  6. 引用项目中的新文件。
  7. 在与THREE命名空间进行交互的代码中,但是在创建WebGLRenderer对象之前,像这样替换THREE.WebGLRenderer

THREE.WebGLRenderer = WebGLRenderer;

左侧对WebGLRenderer的引用是指向已加载的THREE名称空间。右侧对WebGLRenderer的引用是新文件中的引用(已删除警告)。

最后,您可以完全禁用警告。该警告应该仅在纹理可用时的第一次renderer.render调用期间出现。我个人不建议您这样做,除非您在关闭警告到纹理完成加载之间的这段时间里失去了所有控制台警告。那会是这样的:

var originalWarning = console.warn; // back up the original method
console.warn = function(){}; // now warnings do nothing!

var tex = texLoader.load("texture.png", functon(){
  renderer.render(scene, camera); // sends the texture to the GPU
  console.warn = originalWarning; // turns warnings back on
});

var mat = new THREE.SomeMaterial({
  map: tex
});