以下GLSLスクリプトはhttps://wgld.org/d/glsl/g005.htmlから引用させていただきました。
ちなみに、マンデルブロ集合の式は
Zn+1=Zn^2+C Z0=0
そこで、以下のスクリプト内で、 (★部分)z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + x + y
とゆう式がありますが、この式があまり理解できません。。
なんとなく、Znの二乗をしてるのかな?とゆう解釈です
Znの二乗をするのであれば、
Zn^2=z.x^2+(2z.xz.y)+z.y^2
となるはずです。
vec2のy値部分 2.0 * z.x * z.yは、**(2z.xz.y)だろうなあと、理解できるのですが
vec2のx値、z.x * z.x - z.y * z.y**は何故マイナスなのでしょうか、、、?
GLSL
1precision mediump float; 2uniform float time; 3uniform vec2 mouse; 4uniform vec2 resolution; 5 6vec3 hsv(float h, float s, float v){ 7 vec4 t = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); 8 vec3 p = abs(fract(vec3(h) + t.xyz) * 6.0 - vec3(t.w)); 9 return v * mix(vec3(t.x), clamp(p - vec3(t.x), 0.0, 1.0), s); 10} 11 12void main(void){ 13 vec2 m = vec2(mouse.x * 2.0 - 1.0, -mouse.y * 2.0 + 1.0); 14 vec2 p = (gl_FragCoord.xy * 2.0 - resolution) / min(resolution.x, resolution.y); 15 16 int j = 0; 17 vec2 x = vec2(-0.345, 0.654); 18 vec2 y = vec2(time * 0.005, 0.0); 19 vec2 z = p; 20 for(int i = 0; i < 360; i++){ 21 j++; 22 if(length(z) > 2.0){break;} 23//★★★★★★★★ 24 z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + x + y; 25//★★★★★★★★ 26 } 27 28 float h = abs(mod(time * 15.0 - float(j), 360.0) / 360.0);; 29 vec3 rgb = hsv(h, 1.0, 1.0); 30 gl_FragColor = vec4(rgb, 1.0); 31 32}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。