7

最初にすべての面の法線ベクトルを計算し、その後面の角度で重み付けされた面法線から頂点法線を計算する「patchnormal」と呼ばれる MATLAB アルゴリズムを再現しようと懸命に努力しています。(下図参照)

このような数学的使用に向けられた WPF C# の 3D メッシュに使用できる無料のライブラリはないようです。それともありますか?

問題は 、すべての頂点に対してこの (赤) ベクトルを計算するにはどうすればよいかということです。リアルタイム シミュレーションで使用できるように最適化できますか?

パッチノーマルイラストイメージ
(ソース:hostingpics.net

4

1 に答える 1

2

2 つのエッジ間の角度は次のように計算できます。

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()するとコストがかかると思いますが、それを改善するには、角度で重み付けされた法線の代わりを見つける必要があります。

于 2012-09-17T19:42:20.617 に答える