阴影仅显示部分但不显示整个对象。 在我的情况下,我有一个树,并为它设置MeshDepthMaterial,因为树的叶子是透明的。但阴影只有树干,没有任何树叶。 我的模型是通过OBJLoader添加的,所以我不确定问题是否是由模型引起的。
这是我的代码:
loader.load("/uploads/rs/373/nqkcjvs8/bamboopalm.json", function(o) {
var mesh = o.getObjectByName("Cylinder06");
var mat = mtloader.load("/uploads/rs/373/nqkcjvs8/bamboopalm_1k.jpg");
let matalpha = mtloader.load("/uploads/rs/373/nqkcjvs8/bamboopalm_1k_alpha.jpg");
mat.anisotropy = 16;
mesh.material = new THREE.MeshPhongMaterial({
map:mat,
alphaMap: matalpha,
side: THREE.DoubleSide,
alphaTest: .5
});
var depthMaterial = new THREE.MeshDepthMaterial({
depthPacking: THREE.RGBADepthPacking,
alphaMap: matalpha,
alphaTest: .5
});
mesh.castShadow = mesh.receiveShadow = true;
mesh.position.set(0, -50, 0);
var scale = 10;
mesh.scale.set(scale, scale, scale);
mesh.customDepthMaterial = depthMaterial;
scene.add(mesh);
});
这是一个在线演示:OBJLoader Tree
如你所见,阴影只有树干,没有任何树叶。
答案 0 :(得分:1)
在渲染阴影时,three.js会剔除前脸。如果你想让你的(平面)棕榈叶投下阴影,你需要设置
renderer.shadowMap.renderSingleSided = false;
有关详细信息,请参阅this answer。
我强烈建议您更新到three.js的最新版本。我还建议你添加一个帮手,然后收紧你的影子相机视锥,以改善阴影效果。
dLight.shadowCameraHelper = new THREE.CameraHelper( dLight.shadow.camera );
scene.add( dLight.shadowCameraHelper );
three.js r.87