作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在开始渲染和制作对象动画之前预加载和创建 Material 纹理。
但是三个 JS 仅在对象将在相机中显示时才将纹理上传到 GPU。
因此,当新对象出现在屏幕上时,由于纹理在 GPU 上发送,动画会出现抖动。问题是如何在创建纹理期间将纹理发送到 GPU 以避免在运行时发生? 将图像加载到 GPU 需要花费大量时间。
最佳答案
我的猜测是遍历对象树,将每个对象的 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)
来强制初始化纹理。
关于javascript - 如何在 THREE.JS 中预初始化纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970420/
我是一名优秀的程序员,十分优秀!