0効果:
1.vertexShader
属性VEC2のaCRSCoords。 属性VEC2のaExtrudeCoords。 均一なMAT4のuTransformMatrix。 / uPixelSize VEC2均一。 均一なフロートuNow。 属性フロートadm0cap。 VEC2のvExtrudeCoordsを変えます。 様々なフロートvTimeNow。 VEC2のvCRSCoordsを変えます。 ボイドメイン(ボイド){ vExtrudeCoords = aExtrudeCoords。 vTimeNow = uNow。 gl_Position = uTransformMatrix * vec4(aCRSCoords、1.0、1.0 ); // ない場合は、単に小さな子猫を置きます。 gl_Position + = vec4(aExtrudeCoords * uPixelSize * 100.0、0.0、0.0 )。 }
2.fragmentShader
均一sampler2D uTexture0。\ n 精度highpのフロート。 様々なフロートvTimeNow。 VEC2のvExtrudeCoordsを変えます。 CONST フロート PI = 3.1415926535898 ; \ N CONST フロート PI_2 = PI / 2.0 。 フロート上記Arctan2(フロート Y、フロートX){ 場合(X> 0.0 ) 戻り ATAN(Y / X)。 他の 場合(X < 0.0 && Y> = 0.0 ) 戻り ATAN(Y / X)+ PI。 他の 場合(X < 0.0 && Y < 0.0 ) 戻り ATAN(Y / X) - PI。 そう であれば(X == 0.0 && Y> 0.0 ) 戻りPI_2。 そう であれば(X == 0.0 && Y < 0.0 ) リターン - PI_2。 他の リターン 0.0 。 } ボイドメイン(ボイド){ //私たちの押し出し座標から行く[-1、-1]に[1,1]は、 // しかし、テクスチャルックアップは、[0,0]でCOORDSを必要とする- [1,1] // レンジ。 VEC2のtexelCoords。 texelCoords.x =(vExtrudeCoords.x + 1.0)/ 2.0 。 texelCoords.y =(1.0 - vExtrudeCoords.y)/ 2.0 。 // テクスチャのルックアップを実行し vec4 texelColour = にTexture2D(uTexture0、texelCoordsを)。 フロート角= 上記Arctan2(vExtrudeCoords.y、vExtrudeCoords.x)。\ n個の 角 = MOD(-vTimeNow / 500.0+角度、PI * 2.0 )。 フロートアルファ= 0.0 。 もし(角度< PI) 角度 = 0.0 。 他の アルファ =(角度- PI)/ PI * 1.0 ; \ n 場合(MOD(gl_FragCoord.s、3.0)< 1.0 || MOD(gl_FragCoord.t、3.0)< 1.0 ) 、α = 0.0 。 // このピクセルの色とテクスチャから色を使用します texelColour.a = texelColour.a * アルファ。 gl_FragColor = texelColour。 }