【问题标题】:Get added camera in three js在三个js中获取添加的相机
【发布时间】:2015-11-15 02:16:21
【问题描述】:

我有一个对象caradd 相机。我现在如何通过这个对象访问相机。我试过这个:

car = {};
car.body = new Physijs.BoxMesh(
    new THREE.BoxGeometry( 10, 5, 7 ),
    Physijs.createMaterial(
        new THREE.MeshLambertMaterial({ color: color }), .8, .2 ), 
    1000 );
var camera = new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 1000);
var pos = car.body.position;
camera.position.set(pos.x + 75, pos.y + 20, pos.z);
camera.lookAt( pos );
car.body.add(camera);

//...

// other function

var camera = car.body.camera;

但我收到一条错误消息,提示 THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.

这甚至可能吗,还是我必须将相机保存在某个全局变量(数组)中?

【问题讨论】:

  • 我没有用过 Phyisijs,但你为什么要这么做? car.body.add(camera);?如果你想让 car.body 引用摄像头,你不就做car.body.camera = camera;吗?
  • @2pha 不知道我能做到,body 有属性camera 吗?给我一分钟
  • 它有效,但现在camera 将不再关注car
  • 如果不查看更多代码并了解渲染循环中发生的情况,很难提供帮助。

标签: javascript camera three.js add


【解决方案1】:

在 car.body 中引用相机。
使用:

car.body.camera = camera;

代替:

car.body.add(camera);

【讨论】:

  • 我已经用add= 进行了测试,如果我使用后者,相机就不再跟随汽车了
  • 那是因为当你使用car.body.add(camera)时,camera被添加为car.body的child,所以会随着car.body一起移动。但是当只是在 car.body car.body.camera = camera; 中添加对相机的引用时,它只是一个引用。您可以重新使用car.body.add(camera);,但您必须通过查看car.body.children 数组来检索它。
  • 谢谢,我解决了一个额外的数组来存储所有相机
猜你喜欢
  • 2013-01-14
  • 2018-10-05
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2013-01-22
  • 2014-08-17
  • 2017-03-14
相关资源
最近更新 更多