2013-06-20 2 views
5

Я пытаюсь поставить объект перед камерой, но не смог.Как поставить объект перед камерой в THREE.JS?

Я использую FlyControls, что перемещает камеру, и теперь я хочу поставить объект перед ним. Как я могу это сделать? Я пробовал много разных способов, но мне это не удалось.

Благодаря

+0

Можете ли вы показать код, чтобы мы могли видеть, где ошибка? – gaitat

ответ

1
var cx, cy, cz, lx, ly, lz; 



dir.set(0,0,-1); 
dir.applyAxisAngle(0,camera.rotation.x); 
dir.applyAxisAngle(1,camera.rotation.y); 
dir.applyAxisAngle(2,camera.rotation.z); 
var dist = 100; 

cx = camera.position.x; 
cy = camera.position.y; 
cz = camera.position.z; 

lx = dir.x; 
ly = dir.y; 
lz = dir.z; 


var l; 

l = Math.sqrt((dist*dist)/(lx*lx+ly*ly+lz*lz)); 

var x1, x2; 
var y1, y2; 
var z1, z2;  

x1 = cx + lx*l; 
x2 = cx - lx*l; 

y1 = cy + ly*l; 
y2 = cy - ly*l; 

z1 = cz + lz*l; 
z2 = cz - lz*l; 


nanobot.position.set(x1, y1, z1); 

Я пытался вычислить направление вектора направления камеры, а затем рассчитать линию, которая проходит через камеру, поставить точку на этой линии на расстоянии от камеры

15

Вы пытались сделать свой объект ребенком своей камеры, а затем перевести его вперед?

camera.add(nanobot); 
nanobot.position.set(0,0,-100); 

Вышеприведенные места наноробота Постоянно 100 единиц в передней части камеры ... и вот где он будет оставаться до тех пор, пока сделать:

camera.remove(nanobot); 

... в этот момент он должен просто оставайтесь там, где он находится в глобальном пространстве, пока вы не переместите его каким-либо другим способом.

+4

вы также должны сделать камеру дочерним элементом сцены (обычно не по умолчанию) 'scene.add (camera)' – mattdlockyer

+0

убедитесь, что 'nanobot.position.set (0,0, -100);' is ** после ** 'camera.add (nanobot);': 'position' - локальное положение относительно камеры. [threejs r89] – zwcloud

1

Вот еще один метод - применение quarternion камеры к вектору (dist как далеко от камеры, которую вы хотите, чтобы объект быть):

var vec = new THREE.Vector3(0, 0, -dist); 
vec.applyQuaternion(camera.quaternion); 

nanobot.position.copy(vec); 

делая объект ребенка из Ждут камеры Для меня это работает, но это применимо. Метод Quarternion (адаптирован из ответа @ WestLangley здесь: Three.js: Get the Direction in which the Camera is Looking)

Возможно, вы захотите скопировать поворот с камеры, если хотите, чтобы она всегда была обращена к камере. И если вы хотите настроить точное положение объекта после этого, вы можете перевестиX, translateY и т. Д.