我想检查一个三角形是朝前还是背面朝向相机。我试图找出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)
}
答案 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
。
关于性能,我在这里使用代码而不是调用接口,它的速度非常快。