2013-06-20 84 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等。