2012-06-21 95 views
4

我想旋转聚光灯。我的代码是:Spotlight旋转three.js

var light = new THREE.SpotLight(color, intensity, distance); 
light.position.set(0, 100, 0); 
light.rotation.set(0, Math.PI, 0); 
light.shadowCameraFar = 50; 
light.shadowCameraNear  = 0.01;  
light.castShadow  = true; 
light.shadowDarkness  = 0.5; 
light.shadowCameraVisible = true; 
light.shadowCameraFar = 800; 
light.shadowCameraFov = 15; 
scene.add(light); 

我想知道我在做什么错。聚光灯不会改变其旋转独立于我放的价值。

回答

3

light.target决定聚光灯的阴影照相机方向。如果,例如,您在场景中有名为myObject的对象,你可以做这样的事情:

light.target = myObject; 

记住,light.targetObject3D,而不是一个位置矢量。

three.js所r.49

+0

当你做'light.target = camera'时,这个方法可行,但是我不能让它在网格或物体上工作 – Paul

0

所以,你会定位目标光通过直接分配:

myLight.target.position = new THREE.Object3D(10, 20, 30); 

或者定义光目标对象属性:

myLight.target.position.x = 10; 
myLight.target.position.y = 20; 
myLight.target.position.z = 30; 
0

对于最后一次修订74!

function SPOT_CLASS(pointIntensity) { 

ROOT.sunLight= new THREE.SpotLight(0x0000ff,pointIntensity,2000,Math.PI,1); 
     ROOT.sunLight.position.set(100, 200 , 0); 
     // HERE 
     ROOT.PILOT = new THREE.Object3D(0, 0, 0); 
     ROOT.sunLight.target = ROOT.PILOT; 
     ROOT.sunLight.castShadow = true; 
     ROOT.sunLight.shadow.bias = 1; 
     ROOT.sunLight.shadow.camera.far =5000; 
     ROOT.sunLight.shadow.camera.near = 800; 
     ROOT.sunLight.shadow.camera.fov = 70; 
     // SHADOW CAMERA HELPER 
     var shadowCameraHelper = new THREE.CameraHelper(       
     ROOT.sunLight.shadow.camera); 
     shadowCameraHelper.visible = true; 
     ROOT.sunLight.add(shadowCameraHelper); 
      // try other combination 
     scene.add(ROOT.sunLight); 
     scene.add(ROOT.PILOT); 

    } 

请实例是这样的:

变种LIGHTS =新SPOT_CLASS(15);

尝试然后在控制台: LIGHTS.PILOT.position.x = 200;

使此对象>> LIGHTS.PILOT.position做在更新旋转或循环渲染...

ROOT.sunLight.target = LIGHTS.PILOT; 或者更好的 ROOT.sunLight.lookAt(LIGHTS.PILOT);