我有一张六角形的地图,试图在它上面建立一场战争迷雾。我正在做的是构建一个顶点为十六进制中心的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);
}
插值有什么问题?为什么三角形结构如此明显?
答案 0 :(得分:2)
正如Nico指出的,这是一种视错觉。
基本上,你所拥有的是两个三角形之间的不连续性。共享边具有相同的颜色值,但由于两边的渐变不同,因此会在它们之间创建一条直线的外观。三角形边缘的渐变变化并不平滑。
在数学上,你在整个线路上都有C0连续性,但没有C1连续性。
人眼/感知非常习惯于平滑事物。因此,当某些事情不顺利时,我们感知不连续性。
你无能为力。您可能可以使用插值方案,但您可以做的最好的事情就是纹理十六进制。纹理经常变化的颜色将有助于掩盖渐变不连续性。