ТРИ. JS Тень на противоположной стороне света

Я использовал THREE.js r49 для создания геометрии 2 кубов с направленным источником света, чтобы отбрасывать на них тень, и получил результат, как на следующем рисунке.

Я заметил, что тень в зеленом круге не должна появляться, так как направленный свет находится позади обоих кубов. Я предполагаю, что это материальная проблема, я пытался изменить различные параметры материала, а также изменить сам тип материала, но результат все тот же. Я также протестировал один и тот же код с r50 и r51 и получил тот же результат.

Может ли кто-нибудь дать мне подсказку, как избавиться от этой тени?

Оба куба создаем используяCubeGeometry а такжеMeshLambertMaterial как следующий код.

Result Image

Код:

// ambient
var light = new THREE.AmbientLight( 0xcccccc );
scene.add( light );

// the large cube
var p_geometry = new THREE.CubeGeometry(10, 10, 10);
var p_material  = new THREE.MeshLambertMaterial({ambient: 0x808080, color: 0xcccccc});
var p_mesh  = new THREE.Mesh( p_geometry, p_material );
p_mesh.position.set(0, -5, 0);
p_mesh.castShadow = true;
p_mesh.receiveShadow = true;
scene.add(p_mesh);

// the small cube
var geometry = new THREE.CubeGeometry( 2, 2, 2 );
var material = new THREE.MeshLambertMaterial({ambient: 0x808080, color: Math.random() * 0xffffff});
var mesh = new THREE.Mesh( geometry, material );
mesh.position.set(0, 6, 3);
mesh.castShadow = true;
mesh.receiveShadow = true;

// add small cube as the child of large cube
p_mesh.add(mesh);
p_mesh.quaternion.setFromAxisAngle(new THREE.Vector3(0, 1, 0), 0.25 * Math.PI );

// the light source
var light  = new THREE.DirectionalLight( 0xffffff );
light.castShadow = true;
light.position.set(0, 10, -8);  // set it light source to top-behind the cubes
light.target = p_mesh           // target the light to the large cube
light.shadowCameraNear = 5;
light.shadowCameraFar = 25;
light.shadowCameraRight   =  10;
light.shadowCameraLeft    = -10;
light.shadowCameraTop     =  10;
light.shadowCameraBottom  = -10;
light.shadowCameraVisible = true;
scene.add( light );

Ответы на вопрос(1)

Ваш ответ на вопрос