2012-09-12 60 views
1

我有一个简单的室内场景,我从搅拌机中导出。它有一个房间,天花板上有3个球体,里面有相应的光源。每个灯都独立工作,但是当我将它们全部插入场景中时,其中只有一个能够正常工作!有时和2一起工作,但从来不与三个人一起工作。 这里是我的灯代码:灯光问题(使用three.js)

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,它工作得很好,但我需要这些灯只影响他们在该地区 我也试过有三个。 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个,他们似乎“加起来”到第一个?

+0

你在使用什么操作系统? – mrdoob

+0

我尝试了两台机器,一台使用Windows 7与ATI HD5850,另一台使用Windows XP(无法重新装载卡),两者都发生同样的事情。我可以尝试上传,但代码非常大。我会很快发布一些图片。 – CoreyTaylor

+0

发布2个图片。同样的事情发生,如果灯是Spotlights而不是PointLights。 – CoreyTaylor

回答

0

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

为了有更多的灯有三种选择:

  1. 尝试,如果它帮助,如果你让你的浏览器更喜欢ANGLE本地的OpenGL(谷歌的说明)。确保你已经安装了最新的OpenGL驱动程序。
  2. 实现延迟渲染器。这在桌面世界中现在非常普遍,但由于帧缓冲区的限制,如果不是不可能在WebGL中实现良好的性能,那就很棘手。
  3. 实现一个灯管理器,只使用一些灯,禁用其余的灯。最简单,尽管远非完美的方法是选择距离相机最近的灯。

另外值得一提的是,目前SpotLights只是将阴影投射到一个方向的PointLights。