Three.js指向光影而不是它的位置

时间:2018-05-28 23:42:15

标签: javascript three.js

请参阅this JS fiddle了解我的代码。如您所见,对象和阴影之间存在差距。这对聚光灯没问题。任何人都知道如何解决这个问题?

主要摘要:

  //MATERIAL
  var material = new THREE.MeshLambertMaterial();
  var terrainMaterial = new THREE.MeshStandardMaterial();

  //GEOMETRY
  var geometry = new THREE.BoxGeometry(100, 100, 100, 10, 10, 10);
  var terrainGeometry = new THREE.PlaneGeometry(10000, 10000, 100, 100);

  var mesh = new THREE.Mesh(geometry, material);
  mesh.position.z = -500;
  mesh.position.x = -100;
  mesh.position.y = -50;
  scene.add(mesh);

  var terrain = new THREE.Mesh(terrainGeometry, terrainMaterial);
  terrain.rotation.x = -90 * (Math.PI / 180);
  terrain.position.y = -100;
  scene.add(terrain);


  // pointlight
  var light = new THREE.PointLight(0xffffff, 2.0, 1200);
  scene.add(light);
  var pointLightHelper = new THREE.PointLightHelper(light);
  scene.add(pointLightHelper);

  light.position.y = 100;
  light.target = mesh;
  light.castShadow = true;
  light.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( 100, 1, 500, 1000 ) );
  light.shadow.bias = 0.0001;
  light.shadow.mapSize.width = 512;
  light.shadow.mapSize.height = 512;
  scene.add(light);

  mesh.castShadow = true;
  terrain.receiveShadow = true;

2 个答案:

答案 0 :(得分:1)

"影子相机"实际上是6个透视摄像机,每个摄像机都有90度的视野(fov)。因此,如果要修改阴影摄影机,则不得更改fov。

  light.shadow = new THREE.LightShadow( new THREE.PerspectiveCamera( 90, 1, 500, 1000 ) );

three.js r.92

答案 1 :(得分:0)

尝试使用较小的偏差值。尝试将光线移近或远离,看看它是如何改变的......尝试将影子光照到1024或2048 ...