【问题标题】:C# SharpDX no option to check if triangle is front facing or back facingC# SharpDX 没有检查三角形是正面还是背面的选项
【发布时间】:2017-09-07 02:28:04
【问题描述】:

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

【问题讨论】:

    标签: c# directx-11 sharpdx


    【解决方案1】:

    基本上,您正在寻找三角形的叉积。那就是与三角形法线平行的向量。

    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。 关于性能,我会在这里使用代码而不是调用接口,它非常快。

    【讨论】:

    • 我开始得到它但在“Dot(cross,Camera)”我会使用相机的眼睛矢量还是我弄错了?
    • 是的,眼睛矢量。如果交叉面在同一方向,点积将为正,如果垂直,则为零,如果面向凸轮,则为负。
    • 它似乎工作正常我不是几何专业人士,所以我没有检查所有正面的正面是否正确,但我看到了 4 个三角形,这给出了 4 个正面的三角形。这是视频:youtube.com/watch?v=wkDD5z1iQws&feature=youtu.be
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2012-04-26
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多