金字塔角落的平滑法线

时间:2014-08-11 05:25:41

标签: c++ opengl math

所以,这些是我生成网格的法线,在gimp中增强对比度使它们更容易看到: Normals

网格是金字塔,顶部平顶。所有法线都通过对它们进行平均而得到适当的平滑,它们将围绕面法线加权,并且按预期工作。

然而,正如您所看到的,只要有平坦的表面,就会有非常明显的接缝。只有漫射照明这些几乎不引人注意,但镜面反射看起来很可怕。

我怎样才能摆脱这些?我的第一个想法是用12个顶点瓦片替换所有6个顶点瓦片,这样它们都是相同的。但是,这当然会使网格的大小增加一倍。还有其他方法可以做我之后的事吗?

编辑:所有角落都有三角形放置以适合各自的角落,所有平面都沿着NE / SW分开。

1 个答案:

答案 0 :(得分:1)

  1. 将法线绘制为从顶点开始的线条,以实际看到实际发生的事情。

    • 只绘制每个顶点V的线和相应的法线N

      double V[3],N[3],tmp[3];
      for (int i=0;i<3;i++) tmp[i]=V[i]+0.3*N[i]; // 0.3 is the line size ...
      glColor3f(0.0,0.5,0.0);
      glBegin(GL_LINES);
      glVertex3dv(V);
      glVertex3dv(N);
      glEnd();
      
    • 通过这种方式,您可以轻松地直观地检查法线的正确性

    • 平滑区域上每个顶点应该有一条法线
    • 如果还有更多则存在问题
    • 例如,它应该是这样的: surface normals
    • 绿线是法线
    • 三角形表面由Bezier曲面生成
    • 法线由crossproduct + smoothoot(如子弹2)
    • 计算
    • 左图是线框+法线
    • 中间图像是表面+法线
    • 右边只是表面
  2. 我使用此normal averaging