2016-11-06 73 views
1

我使用AssimpJSONLoader在Three.js中加載了一個對象。 cube_cone對象是一個簡單的3D模型,它包含一個頂部有圓錐體的立方體。如何使用JSONLoader更改three.js加載對象的顏色

var loader1 = new THREE.AssimpJSONLoader(); 
loader1.load('models/assimp/cube_cone.json', function (object) { 
     object.scale.multiplyScalar(1); 
     object.material.color.setHex(0x666666); 
     scene.add(object); 

}, onProgress, onError); 

首先我想改變物體的顏色。我該怎麼做?我嘗試過:「object.material.color.setHex(...);」。

其次,我只想操縱子對象的顏色,例如只是錐體。 test_cone.json對象具有帶「name」的「children」:「3DSMesh_0」和「name」:「3DSMesh_1」。我如何訪問它們來操作對象的一部分而不是整個對象?

如果你能幫助我,我會非常感激,因爲我是一個Javascript初學者。

+0

嘗試'VAR第一部分= object.getObjectByName( '3DSmesh_1');','然後part1.material.color.setHex (...);' – prisoner849

+0

謝謝,用getObjectByName()我實現了操作子節點。但是用part1.material.color.setHex(0x666666);例如對象的顏色不會改變。 – ikasu

+0

那裏有什麼類型的材料?像'console.log(part1.material);'。 – prisoner849

回答

1

更好地爲您的最後評論做一個答案。

var myObj = new THREE.Group(); //global variable 
... 
var loader1 = new THREE.AssimpJSONLoader(); 
loader1.load('models/assimp/cube_cone.json', function (object) {//onLoad callback 
    myObj = object; //assign object to the global variable inside the callback 
}, onProgress, onError); 
... 
function animate(){ 
    ... 
    myObj.rotation.y += 0.1;// using the global variable in your animation function 
    ... 
} 

,你也可以指定一個object的孩子,例如

myObj = object.getObjectByName("3DSMesh_1", true); 
+0

非常感謝,它的工作。 – ikasu

+0

你可以標記爲接受然後) – prisoner849

+0

如果我想讓子對象'cube = object.getObjectByName(「3DSMesh_1」,true);'發光像燈一樣,你知道嗎我怎麼能做到這一點?我已經有權訪問孩子並創建一個DirectionalLight。但是,我怎樣才能將燈光設置到立方體上,以使整個立方體發光?我是否必須測試立方體的座標,還是可以將光線添加到立方體?其次,你認爲DirectionalLight還是PointLight更好? (這只是我的項目中的一個例子,我希望汽車的前燈/後燈能夠發光) – ikasu