2015-03-02 95 views
1

我正在構建一個應用程序,動態加載服務器中的圖像以用作場景中的紋理,並且我正在研究如何正確加載/卸載這些紋理。Three.js紋理何時發送到GPU?

我的簡單問題是;在Three.js調用圖中,紋理是否會加載和/或更新到GPU中?當我創建紋理時(var tex = new THREE.Texture())還是當我將它應用到網格(var mesh = new THREE.Mesh(geom, mat))時? Three的Texture class表示紋理在創建紋理時未加載。但我在Mesh中也找不到任何東西。

我錯過了什麼嗎?紋理是否加載在渲染循環中而不是創建對象上?這可能是有道理的。

在此先感謝!

+0

好的。所以我想我幾乎回答了這個問題。它似乎是[Renderer](https://github.com/mrdoob/three.js/blob/a72347515fa34e892f7a9bfa66a34fdc0df55954/src/renderers/WebGLRenderer.js#L5717)上傳/刪除紋理的責任。 如果這是準確的,是否意味着我保證不會亂用GPU,除非我調用像'renderer.render(場景,相機)的東西;'? – 2015-03-02 10:34:55

回答

3

所有的GPU指令已被抽象到WebGLRenderer。

這意味着任何對象的three.js所內設立將與GPU絲毫直到你打電話不互動:

renderer.render(scene, camera); 

此呼叫會自動安裝所有相關的WebGL的緩衝器,着色器,屬性,制服,紋理等等。所以在這個時間點之前,所有three.js與它們的材質和幾何圖形都進行網格化,它們實際上只是很好的抽象對象,完全與它們渲染到屏幕的方式分離(爲什麼假設它們將被渲染?)。

這樣做的主要原因是有其他渲染器,例如CanvasRenderer,它們具有完全不同的API。

+0

太棒了!這正是我想確認的。謝謝! – 2015-03-02 12:20:13