Тень на полу не работает в three.js v104, но работает в r71 - PullRequest
1 голос
/ 01 мая 2019

Если вы посмотрите здесь, что сделано с r71, тени будут работать:

var shadowlight = new THREE.DirectionalLight( 0xffffff, 1.8 );
shadowlight.position.set( 0, 100, 0 );
shadowlight.castShadow = true;
shadowlight.shadowDarkness = 0.1;
this.scene.add(shadowlight);

this.renderer.setClearColor( 0xf1c140, 1 );
this.renderer.shadowMapEnabled = true;
this.renderer.shadowMapType = THREE.PCFSoftShadowMap;

https://codepen.io/nicolasdnl/pen/VYRXWr

Однако, если я изменю версию на 104 и внесу необходимые изменения, которые он предлагает:

.shadowMapEnabled is now .shadowMap.enabled.

.shadowMapType is now .shadowMap.type.

THREE.Light: .shadowDarkness has been removed.

Тень больше не работает: https://codepen.io/bertug48/pen/YMowKx

Как включить тени как r71 на v104?

1 Ответ

1 голос
/ 01 мая 2019

MeshBasicMaterial не может получать тени более трех лет.Вы должны использовать освещенный материал для своей земли или добавить дополнительную сетку земли с экземпляром THREE.ShadowMaterial .

Демо: https://jsfiddle.net/38weog40/

var planeGeometry = new THREE.PlaneGeometry( 200, 200 );
planeGeometry.rotateX( - Math.PI / 2 );

var planeMaterial = new THREE.ShadowMaterial();
planeMaterial.opacity = 0.2;

var plane = new THREE.Mesh( planeGeometry, planeMaterial );
plane.position.y = -200;
plane.receiveShadow = true;
scene.add( plane );

Кстати: вот причина, по которой MeshBasicMaterial больше не получает тени: https://github.com/mrdoob/three.js/issues/8116#issuecomment-183540170

three.js R104

...