【问题标题】:Patch Normals Algorithm补丁法线算法
【发布时间】:2012-09-09 11:07:30
【问题描述】:

我正在努力重现一个名为“patchnormal”的 MATLAB 算法,它首先计算所有面的法线向量,然后根据面法线的角度加权计算顶点法线面孔。 (见下图)

在面向此类数学用途的 WPF C# 中似乎没有可用于 3D 网格的免费库。 或者有吗?

所以问题是: 如何为我的所有顶点计算这个(红色)向量?可以优化用于实时仿真吗?


(来源:hostingpics.net

【问题讨论】:

    标签: c# wpf 3d patch normals


    【解决方案1】:

    您可以按如下方式计算两条边之间的角度:

    given:  edge vectors E and F for a given face of your vertex,
    
    E_normalized = normalize(E)
    F_normalized = normalize(F)
    cross_normal = cross(E_normalized, F_normalized)
    sin_theta = length( cross_normal )
    cos_theta = dot(E_normalized, F_normalized)
    
    results:
        face normal = normalize(cross_normal)
        face angle theta = atan2(sin_theta, cos_theta)
    

    然后,相应地加权法线:

    total_vector = vec(0,0,0)
    for(each face adjacent to a particular vertex):
        [compute normal and theta as above]
        total_vector += normal * theta
    return normalize(total_vector)
    

    为了实时优化,我会首先分析一下实际上是什么让事情变慢了。我猜想每个顶点多次计算atan2() 可能会很昂贵,但改进它确实需要找到一些替代角度加权法线的方法。

    【讨论】:

    • 嗨@comingstorm 非常感谢您的回答,这肯定会帮助我完成我的项目!干杯
    猜你喜欢
    • 2012-08-03
    • 2017-01-31
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2012-08-19
    相关资源
    最近更新 更多