簡體   English   中英

Three.js導入的JSON模型未接收/投射陰影

[英]Three.js imported JSON model not receiving/casting shadows

我一直在嘗試在Three.js中使用Blender導出的模型,現在可以導入模型了,看看光線如何影響對象本身。 我可以看到我用來突出顯示它所面對的東西的directionalLight,但是我根本無法投射陰影。

這是我在做什么:

renderer.shadowMapEnabled = true;
renderer.shadowMapType = THREE.PCFSoftShadowMap;
(...)
var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(30,10,-10);
directionalLight.castShadow = true;
directionalLight.shadowDarkness = 0.5;
directionalLight.shadowCameraVisible = true;
directionalLight.shadowBias = 0.1;
directionalLight.shadowMapWidth = 1024;
directionalLight.shadowMapHeight = 1024;
directionalLight.shadowCameraRight = 10;
directionalLight.shadowCameraLeft = -10;
directionalLight.shadowCameraTop = 10;
directionalLight.shadowCameraBottom = -10;
directionalLight.shadowCameraFar = 10;
directionalLight.shadowCameraNear = 10;
scene.add(directionalLight);


var loader = new THREE.ObjectLoader();
loader.load( "island.json", function ( geometry ) {
    islandMesh = geometry;
    for(k in islandMesh.children-1){
        islandMesh.children[k].castShadow = true;
        islandMesh.children[k].receiveShadow = true;
    }
    islandMesh.castShadow = true;
    islandMesh.receiveShadow = true;
    scene.add( islandMesh );
    render();
} );

但是即使我相信可以完成陰影投射的整個設置,也無法投射任何陰影。 這是屏幕截圖:

截圖

即使光線從島嶼的右邊射來,山脈也沒有投射出我所期望的陰影。

我真的很感激您花在任何時間上的時間!

伙計們,在此先謝謝大家!

僅當您知道json文件中的數據具有一個父級的結構,而其余所有都是該父級的子級時,您所做的工作才會起作用。 (仍然為什么在for循環中執行-1 ?)

您應該做的(在所有情況下都有效)遍歷生成的幾何樹:

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

編輯

對於您使用的定向光,您可能必須調整

light.shadowCameraNear, light.shadowCameraFar, light.shadowCameraLeft,
light.shadowCameraRight, light.shadowCameraTop, light.shadowCameraBottom

CameraNear的默認值可能是OK,但您可以將其恢復為1,然后將CameraFar設置為CameraFar,具體取決於攝像機離場景遠端的距離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM