【问题标题】:suppress three.js image is not power of two warning抑制三个.js 图像不是两个警告的力量
【发布时间】:2018-12-08 18:04:43
【问题描述】:

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

three.js warn demo

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

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

【问题讨论】:

  • @Mugen87 我认为他们可以调整大小,他们只是想压制消息。
  • 最简单的方法是从three.js中编辑消息。在代码中搜索字符串,应该很容易找到。
  • @TheJim01 我正在使用 npm 安装 three.js,所以我不想更改 node_modules 中的代码,否则我也需要在同事的计算机上执行此操作,并且当我需要时upadte three.js 我必须一次又一次地这样做。

标签: three.js


【解决方案1】:

你有几个选择。

第一个也是最简单的是从 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
});

【讨论】:

  • 感谢您的详细回答,这可能是一个解决方案,唯一的想法是我需要更改threel.js的源代码,我不喜欢这样做。跨度>
猜你喜欢
  • 2015-10-05
  • 2011-12-28
  • 1970-01-01
  • 2013-05-08
  • 2017-06-10
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
相关资源
最近更新 更多