我真的是新东西。我想制作一个简单的3D场景,我可以在这里与PointerLockControls一起飞行,但我也想要一些手电筒。所以聚光灯应该指向与相机相同的方向。点SpotLight在相机的方向three.js(手电筒)
我已经让聚光灯跟随相机,但它的目标是绑定到0,0,0。
达到此目的的最佳方法是什么?
谢谢。
我真的是新东西。我想制作一个简单的3D场景,我可以在这里与PointerLockControls一起飞行,但我也想要一些手电筒。所以聚光灯应该指向与相机相同的方向。点SpotLight在相机的方向three.js(手电筒)
我已经让聚光灯跟随相机,但它的目标是绑定到0,0,0。
达到此目的的最佳方法是什么?
谢谢。
该SpotLight
目标是Object3D
,而不是Vector3
。
spotlight.target = myObject;
你的情况最好的解决办法是使用PointLight
代替,并使用此模式:如果你仍然想使用聚光灯
scene.add(camera);
camera.add(pointLight);
,然后做这样的事情:
scene.add(camera);
camera.add(spotLight.target);
spotLight.target.position.set(0, 0, -1);
spotLight.position.copy(camera.position); // and reset spotlight position if camera moves
它一般不要求相机被添加作为场景的一个孩子,但它需要在这种情况下,因为光被添加为相机的孩子。
three.js所r.69
我有我解决了同样的问题如下:
flashlight = new THREE.SpotLight(0xffffff,4,40);
camera.add(flashlight);
flashlight.position.set(0,0,1);
flashlight.target = camera;
由于Spotlight的.TARGET需要是一个对象(而不是一个位置),我发现它精神上更容易简单地把手电筒背后将相机直接,然后瞄准它在相机。因此,光线照在照相机上并照亮它前面的东西。
这个方法是好的,如果你所在的手电筒举行靠近胸部一侧(中央对身体),而不是关闭手电筒后的效果。
这对我工作感谢!一直试图找到一些工作代码。你知道聚光灯是否可以独立于相机进行互动吗?我在这里问过一个问题:http://stackoverflow.com/questions/17827292/add-interactivity-to-a-spotlight-in-three-js – Paul 2013-07-24 23:08:58
通过WestLangley的解决方案的启发上面,我发现spotlight.target和聚光灯本身可以作为孩子相同的对象,无论是相机或其他物体,比如一辆汽车或枪。然后它们相对于父对象进行定位,因此不需要将位置从一个对象复制到另一个对象。
你可以,例如,做这样的事情:
scene.add(camera);
camera.add(gun);
gun.position.set(-30,-30,0);
gun.add(spotlight);
spotlight.position.set(0,0,30);
gun.add(spotlight.target);
spotlight.target.position.set(0,0,31);
而现在的枪将,默认情况下,按照摄像头,聚光灯将沿着枪亮起。如果枪因某种原因旋转(偏转子弹或在地面或其他地方爬行),聚光灯也会旋转。 THREE是一款不错的软件。 :-)
如果将聚光灯的相机,并在相同的方向将相机指向它,不定位它远离中心,则光锥看起来不断循环。对于许多应用来说,它看起来更酷更实际,它在投影中动态改变形状。一个小的偏移量就是它所需要的(例如在我上面的例子中,虽然我没有测试过那个)。
是的,但PointLight不给我阴影。有没有办法让他们与PointLight? – 2013-05-12 20:36:54
确实,pointLights不支持阴影。但是,如果光线位于相机所在的位置,则无论如何您都看不到阴影,因为投射阴影的物体挡在了路上。 – WestLangley 2013-05-12 21:17:03
好吧,也许坏的例子 - 任务: 我想在node.js作为服务器,(多人)同步场景中的两个单位,我想闪光灯在每个单位,指向定义的方向。通过套接字发送此类信息的最佳方式是什么? (通过接受按钮的方式?:)) – 2013-05-14 14:49:28