2017-02-22 24 views
2

Я хочу добавить castShadow и receiveShadow на объект. Но то, что я неправильно в следующем коде? ...Three.JS Shadow to object

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/

Я думаю, что на самом деле это должно быть полезно