2013-08-05 39 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) –

相关问题