|
1 | 1 | part of chronosgl; |
2 | 2 |
|
| 3 | +// http://www.bidouille.org/prog/plasma |
| 4 | +// see also: https://www.shadertoy.com/view/XdX3Wn |
| 5 | + |
3 | 6 | ShaderObject createPlasmaShader() { |
4 | 7 | ShaderObject shaderObject = new ShaderObject("Plasma"); |
5 | 8 |
|
| 9 | + shaderObject.vertexPositionAttribute = "aVertexPosition"; |
| 10 | + shaderObject.textureCoordinatesAttribute = "_coords"; |
| 11 | + shaderObject.modelViewMatrixUniform = "uMVMatrix"; |
| 12 | + shaderObject.perpectiveMatrixUniform = "uPMatrix"; |
| 13 | + shaderObject.timeUniform = "u_time"; |
| 14 | + |
| 15 | + shaderObject.fragmentShaderHeader = "#define PI 3.1415926535897932384626433832795\n vec2 u_k = vec2(10.0,10.0);\n"; |
| 16 | + |
| 17 | + shaderObject.fragmentShaderBody = """ |
| 18 | + float v = 0.0; |
| 19 | + vec2 c = v_coords * u_k - u_k/2.0; |
| 20 | + v += sin((c.x+u_time)); |
| 21 | + v += sin((c.y+u_time)/2.0); |
| 22 | + v += sin((c.x+c.y+u_time)/2.0); |
| 23 | + c += u_k/2.0 * vec2(sin(u_time/3.0), cos(u_time/2.0)); |
| 24 | + v += sin(sqrt(c.x*c.x+c.y*c.y+1.0)+u_time); |
| 25 | + v = v/2.0; |
| 26 | + vec3 col1 = vec3(1.0, sin(PI*v), cos(PI*v)); |
| 27 | + vec3 col2 = vec3(sin(PI*v), cos(PI*v), -1.0); |
| 28 | + vec3 col = mix(col1, col2, sin(u_time)*.5+.5); |
| 29 | + gl_FragColor = vec4(col*.5 + .5, 1.0); |
| 30 | + """; |
| 31 | + |
| 32 | + return generateShader(shaderObject); |
| 33 | +} |
| 34 | + |
| 35 | +ShaderObject createPlasmaShader2() { |
| 36 | + ShaderObject shaderObject = new ShaderObject("Plasma"); |
| 37 | + |
6 | 38 | shaderObject.vertexPositionAttribute = "aVertexPosition"; |
7 | 39 | shaderObject.textureCoordinatesAttribute = "aTextureCoord"; |
8 | 40 | shaderObject.modelViewMatrixUniform = "uMVMatrix"; |
9 | 41 | shaderObject.perpectiveMatrixUniform = "uPMatrix"; |
10 | 42 | shaderObject.timeUniform = "time"; |
11 | 43 |
|
12 | | - // #define PI 3.1415926535897932384626433832795 |
13 | | - |
14 | | - String fragmentShaderBody = """ |
15 | | - vec4 newColor = vec4(vaTextureCoord, 1.0, 1.0); |
16 | | - //float x = min(vaTextureCoord.s, 1.0 - vaTextureCoord.s); |
17 | | - //float y = vaTextureCoord.t; |
18 | | - //newColor.g = sin(x * cos(time/15.0) * 120.0) + cos(y * sin(time/10.0) * 120.0) + sin(sqrt(y * y + x * x) * 40.0); |
19 | | - gl_FragColor = newColor; |
| 44 | + shaderObject.fragmentShaderBody = """ |
| 45 | + float x = vaTextureCoord.x; |
| 46 | + float y = vaTextureCoord.y; |
| 47 | + gl_FragColor = vec4(1,sin(x * cos(time/15.0) * 120.0) + cos(y * sin(time/10.0) * 120.0) + sin(sqrt(y * y + x * x) * 40.0),1,1); |
20 | 48 | """; |
21 | 49 |
|
22 | | - return generateShader(shaderObject, "", fragmentShaderBody); |
| 50 | + return generateShader(shaderObject); |
23 | 51 | } |
| 52 | + |
| 53 | +ShaderObject createPlasmaShader3() { |
| 54 | + ShaderObject shaderObject = new ShaderObject("Plasma"); |
| 55 | + |
| 56 | + shaderObject.vertexPositionAttribute = "aVertexPosition"; |
| 57 | + shaderObject.textureCoordinatesAttribute = "aTextureCoord"; |
| 58 | + shaderObject.modelViewMatrixUniform = "uMVMatrix"; |
| 59 | + shaderObject.perpectiveMatrixUniform = "uPMatrix"; |
| 60 | + shaderObject.timeUniform = "time"; |
| 61 | + |
| 62 | + shaderObject.fragmentShaderBody = """ |
| 63 | + float x = vaTextureCoord.x*1000.0; // gl_FragCoord.x; |
| 64 | + float y = vaTextureCoord.y*1000.0; // gl_FragCoord.y; |
| 65 | + float mov0 = x+y+cos(sin(time)*2.)*100.+sin(x/100.)*1000.; |
| 66 | + float mov1 = y / 720.0 / 0.2 + time; |
| 67 | + float mov2 = x / 1280.0 / 0.2; |
| 68 | + float c1 = abs(sin(mov1+time)/2.+mov2/2.-mov1-mov2+time); |
| 69 | + float c2 = abs(sin(c1+sin(mov0/1000.+time)+sin(y/40.+time)+sin((x+y)/100.)*3.)); |
| 70 | + float c3 = abs(sin(c2+cos(mov1+mov2+c2)+cos(mov2)+sin(x/1000.))); |
| 71 | + gl_FragColor = vec4( c1,c2,c3,1.0); |
| 72 | + """; |
| 73 | + |
| 74 | + return generateShader(shaderObject); |
| 75 | +} |
| 76 | + |
0 commit comments