我正在计算分析表面的表面法线。 我得到的正常的一些部分是正确的但不是全部。 代码是:
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
有人能告诉我我在做什么错吗?
答案 0 :(得分:0)
您的正常计算是正确的。参考图像具有将法线映射到颜色的不同方式。
如果您看一下绿色底色,您会看到颜色的标准不是1.但是法线应该具有1的标准。如果我们假设另一个常态映射从正常到颜色像这样:
color.rgb = normal.xyz / 2 + 0.5
我们看到这也不是单位矢量。所以要么他们使用了不同的映射,要么他们只是没有单位长度法线。