我正试图编译片段着色器到顶点着色器(为了移动优化)。
如下图所示,中心点右边缘不太好。(这是11*11顶点的平面)
UV目前是从右边映射的,径向旋转着围绕中心。
我猜想出现小孔的原因是不是因为多个顶点被赋予了相同的值。
然后右边从第一个UV值到最后的值交叉衰落,形成一个拉伸的效果。
怎样覆盖或者修复上述问题呢(好像是两个单独的问题)?
uniform vec2 _Offset;
uniform float _Multiply;
varying vec4 position;
varying vec4 vert;
varying vec2 tex;
varying vec2 uv;
varying float ar;
#ifdef VERTEX
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vec2 p = -1.0 + 2.0 * tex.xy;
float a = atan(p.y,p.x) ;
float r = sqrt(dot(p,p));
uv.x = _Multiply*a/3.1416 * 2.0 + 0.1;
float sx = sin(_Multiply*r+_Offset.x);
float sy = _Multiply*.1*cos(_Offset.y+_Multiply*a);
uv.y = -_Offset.x + sx + sy;
}
#endif
#ifdef FRAGMENT
uniform sampler2D _MainTex;
void main(void)
{
gl_FragColor = texture2D(_MainTex,uv*.5);
}
#endif
ENDGLSL
答案:

miketucker
基本上重写了着色器后,我获得了所期望的结果。给新手的建议:在平面上顶点越多,像素失真的情况就越少发生。