2017-06-22 77 views
1

我目前正在学习WebGL和ThreeJS(r86),并且我在THREE.PlaneGeometry网格对象上投射阴影时遇到了困难。下面是相关的照明代码在我的场景平面几何网格不能在threeJS中接收阴影r86

var light = new THREE.DirectionalLight(0xffffff); 
    light.position.set(0,5,5); 
    light.target.position.set(0,0,0); 
    light.shadow.camera.near = 0.1;  
    light.shadow.camera.far = 1000;  
    light.shadow.camera.left = -500; 
    light.shadow.camera.bottom = -500; 
    light.shadow.camera.right = 500; 
    light.shadow.camera.top = 500; 
    light.castShadow = true; 
    scene.add(light); 

这里片段是JSfiddle说明我的问题。我确保将场景中的所有对象的obj3D.receiveShadowobj3D.castShadow都设置为true,但THREE.PlaneGeometry网格不会呈现任何阴影效果。任何帮助将非常感激。

回答

0

首先,您需要在渲染器上添加启用shadowMap。在你的例子中,你将shadowMap属性赋值为'true',这是错误的。

renderer.shadowMap.enabled = true; 

您用作地板的飞机旋转到背面,它是双面材料。这是不是很推荐,因为着色器将它,但计算可能会丢失或越野车。

替换此

floor.rotation.x += Math.PI/2; 

有了这个项目真实面影。

floor.rotation.x -= Math.PI/2; 

用户影子mapSize两个

light.shadow.mapSize.width = 2048; 
light.shadow.mapSize.height = 2048; 

阴影贴图的相机界的一批实力是相当大的。使用更小的。

Updated example

+1

非常感谢。它按我的意图工作。我没有意识到飞机的背面与着色器有关。 –