OpenGL如何隐藏三角形之间的线条与顶点着色?

时间:2010-06-15 23:26:17

标签: opengl

Cube with obvious triangle lines http://img15.imageshack.us/img15/2096/cubeobviouslines.png

这是一个立方体,从两侧的角落看。你可以很容易地分辨出构成双方的四个三角形在哪里。我用顶点,颜色和索引数组绘制它。

是什么导致明显的界限,我怎么能避免它呢?

2 个答案:

答案 0 :(得分:3)

  

导致明显线条的原因

在三角形中插入颜色。每个三角形只有3种颜色。因此,插值程序根本不“知道”应该考虑的第四种颜色(在相邻三角形上),这会产生不准确的结果。

  

我怎么能避免它?

两种解决方案:

  1. 使用纹理代替顶点颜色。这需要额外的纹理内存,但您可以轻松使用2x2像素纹理。
  2. 使用片段着色器,根据纹理坐标在4种颜色之间进行插值。这需要具有片段着色器支持的视频卡。

答案 1 :(得分:1)

我认为它与用于遮蔽每个三角形的颜色插值有关。三角形在其3个点之间插入颜色,但不知道第4个点。因此,没有理由假设颜色插值在三角形边界上是平滑的。您可以保证线条本身的颜色相同,因为三角形边界上的像素仅取决于2个点,这将是相同的。

所以,你所看到的是围绕这一点的渐变的变化。当您突然改变渐变时,人类视觉系统会强调该线条,从而产生所谓的Mach Band

摆脱乐队的唯一好方法是让梯度变化不那么严重;通常,通过增加细分。使用更多三角形!三角形越多,颜色采样越多,马赫带的显着性就越小。