【问题标题】:How to pre initialize textures in THREE.JS如何在 THREE.JS 中预初始化纹理
【发布时间】:2018-04-08 18:52:30
【问题描述】:

我在开始渲染和动画对象之前预加载并创建材质纹理。
但是只有当对象将在相机中显示时,三个 JS 才会将纹理上传到 GPU。
因此,当新对象出现在屏幕上时,由于 GPU 上的纹理发送,动画会出现抖动。 问题是如何在创建纹理期间将纹理发送到 GPU 以在运行时避免它? 将图像加载到 GPU 需要很长时间。

【问题讨论】:

  • renderer.compile( scene, camera ); 对您的情况有帮助吗?

标签: javascript performance three.js textures


【解决方案1】:

我的猜测是遍历你的对象树,将每个对象的 frustumCulled 标志设置为 false,调用 renderer.render(scene, ...) 一次,然后将标志恢复为 true(或任何它们)。

function setAllCulled(obj, culled) {
  obj.frustumCulled = culled;
  obj.children.forEach(child => setAllCulled(child, culled));
}

setAllCulled(scene, false);
renderer.render(scene, camera);
setAllCulled(scene, true);

您也可以调用renderer.setTexture2D(texture, 0) 来强制初始化纹理。

【讨论】:

  • 感谢您的回复。我喜欢使用 renderer.setTexture2D(texture, 0) - frustumCulled - 看起来很奇怪。
  • setTexture2D 自 r103 起已被删除
猜你喜欢
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2019-01-03
  • 2017-04-26
相关资源
最近更新 更多