如何在 THREE.JS 中预初始化纹理

And*_*nko 5 javascript performance textures three.js

我在开始渲染对象并为其设置动画之前预加载并创建材质纹理。
但是,只有当物体显示在相机中时,三个 JS 才会将纹理上传到 GPU。
因此,当新对象出现在屏幕上时,由于 GPU 上的纹理发送,动画会出现抖动。问题是如何在创建纹理期间将纹理发送到 GPU,以避免在运行时发生这种情况? 在此输入图像描述 将图像加载到 GPU 需要花费大量时间。

gma*_*man 4

我的猜测是遍历你的对象树,将每个对象的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);
Run Code Online (Sandbox Code Playgroud)

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