three.js使用TrackballControls移动灯光时相机位置错误

时间:2013-05-17 15:41:23

标签: javascript three.js

我想用相机移动灯光。 我写道:

  scene = new THREE.Scene();

  camera = new THREE.PerspectiveCamera(40, windowWidth / windowHeight, 1, 10000);
  camera.position.z = 50;
  scene.add(camera);


  var dirLight = new THREE.DirectionalLight(0xffffff);
  **dirLight.position = camera.position;**
  dirLight.position.normalize();
  scene.add(dirLight);

  renderer = new THREE.WebGLRenderer();
  renderer.setSize(windowWidth, windowHeight);
  i_container.appendChild(renderer.domElement);

  controls = new THREE.TrackballControls(camera);

  controls.rotateSpeed = 1.0;
  controls.zoomSpeed = 1.2;
  controls.panSpeed = 0.8;

  controls.noZoom = false;
  controls.noPan = false;

  controls.staticMoving = true;
  controls.dynamicDampingFactor = 0.3;

  controls.keys = [65, 83, 68];

  controls.addEventListener('change', render);

一切正常:光线随着相机移动。 但是有一个问题:当场景初始化时,摄像机在我的对象内部。所以我应该缩小以查看整个对象。

没有这一行 - “dirLight.position = camera.position;”场景正在初始化好:我看到整个对象。

你能解释一下我的错误吗?我不改变相机的位置。为什么我在对象里面?

谢谢, 振亚

1 个答案:

答案 0 :(得分:0)

这与TrackballControls无关。这是因为

dirLight.position = camera.position;
dirLight.position.normalize();

正常化相机位置。

删除dirLight.position.normalize();它不再需要了。

事实上,我会使用pointLight,但你正在做的是在当前版本的three.js下工作。

three.js r.58