2014-06-05 78 views
1

我有一個使用ObjectLoader加載的結構的場景(對象)json文件。我想知道如何找到一個對象:var obj = scene.getObjectByName(「bas」,true);我想知道如何找到一個對象:var obj = scene.getObjectByName(「bas」,true);我想知道如何找到一個對象:var obj = scene.getObjectByName(「bas」,true); var obj = scene.getObjectByName 但我必須知道如何選擇一種材料並進行適用於所有使用此材質的物體的修改在three.js場景中選擇和修改材質

在網上找不到任何東西,有人可以幫忙嗎?

問候

回答

0

這是如何遍歷場景並在對象上設置castShadow標誌的方法。你可以在那裏添加更多的支票。

object.traverse(function (child) { 

    if (child instanceof THREE.Mesh) { 

     child.castShadow = true; 

    } 
}); 
+0

我應該在發佈您的答案的同一時間下面發佈錯誤的答案,所以直到今天我都沒有看到它。謝謝,謝謝,謝謝。但我導致我發佈了一個錯誤,我發佈[在這裏](http://stackoverflow.com/questions/24088960/three-js-traverse-a-object-with-a-scene-and-not-wanting-to-traverse現場的),你能幫忙嗎? – Lefty

0

好吧,首先,當一個場景/對象加載到three.js所它不具有相同的結構不再

THREE.Scene {id: 1, uuid: "EF1E7D35-66B9-466E-98B6-E62FC4A7AF46", name: "", parent: undefined, children: Array[1]…} 
    __lights: Array[3] 
    0: THREE.DirectionalLight 
    1: THREE.DirectionalLight 
    2: THREE.DirectionalLight 
    length: 3 
    __proto__: Array[0] 
    __objectsAdded: Array[0] 
    __objectsRemoved: Array[0] 
    __webglFlares: Array[0] 
    __webglObjects: Array[17] 
    __webglObjectsImmediate: Array[0] 
    __webglSprites: Array[0] 
    ..... 

所以如果你想修改的第一光,你可以做

scene.__lights[0].castShadow << true; 

或我猜

scene.__lights[0] << {castShadow: true} 

一旦學習就會更多。

+0

這絕對不是要走的路。在將它們添加到場景之前,如何存儲要更改的內容。 – gaitat

+0

@gaitat嗨,很高興給你解讀。我想要的其實是添加投射和接收陰影,爲對象添加一個envMap和THREE.SmoothShading,但最後我想要的是鬆開我的對象結構和空間位置。是helloracer.com/webgl/一個很好的例子嗎?我正在尋找更簡單的例子,但沒有找到它。 – Lefty

+0

或者,也許這是[/src/loaders/ObjectLoader.js](https://github.com/mrdoob/three.js/blob/master/src/loaders/ObjectLoader.js)我仍在搜索的方式。 .. – Lefty