3d 如何判断相机是否正对着飞机的表面

3d 如何判断相机是否正对着飞机的表面,3d,three.js,3d,Three.js,我有一架三英尺长的浮动飞机。它是双面的,我的相机围绕场景移动和旋转。我的问题是,考虑到平面的位置和旋转,以及摄像机的位置和旋转,我怎样才能知道我在看平面的哪一侧 我以前的解决方案是(检查相机到飞机前后的距离),但显然这不是最好的解决方案 this.back.matrixWorldNeedsUpdate = true; this.front.matrixWorldNeedsUpdate = true; this.d1 = (new THREE.Vector3()).getPositionFrom

我有一架三英尺长的浮动飞机。它是双面的,我的相机围绕场景移动和旋转。我的问题是,考虑到平面的位置和旋转,以及摄像机的位置和旋转,我怎样才能知道我在看平面的哪一侧

我以前的解决方案是(检查相机到飞机前后的距离),但显然这不是最好的解决方案

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'
this.back.matrixWorldNeedsUpdate=true;
this.front.matrixWorldNeedsUpdate=true;
this.d1=(新的THREE.Vector3()).getPositionFromMatrix(this.back.matrixWorld).distanceTo(cameraSystem.camera.position);
this.d2=(新的THREE.Vector3()).getPositionFromMatrix(this.front.matrixWorld).distanceTo(cameraSystem.camera.position);
如果((this.d1-this.d2)<0)“面向背面”
否则“面向正面”

谢谢

太好了,多亏了George和,这段代码很有效

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'

你可以检查两个向量之间的角度:相机所指向的向量和飞机的法线。非常感谢,希望我能把它作为一个更值得信任的答案:)这通常是不正确的,因为您没有考虑相机的位置。(如果它工作,那只是因为你假设相机可以“看到”飞机。)相反,你需要测试相机在飞机的哪一侧。为此,需要取(1)平面在世界空间中的法线和(2)从旋转平面中的任何点或顶点到世界空间中相机位置的向量的点积。如果点积大于0,则相机位于平面的前侧。然后,如果相机能“看到”飞机,它就是在看飞机的前部。飞机是否在视线中对我来说无关紧要。。。我想。相反,我只是想知道不管飞机是否在视野中,相机可能看到的是哪一侧。这有意义吗?我也不在乎这个物体在摄像机后面会发生什么。(谢谢你的澄清,不过我以后会需要的