0

解析サーフェスのサーフェス法線を計算しています。私が取得している法線の一部は正しいですが、すべてではありません。コードは次のとおりです。

SurfaceVertices3f[pos] = i;
SurfaceVertices3f[pos+1] = j;
SurfaceVertices3f[pos+2] = (cos(i)*sin(j));

/*a and b hold the poutput of partial differentiation of vertices from above three lines.a is wrt i and b is wrt j */           
a[0]=1;
a[1]=0;
a[2]=-sin(i)*sin(j);

b[0]=0;
b[1]=1;
b[2]=cos(i)*cos(j);

normal_var=Vec3Df::crossProduct( a, b);
normal_var.normalize();

私の出力は次のようになります。右の画像は私のもので、左の画像は参照として使用しています。 http://tinypic.com/view.php?pic=73l9co&s=5

誰が私がやっている間違いを教えてもらえますか?

4

1 に答える 1

0

あなたの通常の計算は正しいです。参照画像は、法線を色にマッピングする方法が異なるだけです。

緑の地色を見ると、色のノルムが 1 ではないことがわかります。しかし、法線はノルム 1 を持つ必要があります。法線から色への別の一般的なマッピングを次のように仮定すると、次のようになります。

color.rgb = normal.xyz / 2 + 0.5

これも単位ベクトルではないことがわかります。したがって、彼らはまだ異なるマッピングを使用しているか、単位長の法線を持っていません。

于 2013-06-07T18:05:03.960 に答える