C#SharpDX无法检查三角形是正面还是背面

时间:2017-09-07 02:28:05

标签: c# directx-11 sharpdx

我想检查一个三角形是朝前还是背面朝向相机。我试图找出directx11是否有一个简单的选项。我找不到。

Something like: CheckFacing((Vector3)TrianglePoints, Camera(vector3)){
Formula... //The formula to check it but I do not know if I should manually check or if directx11 has an option
return CameraFacing; //(front or back)
}

1 个答案:

答案 0 :(得分:2)

基本上你正在寻找三角形的叉积。这是与三角形正常平行的矢量。

Vector3 cross = Vector3.Cross(TrianglePoints[1] - TrianglePoints[0], TrianglePoints[2] - TrianglePoints[0]);
bool facescam = cross.Z < 0;

如果三角形面向凸轮,则叉积的Z值将为负值。请注意,输出取决于三角形点的顺序。

如果凸轮位于任意位置,则需要计算凸轮与十字矢量之间的点积:

bool facescam = Vector3.Dot(cross, Camera) < 0;

请注意,为简单起见,我假设Camera已经保持了查看者所面向的方向,即Camera = viewPoint - camLocation。 关于性能,我在这里使用代码而不是调用接口,它的速度非常快。