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

C#SharpDX无选项检查三角形是正面还是背面,c#,directx-11,sharpdx,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 Ca

我想检查一个三角形是正面对着相机还是背面对着相机。我试图找出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)
}

基本上你在寻找三角形的叉积。这是平行于三角形法线的向量

Vector3 cross = Vector3.Cross(TrianglePoints[1] - TrianglePoints[0], TrianglePoints[2] - TrianglePoints[0]);
bool facescam = cross.Z < 0;
Vector3 cross=Vector3.cross(三角形点[1]-三角形点[0],三角形点[2]-三角形点[0]);
bool-facescam=cross.Z<0;
如果三角形面向凸轮,则叉积的Z值为负值。请注意,输出取决于三角形点的顺序

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

bool facescam = Vector3.Dot(cross, Camera) < 0;
bool facescam=Vector3.Dot(十字线,摄像头)<0;
请注意,为了简单起见,我假设摄影机已经保持了查看器所面对的方向,即
Camera=viewPoint-camLocation

关于性能,我将使用这里的代码,而不是调用接口,它相当快。

基本上,您要寻找的是三角形的叉积。这是平行于三角形法线的向量

Vector3 cross = Vector3.Cross(TrianglePoints[1] - TrianglePoints[0], TrianglePoints[2] - TrianglePoints[0]);
bool facescam = cross.Z < 0;
Vector3 cross=Vector3.cross(三角形点[1]-三角形点[0],三角形点[2]-三角形点[0]);
bool-facescam=cross.Z<0;
如果三角形面向凸轮,则叉积的Z值为负值。请注意,输出取决于三角形点的顺序

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

bool facescam = Vector3.Dot(cross, Camera) < 0;
bool facescam=Vector3.Dot(十字线,摄像头)<0;
请注意,为了简单起见,我假设摄影机已经保持了查看器所面对的方向,即
Camera=viewPoint-camLocation

关于性能,我会使用这里的代码,而不是调用接口,它相当快。

我开始使用它,但在“点(十字,摄影机)”中,我会使用摄影机的眼向量还是我弄错了?是的,眼向量。点积在同一方向交叉时为正,垂直时为零,面向凸轮时为负。它似乎工作正常。我不是几何专业人士,所以我没有检查所有面向前方的点积是否正确,但我看到了4个三角形,这给出了4个面向前方的三角形。这是视频:我开始得到它,但在“点(十字,相机)”我会使用相机的眼向量还是我弄错了?是的,眼向量。点积在同一方向交叉时为正,垂直时为零,面向凸轮时为负。它似乎工作正常。我不是几何专业人士,所以我没有检查所有面向前方的点积是否正确,但我看到了4个三角形,这给出了4个面向前方的三角形。以下是视频: