ゆらゆら・ShaderToyのテンプレートコードのメモ
ゆらゆら
void mainImage( out vec4 fragColor, in vec2 fragCoord ) { // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord/min(iResolution.x, iResolution.y); float speed = 0.5f; vec2 p = uv * 5.0f; for (int i = 1; i < 10; ++i) { float fi = float(i); vec2 mouse = iMouse.xy / 1000.0f; p.x += 0.2f / fi * sin(fi * 3.0f * p.y + iTime * speed) + mouse.x; p.y += 0.2f / fi * sin(fi * 3.0f * p.x + iTime * speed) + mouse.y; } vec3 col1 = vec3(1, 0, 0.25); // off1 color (primary) vec3 col2 = vec3(0, 0.3f, 1); // off2 color (secondary) vec3 col3 = vec3(1, 1, 1); // off3 color (sub) // [0, 1] float off1 = cos(p.x + p.y) * 0.5f + 0.5f; float off2 = sin(p.x + p.y) * 0.5f + 0.5f; float off3 = (2.0f - (off1 + off2)) * 0.5f; // over operator vec3 color = vec3(0); color = col1 * off1 + color * (1.0f - off1); color = col2 * off2 + color * (1.0f - off2); color = col3 * off3 + color * (1.0f - off3); fragColor = vec4(color, 1.0f); }
久しぶりに触りますので簡単なものを作ってみました。(参照の記事のコードを見てちょっと改造などなど)
テンプレートコード
忘れてた時に見たら良さそうで貼りますね。
// Shader Inputs, uniforms uniform vec3 iResolution; // viewport resolution (in pixels) uniform float iTime; // shader playback time (in seconds) uniform float iTimeDelta; // render time (in seconds) uniform int iFrame; // shader playback frame uniform float iChannelTime[4]; // channel playback time (in seconds) uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) uniform vec4 iMouse; // mouse pixel coords. xy: current (if MLB down), zw: click uniform samplerXX iChannel0..3; // input channel. XX = 2D/Cube uniform vec4 iDate; // (year, month, day, time in seconds) // Main Funtion void mainImage( out vec4 fragColor, in vec2 fragCoord ) { // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord/iResolution.xy; // [0, 1] Squared UV. vec2 uv_min = fragCoord / min(iResolution.x, iResolution.y); // Time varying pixel color vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4)); // Output to screen fragColor = vec4(col,1.0); }