Compare commits

...

2 Commits

Author SHA1 Message Date
ekkie ef2f63dd55 Add AA slider
continuous-integration/drone/push Build is passing Details
2023-12-20 20:29:19 +01:00
ekkie d0d89cf367 Add phase shift 2023-12-20 20:13:26 +01:00
1 changed files with 29 additions and 6 deletions

View File

@ -51,10 +51,16 @@
<input type="number" id="speed" name="speed" min="-5" max="5" step="0.1" value="1">
<br>
<label for="pulse">Pulse</label>
<input type="pulse" id="pulse" name="pulse" min="-5" max="5" step="0.1" value="0">
<input type="number" id="pulse" name="pulse" min="-5" max="5" step="0.1" value="0">
<br>
<label for="pulsespeed">Pulse Speed</label>
<input type="pulsespeed" id="pulsespeed" name="pulsespeed" min="-5" max="5" step="0.1" value="1">
<input type="number" id="pulsespeed" name="pulsespeed" min="-5" max="5" step="0.1" value="1">
<br>
<label for="offset">Phase shift</label>
<input type="number" id="offset" name="offset" min="0" max="1" step="0.0625" value="1">
<br>
<label for="offset">Supersampling</label>
<input type="range" id="supersample" name="supersample" min="1" max="8" step="1" value="8">
<br>
<label for="mirror">Mirror</label>
<input type="checkbox" id="mirror" name="mirror">
@ -82,13 +88,14 @@ uniform float speed;
uniform float pulse;
uniform float pulsespeed;
uniform float mirrored;
const float aa = 8.;
uniform float offset;
uniform float aa;
void mainImage0(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = (fragCoord.xy - 0.5 * iResolution.xy) / iResolution.y;
float r = length(uv) * (1. + pulse * (pow(1. + sin(pulsespeed * iTime), 2.) - 1. ));
float theta = mirrored * atan(uv.y, uv.x);
float theta = mirrored * atan(uv.y, uv.x) + pi * 2. * offset;
fragColor = vec4(
fract(arms * theta / (2.*pi) + spiraldense * pow(r, spiraldiff) + speed * iTime) > ratio ? color1 : color2, 1.);
}
@ -96,8 +103,10 @@ void mainImage0(out vec4 fragColor, in vec2 fragCoord)
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec4 tempColor;
for(float i = 0.; i < aa; i++) {
for(float j = 0.; j < aa; j++) {
for(float i = 0.; i < 8.; i++) {
if (i >= aa) break;
for(float j = 0.; j < 8.; j++) {
if (j >= aa) break;
mainImage0(tempColor, fragCoord + vec2(i / aa, j / aa));
fragColor += tempColor;
}
@ -132,6 +141,8 @@ var ispeed = document.getElementById("speed");
var ipulse = document.getElementById("pulse");
var ipulsespeed = document.getElementById("pulsespeed");
var imirrored = document.getElementById("mirror");
var ioffset = document.getElementById("offset");
var isupersample = document.getElementById("supersample");
function updatevars() {
data.color1 = hextorgb(icolor1.value);
@ -143,6 +154,8 @@ function updatevars() {
data.speed = parseFloat(ispeed.value);
data.pulse = parseFloat(ipulse.value);
data.pulsespeed = parseFloat(ipulsespeed.value);
data.offset = parseFloat(ioffset.value);
data.supersample = parseFloat(isupersample.value);
data.mirrored = imirrored.checked ? -1 : 1;
history.replaceState(null, "", "?" + encodeURIComponent(JSON.stringify(data)))
}
@ -185,6 +198,10 @@ function initScene() {
ispeed.value = data.speed;
if (data.pulse !== undefined)
ipulse.value = data.pulse;
if (data.offset !== undefined)
ioffset.value = data.offset;
if (data.supersample !== undefined)
ioffset.supersample = data.supersample;
if (data.pulsespeed !== undefined)
ipulsespeed.value = data.pulsespeed;
if (data.mirrored !== undefined)
@ -199,6 +216,8 @@ function initScene() {
ispeed.oninput = updatevars;
ipulse.oninput = updatevars;
ipulsespeed.oninput = updatevars;
ioffset.oninput = updatevars;
isupersample.oninput = updatevars;
imirrored.oninput = updatevars;
updatevars();
@ -247,6 +266,8 @@ function initScene() {
progDraw.speed = gl.getUniformLocation(progDraw, "speed");
progDraw.pulse = gl.getUniformLocation(progDraw, "pulse");
progDraw.pulsespeed = gl.getUniformLocation(progDraw, "pulsespeed");
progDraw.offset = gl.getUniformLocation(progDraw, "offset");
progDraw.supersample = gl.getUniformLocation(progDraw, "aa");
progDraw.mirrored = gl.getUniformLocation(progDraw, "mirrored");
gl.useProgram(progDraw);
@ -295,6 +316,8 @@ function render(deltaMS) {
gl.uniform1f(progDraw.speed, data.speed);
gl.uniform1f(progDraw.pulse, data.pulse);
gl.uniform1f(progDraw.pulsespeed, data.pulsespeed);
gl.uniform1f(progDraw.offset, data.offset);
gl.uniform1f(progDraw.supersample, data.supersample);
gl.uniform1f(progDraw.mirrored, data.mirrored);
gl.drawElements( gl.TRIANGLES, bufObj.inx.len, gl.UNSIGNED_SHORT, 0 );