0

我有一个非常简单的场景,其中有一个 .dae 网格,网格下方有一个 7000*7000 的平面。我希望它被高光照亮SpotLight,所以网格会在地面上投下阴影。但是,好像有什么东西坏了!不管我把它放多高SpotLight,它都不会点亮飞机!此外,当它位于一个小正方形(周长)时,它只会稍微点亮网格。

你可以在这里看到情况: 截图1,几乎一切都是黑暗的

一旦我移动网格(一个怪物),它就不会再亮了。

这就是我实例化灯光的方式:

// create a spotlight
self.spotLight = new THREE.SpotLight();

// set its position
self.spotLight.position.y = 1000; //I recon it needs to be relatively high so it lights up everything
self.spotLight.position.x = 0; //(0, 0) are the coordinates where the mesh is spawned, and are the center of the plane
self.spotLight.position.z = 0;
self.spotLight.castShadow = true;

飞机是这样制造的:

//The plane.
self.plane = new THREE.Mesh(new THREE.PlaneGeometry(self.groundSize, self.groundSize), new THREE.MeshLambertMaterial({color: 0x5C8A00}));
self.plane.receiveShadow = true;
self.plane.position.x = 0;
self.plane.position.y = -26;
self.plane.position.z = 0;

另外,这是另一张图片,这一次,我添加了很多PointLights

截图2,一切都亮了。

你可以看到阴影是如何消失的!

现在,我在这里做错了什么?AFAIK,光应该在各个方向均匀分散!此外,还有一个问题,我似乎无法在场景中添加多个 SpotLights!如果我这样做,一切都会完全减慢 - 这是故意的吗?也许是因为我对它们都启用了阴影...

@Neil,您的代码中也会发生同样的事情!

在此处输入图像描述

4

1 回答 1

4

我创建了一个jsfiddle,显示了一个带有 Lambert 材料的平面和一个正在投射阴影的旋转立方体,也许你可以看到与你的不同的地方。

编辑

尝试使用一些参数,我可以在演示中停止剪辑:

spotLight.shadowCameraFov = 70;

更新演示和移动演示

于 2012-05-29T13:29:57.910 回答