2017-02-22 179 views
2

我想在對象上添加castShadowreceiveShadow。但我下面的代碼有什麼問題?...Three.JS對象陰影

var mtlLoader = new THREE.MTLLoader(); 
mtlLoader.setPath("objects/Tree/"); 
mtlLoader.load("tree.mtl", function(materials) { 
    materials.preload(); 
    var objLoader = new THREE.OBJLoader(); 
    objLoader.setMaterials(materials); 
    objLoader.setPath("objects/Tree/"); 
    objLoader.load("tree.obj", function(gate) { 

     var positionX = 0; 
     var positionY = 4; 
     var positionZ = 0; 

     gate.position.x = positionX; 
     gate.position.y = positionY; 
     gate.position.z = positionZ; 
     gate.scale.x = 2 
     gate.scale.y = 2; 
     gate.scale.z = 2; 
     scene.add(gate); 

     gate.castShadow = true; 
     gate.receiveShadow = true; 
    }); 
}); 
+1

投下陰影,您需要設置你的燈正常,並設置castShadows上他們。您還需要在渲染器上啓用shadowMap,並設置所需的shadowMap類型。如果沒有完整的代碼,我們無法檢查您是否在此發生任何錯誤。也許你可以設置一個小提琴? –

+0

我有。當我沒有使用MTLoader和OBJLoader的時候,它可以正常工作..抱歉,在我的文章中沒有這麼說。它必須是裝載機的東西 –

回答

1

我想你需要遍歷孩子,然後設置castShadow,如下所示。

gate.traverse(function (child) { 
    if (child instanceof THREE.Mesh) { 
     child.castShadow = true; 
    } 
}); 

這裏是工作樣例http://jsfiddle.net/4Txgp/703/

我覺得真的應該是有幫助的