フラグメント シェーダーを頂点シェーダーに変換しようとしています (モバイル最適化のため)。
下の画像でわかるように、中央と右端の頂点がバグっています。(これは 11 x 11 の頂点を持つ平面です)
現在、UV は右からマップされ、中心を中心に (放射状の回転で) ラップされています。穴を作成している同じ値の中央半分に複数の頂点があると思いますか? そして、右側は最初の UV 値を最終値にクロスフェードし、引き伸ばされた効果を生み出します。
問題は、それらをオーバーライドまたは修正する方法です。(おそらく2つの別々の問題になるでしょうか?)
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