首页 > 解决方案 > 抑制三个.js 图像不是两个警告的力量

问题描述

我正在使用three.js 92版和纹理。

三.js 警告演示

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

有没有办法设置纹理加载器来隐藏它们?

标签: three.js

解决方案


你有几个选择。

第一个也是最简单console.warn的方法是从three.js中删除该行。您说过这不可行,因为您获得了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
});

推荐阅读