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

Jos*_*elo 0 3d wpf 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,当任一轴上的旋转在+ -270和+ -360之间时,这会失败.

底层变换使用Quaternion对象进行实际旋转,并且具有良好的Axis和Angle属性,所以我猜我可以使用它,如果我知道如何.

Chr*_*isF 5

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

如果它是正的那么飞机就会背对你.

如果它是负的那么飞机就朝向你.

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

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

维基百科