我制作了一个带有three.js的场景,其中我使用了PointLight。
var distance = 10000;
var intensity = 10;
var decay = 0;
var hex = 0xFFFFFF;
var light1 = new THREE.PointLight(hex, intensity, distance, decay);
我想使用阴影,所以我添加了
light1.shadow.camera.near = 200;
light1.shadow.camera.far = 10000;
light1.shadow.camera.fov = 90;
light1.shadow.bias = -0.00022;
light1.shadow.mapSize.width = 1024;
light1.shadow.mapSize.height = 1024;
直到这里一切都很完美。但是,只要我列入下一行:
light1.castShadow = true;
然后距离明显从10000
变为1000
如果我拨打从light1
到控制台的距离,它仍然是10000
。
即使它与画布中的不一样。
(我已将其更改为~50位数字,但距离没有变化)
有关如何解决此问题的任何建议?
答案 0 :(得分:0)
您可以尝试通过THREE.Texture()
创建阴影,这样阴影将是一个独立的元素,不应该影响PointLight
的位置。
var shadowTexture = new THREE.Texture(canvas);
shadowTexture.needsUpdate = true;
var shadowMaterial = new THREE.MeshBasicMaterial({map: shadowTexture, opacity: 0.5});
var shadowGeo = new THREE.PlaneBufferGeometry(100, 100, 100, 1);
// Locate the position of the shadows
mesh = new THREE.Mesh(shadowGeo, shadowMaterial);
mesh.position.y = 0;
mesh.rotation.x = - Math.PI / 2;
scene.add( mesh );
我将阴影应用于PlaneGeometry
,因为我认为阴影是在场景中投射的。在任何情况下,还要看一下有关场景中阴影的this example。