这是一个3d n00b问题。
我正在开发一个WPF控件,它实现了Silverlight的PerspectiveTransform功能的基础,允许2D平面在三个轴中的任何一个上旋转。它工作得很好。然而,我有点困在确定飞机后部是否显示所需的数学上。我现在想出的天真代码是:
bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90;
if (!isBackShowing)
{
isBackShowing = Math.Abs(RotationX) < 90 && Math.Abs(RotationY) > 90;
}
但是,当任一轴上的旋转在+ -270和+ -360之间时,这会失败。
底层变换使用Quaternion对象进行实际旋转,并且具有良好的Axis和Angle属性,所以我猜我可以使用它,如果我知道如何。
答案 0 :(得分:5)
您需要执行平面法线和视图方向的点积。
如果是正面,则飞机背对着你。
如果它是否定的则飞机面向你。
如果它为零,那么你正在看平面边缘。
要找到平面法线取平面上的任意三个点 - 让我们称它们为OA和B.从O到A和O到B的向量。如果你取这两个向量的交叉乘积,你将得到正常。因为你做计算的顺序很重要。关于3D几何的好书/网站将是非常宝贵的帮助