gpt4 book ai didi

c# - 补丁法线算法

转载 作者:太空狗 更新时间:2023-10-29 20:37:08 24 4
gpt4 key购买 nike

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

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

所以问题是:我如何计算我所有顶点的这个(红色)向量?能否对其进行优化以用于实时仿真?

PatchNormal Illustration Image
(来源:hostingpics.net)

最佳答案

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

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() 可能会很昂贵,但改进它确实需要找到一些角度加权法线的替代品。

关于c# - 补丁法线算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com