【问题标题】:When is a Three.js Texture sent to the GPU?何时将 Three.js 纹理发送到 GPU?
【发布时间】:2015-05-02 15:47:28
【问题描述】:

我正在构建一个从服务器动态加载图像以用作场景中的纹理的应用程序,并且我正在研究如何正确加载/卸载这些纹理。

我的简单问题是;在 Three.js 调用图中,纹理在哪里被加载和/或更新到 GPU 中?是在创建纹理 (var tex = new THREE.Texture()) 还是将其应用于网格 (var mesh = new THREE.Mesh(geom, mat)) 时?三的Texture class 表明创建纹理时未加载纹理。但我在Mesh 中也找不到任何东西。

我错过了什么吗?纹理是在渲染循环中加载而不是在对象创建时加载的吗?这可能是有道理的。

提前致谢!

【问题讨论】:

  • 好的。所以我想我几乎回答了这个问题。上传/删除纹理似乎是Renderer's 的责任。如果这是准确的,是否意味着除非我调用类似renderer.render(scene, camera); 之类的东西,否则我可以保证不会弄乱 GPU?

标签: javascript three.js textures gpu


【解决方案1】:

所有 GPU 指令都已抽象到 WebGLRenderer。

这意味着在 three.js 中创建的任何对象都不会与 GPU 进行任何交互,直到您调用:

renderer.render(scene, camera);

此调用将自动设置所有相关的 WebGL 缓冲区、着色器、属性、制服、纹理等。因此,在那个时间点之前,所有 three.js 网格及其材质和几何形状实际上只是很好的抽象对象,完全分离从它们呈现到屏幕的方式来看(为什么假设它们会被呈现?)。

主要原因是还有其他渲染器,例如 CanvasRenderer,它们的 API 完全不同。

【讨论】:

  • 太棒了!这正是我想确认的。谢谢!
猜你喜欢
  • 2015-12-23
  • 2013-04-18
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多