我在这个东西真的很新。 我想作一个简单的3D场景,在那里我可以绕飞与PointerLockControls,但我想也有某种手电筒。 因此,作为相机做投光灯应指向同一方向。
我做了聚光灯追随相机,但它的目标势必0,0,0。
什么是实现这一目标的最佳途径?
谢谢。
我在这个东西真的很新。 我想作一个简单的3D场景,在那里我可以绕飞与PointerLockControls,但我想也有某种手电筒。 因此,作为相机做投光灯应指向同一方向。
我做了聚光灯追随相机,但它的目标势必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需要有一个对象(而不是位置),我发现它精神更容易简单地直接将手电筒背后的摄像头,然后在相机瞄准它。 因此,该光线照射通过摄像头和在它前面的点亮的事。
如果你所在的手电筒举行靠近胸部一侧(中央对身体),而不是掀起了手电筒效应后,这个方法很好。
通过上述WestLangley的解决方案的启发,我发现spotlight.target和Spotlight本身可以作为孩子相同的对象,无论是相机或其他物体,比如一辆汽车或枪。 然后,以便有没有必要继续复制从一个对象到另一个位置时,它们相对于父对象定位。
你可以,例如,做这样的事情:
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);
而现在的枪将,默认情况下,按照摄像头,聚光灯将沿着枪亮起。 如果枪是出于某种原因旋转(偏转子弹或在地上爬行或其他),聚光灯也将旋转。 三是件不错的软件。 :-)
如果将聚光灯的相机,并在相同的方向将相机指向它,不定位它远离中心,则光锥看起来不断循环。 对于许多应用,它看起来更酷,更现实,它在投影动态地改变形状。 一个小偏移量是所有需要(例如,在我的上述例子中,虽然我还没有测试的一个)。