灯问题(使用three.js)

时间:2012-09-12 00:50:16

标签: javascript three.js

我有一个简单的室内场景,我是从搅拌机中导出的。它有一个房间,天花板上有3个球体,里面有各自的光源。每个灯都可以自己工作,但是当我在场景中插入所有灯时,其中只有一个有效!有时使用2,但从不使用其中的三个。 这是我的灯光代码:

luz_sala1 = new THREE.PointLight(0xFFFFFF,0.5, 50.0);
luz_sala1.position = new THREE.Vector3(16.14323,2.52331,13.93375);
scene.add(luz_sala1);

luz_sala2 = new THREE.PointLight(0xFFFFFF, 0.5, 50.0);
luz_sala2.position = new THREE.Vector3(27.70114,2.52331,-6.20571);
scene.add(luz_sala2);

luz_sala3 = new THREE.PointLight(0xFFFFFF, 0.5, 50.0);
luz_sala3.position = new THREE.Vector3(21.50580,3.10719,-27.82775);
scene.add(luz_sala3);

如果我将距离设置为0,则效果很好,但我需要这些灯光才能影响它们所在的区域。 我也试过THREE.Spotlight(0xFFFFFF,0.5,50.0,Math.PI,0),但结果相同。 当它们以某种方式共享相同的距离时,它们似乎相互抵消了吗?

请帮助,这非常令人困惑。

编辑:另外,我在房间的另一部分有一些聚光灯模型(我有大约4个),但是当我将4个以上的聚光灯添加到场景时,我正在使用着色器编译错误。在搜索问题后,我看到我需要在渲染器中设置maxLights属性。我把它设置为10,但问题仍然存在,我在场景中不能有超过4个灯。还有什么我可以做的吗?

编辑2:这是一些图像。作为参考,“luz_sala1”是靠近电视的一个,“luz_sala2”是中间的,而“luz_sala3”是更远的一个。

这个是上面的代码(所有3个灯),除了0.8强度。 http://www.mediafire.com/view/?s85qr4rplhort29

这是打开2和3(评论“scene.add(luz_sala1);”): http://www.mediafire.com/view/?83qbbua9f8ee3b4

所以,正如你所看到的,2点灯可以很好地协同工作,但有3点它们似乎“加起来”到第一点?

1 个答案:

答案 0 :(得分:0)

maxLight属性没有任何影响很可能是由于您的硬件,驱动程序或ANGLE(将WebGL转换为Direct3D的库)在着色器中不支持足够的变化向量 - 每个灯光也需要一个和其他东西。 可能也可能是您一般问题的背景。

为了拥有更多灯光,有三种选择:

  1. 如果您的浏览器更喜欢ANGLE上的原生OpenGL(google获取说明),请尝试它是否有帮助。确保安装了最新的OpenGL驱动程序。
  2. 实施延迟渲染器。这在桌面世界中非常普遍,但由于帧缓冲限制,在WebGL中以良好的性能实现并不是不可能的。
  3. 实现只使用某些灯光的灯光管理器,禁用其余灯光。最简单的方法是选择最接近相机的灯光。
  4. 另外值得一提的是,目前SpotLights只是将阴影投射到一个方向的PointLights。