2013-08-05 76 views
0

我有三個js的飛機。它是雙面的,我的相機在場景中移動和旋轉。我的問題是,鑑於飛機的位置和旋轉以及相機的位置和旋轉,我怎麼能說出我所看到的飛機的哪一側?如何判斷相機是否在看飛機的表面

我的老辦法是這樣的(檢查從相機到飛機前後的距離),但顯然這不是最好的解決方案。

this.back.matrixWorldNeedsUpdate = true; 
this.front.matrixWorldNeedsUpdate = true; 

this.d1 = (new THREE.Vector3()).getPositionFromMatrix(this.back.matrixWorld).distanceTo(cameraSystem.camera.position); 
this.d2 = (new THREE.Vector3()).getPositionFromMatrix(this.front.matrixWorld).distanceTo(cameraSystem.camera.position); 

if((this.d1 - this.d2) < 0)'Facing the back Side' 
else 'Facing the front Side' 

謝謝!

+1

你可以檢查兩個向量之間的角度:在該相機指向載體和飛機的正常。 –

+0

非常感謝,希望我能夠upvote,作爲更多的信用的答案! :) –

回答

1

大,多虧了喬治和three.js set and read camera look vector,此代碼的工作

var planeVector = (new THREE.Vector3(0, 0, 1)).applyQuaternion(planeMesh.quaternion); 
var cameraVector = (new THREE.Vector3(0, 0, -1)).applyQuaternion(camera.quaternion); 

if(planeVector.angleTo(cameraVector)>Math.PI/2) 'facing front' 
else 'facing back' 
+0

這是不正確的,因爲你沒有考慮到相機的位置。 (如果它起作用,那只是因爲你認爲攝像機可以「看見」飛機)。相反,你需要測試攝像機在飛機的哪一側。要做到這一點,你需要在(1)世界空間中的平面法線的點積和(2)從旋轉平面中的任意點或頂點到世界空間中相機位置的矢量。如果點積大於0,則攝像機位於飛機的正面。然後,如果攝像機可以「看見」飛機,它正在看飛機的前方。 – WestLangley

+0

如果飛機在望,我無所謂......我想。 相反,我只是想要相機可能會看到哪一方,而不管飛機是否在視野中。那有意義嗎? 而且我也不在乎這個物體在鏡頭後面發生了什麼。 (謝謝澄清,雖然我將在後面的<3) –

相關問題