Opengl 分析曲面的法线

Opengl 分析曲面的法线,opengl,3d,normals,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

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

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();
我的输出是这样的,右边的图像是我的,左边的图像是我的参考。


谁能告诉我我犯了什么错误吗?

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

如果查看绿色底色,您将看到颜色的标准值不是1。但法线的范数应为1。如果我们假设另一个从法线到颜色的公共映射,如下图所示:

color.rgb = normal.xyz / 2 + 0.5

我们看到这也不是单位向量。因此,要么他们使用了不同的贴图,要么他们没有单位长度法线。

谢谢你的回答。我也使用了normal.xyz/2+0.5。我想我唯一缺少的是,如果你看到我右边图像的正面形状,它应该更蓝,这在左图中很清楚。另一件事是你们可能交换了y和z坐标。除非z是向上的方向。是的,我的网格在向上的方向有z。你是对的。但是用z代替y会使东西完全变成绿色。也尝试过改变标志。不起作用。那么应该没问题。您是否遇到其他问题?例如有照明。