代码之家  ›  专栏  ›  技术社区  ›  Gomi Odabaşıoğlu

C#SharpDX没有选项来检查三角形是正面还是背面

  •  1
  • Gomi Odabaşıoğlu  · 技术社区  · 8 年前

    我想检查一个三角形是正面还是背面对着摄像机。我试图找出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 回复  |  直到 6 年前
        1
  •  4
  •   yacc    8 年前

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

    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 = viewPoint - camLocation 关于性能,我将使用这里的代码,而不是调用接口,它相当快。