分析表面正常

时间:2013-06-07 15:44:19

标签: opengl 3d normals

我正在计算分析表面的表面法线。 我得到的正常的一些部分是正确的但不是全部。 代码是:

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

有人能告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

您的正常计算是正确的。参考图像具有将法线映射到颜色的不同方式。

如果您看一下绿色底色,您会看到颜色的标准不是1.但是法线应该具有1的标准。如果我们假设另一个常态映射从正常到颜色像这样:

color.rgb = normal.xyz / 2 + 0.5

我们看到这也不是单位矢量。所以要么他们使用了不同的映射,要么他们只是没有单位长度法线。