From 6b593960b411a312d7fa2d7fa81b046a485bb4f4 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Sat, 18 Jan 2025 22:24:46 +0000 Subject: [PATCH] Add more configs and implement weird power map thing --- config.h | 31 +++++++++++++++++++++++++++++-- frag_shader.glsl | 18 ++++++++---------- main.c | 33 +++++++++++++++++++-------------- 3 files changed, 56 insertions(+), 26 deletions(-) diff --git a/config.h b/config.h index 4631e27..b1f3b35 100644 --- a/config.h +++ b/config.h @@ -44,7 +44,34 @@ //#define POWRATE 0.0001 //#define ZOOMRATE 0.0003 -// Complex power Mandelbrot +// Cool tendril stuff (complex power) +//#define SS 4 +//#define CPOW_DTHETA 0.000 +//#define MAXMAG 100.0 +//#define CENTRE_RE -0.84880415 +//#define CENTRE_IM 0.03921157 +//#define CPOW_START_RE 1.96550429 +//#define CPOW_START_IM 0.36985874 +//#define ZOOMRATE 0.01 + +// ?? +//#define SS 4 +//#define THING +//#define JULIA_C_RE -0.9999999506519784 +//#define JULIA_C_IM 3.141592601914583e-4 +//#define JULIA_DTHETA 0.00001 +//#define MAXMAG 100.0 +//#define STARTSCALE 4 +//#define ZOOMRATE 0.01 + +// Funky complex power julia set #define SS 4 -#define CPOW_DTHETA 0.01 +#define JULIA +#define JULIA_C_RE -0.010 +#define JULIA_C_IM 0.285 +#define JULIA_DTHETA 0.0001 +#define CPOW_START_RE 0.0 +#define CPOW_START_IM 2.0 +#define CPOW_DTHETA 0.0001 #define MAXMAG 100.0 +#define STARTSCALE 1 diff --git a/frag_shader.glsl b/frag_shader.glsl index c663c89..0e991c0 100644 --- a/frag_shader.glsl +++ b/frag_shader.glsl @@ -9,7 +9,7 @@ #define NCOLS 8 -#ifndef CPOW_DTHETA +#if !defined(CPOW_DTHETA) && !defined(THING) #define MAXMAG 2.0 #endif @@ -17,7 +17,7 @@ layout(location = 0) out vec4 out_colour; layout(push_constant) uniform Constants { vec2 img_size; -#ifdef JULIA +#if defined(JULIA) || defined(THING) vec2 julia; #endif vec2 centre; @@ -68,7 +68,6 @@ vec2 maptoz(vec2 xy) return params.scale * z + params.centre; } -#ifdef CPOW_DTHETA vec2 cmul(vec2 a, vec2 b) { return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x); @@ -89,16 +88,13 @@ vec2 cpow(vec2 z, vec2 p) if (z.x == 0.0 && z.y == 0.0) return vec2(0.0, 0.0); return cexp(cmul(p, cln(z))); } -#else + vec2 zpow(vec2 z, float p) { - float r = length(z); - float theta = atan(z.y, z.x); - float mag = pow(r, p); - float phi = p * theta; - return mag * vec2(cos(phi), sin(phi)); + float mag = pow(length(z), p); + float arg = p * atan(z.y, z.x); + return mag * vec2(cos(arg), sin(arg)); } -#endif int fractal(vec2 c) { #ifdef JULIA @@ -112,6 +108,8 @@ int fractal(vec2 c) { z = cpow(z, params.cpow) + c; #elif defined(POWRATE) z = zpow(z, params.zpow) + c; +#elif defined(THING) + z = cpow(z, c) + params.julia; #else z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c; #endif diff --git a/main.c b/main.c index eaef0f3..24484c4 100644 --- a/main.c +++ b/main.c @@ -31,9 +31,13 @@ #error "Cannot define CPOW_DTHETA and POWRATE simulataneously" #endif +#ifndef STARTSCALE +#define STARTSCALE 1.0 +#endif + typedef struct { float width, height; -#ifdef JULIA +#if defined(JULIA) || defined(THING) struct { float re, im; } julia; @@ -61,7 +65,7 @@ static const char *extensions[] = { // Initial parameters static params_t params = { -#ifdef JULIA +#if defined(JULIA) || defined(THING) .julia = { #ifdef JULIA_C_RE .re = JULIA_C_RE, @@ -82,12 +86,12 @@ static params_t params = { }, #endif #ifdef CPOW_DTHETA - .cpow = { .re = 2.0, .im = 0.0 }, + .cpow = { .re = CPOW_START_RE, .im = CPOW_START_IM }, #endif #ifdef POWRATE .zpow = 2.0, #endif - .scale = 1.0, + .scale = STARTSCALE, }; static void @@ -599,6 +603,7 @@ int main(void) vkCmdBeginRenderPass( cmd_buf, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); + // Send parameters vkCmdPushConstants( cmd_buf, pipeline_layout, VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(params), ¶ms); @@ -642,25 +647,25 @@ int main(void) assert(result == VK_SUCCESS); #ifdef JULIA_DTHETA - double complex julia = params.julia.re + I * params.julia.im; - julia *= julia_rotz; - params.julia.re = (float)creal(julia); - params.julia.im = (float)cimag(julia); + double complex julia = params.julia.re + I * params.julia.im; + julia *= julia_rotz; + params.julia.re = (float)creal(julia); + params.julia.im = (float)cimag(julia); #endif #ifdef ZOOMRATE - params.scale *= (1 - ZOOMRATE); + params.scale *= (1 - ZOOMRATE); #endif #ifdef CPOW_DTHETA - double complex cpow = params.cpow.re + I * params.cpow.im; - cpow *= cpow_rotz; - params.cpow.re = (float)creal(cpow); - params.cpow.im = (float)cimag(cpow); + double complex cpow = params.cpow.re + I * params.cpow.im; + cpow *= cpow_rotz; + params.cpow.re = (float)creal(cpow); + params.cpow.im = (float)cimag(cpow); #endif #ifdef POWRATE - params.zpow += POWRATE; + params.zpow += POWRATE; #endif }