Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 灯光问题(使用three.js)_Javascript_Three.js - Fatal编程技术网

Javascript 灯光问题(使用three.js)

Javascript 灯光问题(使用three.js),javascript,three.js,Javascript,Three.js,我从blender导出了一个简单的室内场景。它有一个房间,天花板上有3个球体,里面有各自的光源。每个灯光本身都工作良好,但当我在场景中插入所有灯光时,只有一个灯光工作!有时与2人合作,但从不与其中3人合作。 以下是我的灯光代码: 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_

我从blender导出了一个简单的室内场景。它有一个房间,天花板上有3个球体,里面有各自的光源。每个灯光本身都工作良好,但当我在场景中插入所有灯光时,只有一个灯光工作!有时与2人合作,但从不与其中3人合作。 以下是我的灯光代码:

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强度。

这是在2和3打开的情况下(注释为“scene.add(luz_sala1)”):


因此,正如您所看到的,两个点光源可以很好地协同工作,但对于三个点光源,它们似乎“相加”到第一个点光源?

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

要拥有更多灯光,有三个选项:

  • 如果您的浏览器更喜欢原生OpenGL而不是ANGLE(谷歌提供说明),请尝试。但请确保已安装最新的OpenGL驱动程序
  • 实现延迟渲染器。这在当今的桌面世界中非常常见,但由于帧缓冲区的限制,要在WebGL中实现良好的性能即使不是不可能,也是很棘手的
  • 实现一个仅使用某些灯光的灯光管理器,禁用其余灯光。最简单但远不完美的方法是选择离相机最近的灯光

  • 另外值得一提的是,目前聚光灯只是向一个方向投射阴影的点光源。

    我在两台机器上进行了尝试,一台装有带ATI HD5850的Windows 7,另一台装有Windows XP(记不清该卡),两台机器上的情况都是一样的。我可以试着上传,但是代码太大了。我会很快发布一些图片。发布了2张图片。如果灯光是聚光灯而不是点光源,也会发生同样的情况。