如何确定3D平面的哪一侧显示?

时间:2010-05-24 16:15:45

标签: wpf 3d quaternions

这是一个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属性,所以我猜我可以使用它,如果我知道如何。

1 个答案:

答案 0 :(得分:5)

您需要执行平面法线和视图方向的点积。

如果是正面,则飞机背对着你。

如果它是否定的则飞机面向你。

如果它为零,那么你正在看平面边缘。

要找到平面法线取平面上的任意三个点 - 让我们称它们为OA和B.从O到A和O到B的向量。如果你取这两个向量的交叉乘积,你将得到正常。因为你做计算的顺序很重要。关于3D几何的好书/网站将是非常宝贵的帮助

Wikipedia