我正在构建一个应用程序,它动态地从服务器加载图像以用作场景中的纹理,我正在研究如何正确加载/卸载这些纹理。
我的简单问题是;在Three.js调用图中,纹理是否被加载和/或更新到GPU中?是在创建纹理(var tex = new THREE.Texture()
)还是将其应用于网格(var mesh = new THREE.Mesh(geom, mat)
)时?三的Texture class表示在创建纹理时不加载纹理。但我在Mesh中找不到任何内容。
我错过了什么吗?纹理是否在渲染循环中加载而不是在对象创建中加载?这可能是有道理的。
提前致谢!
答案 0 :(得分:4)
所有GPU指令都已抽象为WebGLRenderer。
这意味着在你打电话之前,在three.js中创建任何对象都不会与GPU交互:
renderer.render(scene, camera);
此调用将自动设置所有相关的WebGL缓冲区,着色器,属性,制服,纹理等。因此,直到那个时间点,所有three.js与其材质和几何形状的网格实际上只是很好的抽象对象,完全分离从它们渲染到屏幕的方式(为什么假设它们将被渲染?)。
主要原因是还有其他渲染器,例如CanvasRenderer,它们具有完全不同的API。