在网格

时间:2017-02-14 11:11:20

标签: opengl

我有一张六角形的地图,试图在它上面建立一场战争迷雾。我正在做的是构建一个顶点为十六进制中心的VBO。然后,我根据其可见性(0.0f,0.5f,1.0f)为每个图块中心指定alpha值。 这是顶点着色器:

#ifdef GL_ES                                        

precision highp float;

#endif

attribute vec4 a_position;
attribute float a_alpha;

uniform  mat4 u_MVPMatrix;

varying float v_alpha;

void main()
{
    gl_Position = u_MVPMatrix * a_position;
    v_alpha = a_alpha;
}                                                    

和我的片段着色器:

#ifdef GL_ES

precision highp float;

#endif

varying float v_alpha;

void main()
{ 
    gl_FragColor = vec4(v_alpha, v_alpha, v_alpha, 1.0);
}

我试图从雾图中刻出一个洞来尝试一下,我得到了这个: wrong interpolation

插值有什么问题?为什么三角形结构如此明显?

1 个答案:

答案 0 :(得分:2)

正如Nico指出的,这是一种视错觉。

基本上,你所拥有的是两个三角形之间的不连续性。共享边具有相同的颜色值,但由于两边的渐变不同,因此会在它们之间创建一条直线的外观。三角形边缘的渐变变化并不平滑。

在数学上,你在整个线路上都有C0连续性,但没有C1连续性。

人眼/感知非常习惯于平滑事物。因此,当某些事情不顺利时,我们感知不连续性。

你无能为力。您可能可以使用插值方案,但您可以做的最好的事情就是纹理十六进制。纹理经常变化的颜色将有助于掩盖渐变不连续性。