見出し画像

GLSL week#02 KodeLifeでVJを描く


Robotの王です。

Week02はRodom関数を使ってビジュアルを作ります。


GLSLの中Rodom()関数はないので、先に自分が関数を作っておきます。

float random (vec2 st) {
   return fract(sin(dot(st.xy,
                        vec2(5231.124 + spectrum.x/2 ,86254.4648 + spectrum.z/2)))*
      1123456.12234 + spectrum.y);
}

こちらの関数は音楽用のspectrumが入ってるので、普通はspectrum.x/2を消せば、floatがrandomの数値を返します。


このrandom()あれば、画面中のマス目を作ります。

   uv.x *= 10 * (spectrum.x * 10 + 0.8);
   uv.y *= 20 * (spectrum.x * 10 + 0.8);
   vec2 ipos = floor(uv);
   vec2 fpos = fract(uv);

vec2のuvをx,y別に分割数を設定、音楽をビジュアルに反映するので、またここのspectrumを入れました、音楽の強さによって分割数が細かくしたりします。両方同じ数値を入れた時、スケールに見える、ぜひたくさん面白いビジュアルを試してください。




Code

#version 150

#ifdef GL_ES
precision mediump float;
#endif
uniform float time;
uniform vec2 resolution;
uniform vec2 mouse;
uniform vec3 spectrum;
uniform sampler2D texture0;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform sampler2D texture3;
uniform sampler2D prevFrame;
uniform sampler2D prevPass;
in VertexData
{
   vec4 v_position;
   vec3 v_normal;
   vec2 v_texcoord;
} inData;
float random (vec2 st) {
   return fract(sin(dot(st.xy,
                        vec2(5231.124 + spectrum.x/2 ,86254.4648 + spectrum.z/2)))*
      1123456.12234 + spectrum.y);
}
out vec4 fragColor;
void main(void)
{
   vec2 uv = -1. + 2. * inData.v_texcoord;
   
   uv.x *= 10 * (spectrum.x * 10 + 0.8);
   uv.y *= 20 * (spectrum.x * 10 + 0.8);
   vec2 ipos = floor(uv);
   vec2 fpos = fract(uv);
   
   vec3 color = vec3(random( ipos ));
   color *= spectrum.y * 50;
//    color = abs(1 - color);
   
   fragColor = vec4(
       color,
       1.0);
}

いいなと思ったら応援しよう!