2013-06-20 53 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);'是**之后**'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); 

使得该对象的相机没的孩子(这适用于@ WestLangley的答案:Three.js: Get the Direction in which the Camera is Looking

如果您希望它始终面向相机,您也可以复制相机的旋转。如果您想在此之后调整对象的确切位置,则可以翻译X,translateY等。