2015-11-15 3 views
0

У меня есть объект car, которому я add. Как я могу получить доступ к камере через этот объект сейчас. Я попытался это:Получить добавленную камеру в три js

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.

Это даже возможно, или я должен держать камеру (ы) в некоторой глобальной переменной (массив)?

+0

я не использовал Phyisijs, но почему вы это делаете? 'Car.body.add (камера)'? Если бы вы хотели, чтобы у car.body была ссылка на камеру, вы бы просто не сделали «car.body.camera = camera;»? – 2pha

+0

@ 2pha Не знаю, могу ли я это сделать, 'body' имеет атрибут' camera'? Дайте мне минуту – TheGuyWithStreetCred

+0

Это работает, но теперь 'камера' больше не будет следовать за« автомобилем » – TheGuyWithStreetCred

ответ

1

Чтобы иметь ссылку на камеру внутри автомобиля.
Использование:

car.body.camera = camera; 

вместо:

car.body.add(camera); 
+0

Я тестировал с 'add' и' = ', и если я использую последний, камера больше не следует за автомобилем – TheGuyWithStreetCred

+1

Это потому, что, когда вы используете' car.body.add (camera) ', камера добавляется как ребенок car.body, так будет двигаться с car.body. Но когда просто добавляете ссылку на камеру в car.body 'car.body.camera = camera;', это просто та ссылка. Вы можете вернуться к использованию 'car.body.add (camera);', но тогда вам нужно будет получить его, посмотрев массив 'car.body.children'. – 2pha

+0

Спасибо, я решил с дополнительным массивом, который хранит все камеры – TheGuyWithStreetCred

Смежные вопросы