From 1a92b6864400667bc7377050a0da8e13bd8ec86e Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Sun, 10 Apr 2022 01:16:14 +0200 Subject: [PATCH] Added Fire effect / Julia Fractal Explorer / Mandelbrot Zoomer --- Demo.layout | 17 +- assets-cg/fontmatrix.png | Bin 897 -> 19722 bytes src/fixed.h | 85 +++++++ src/main.c | 469 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 534 insertions(+), 37 deletions(-) create mode 100644 src/fixed.h diff --git a/Demo.layout b/Demo.layout index 7197ac5..cd7d898 100644 --- a/Demo.layout +++ b/Demo.layout @@ -2,19 +2,22 @@ - + + + + + + + + + - + - - - - - diff --git a/assets-cg/fontmatrix.png b/assets-cg/fontmatrix.png index fcd8d8fe593a2bb9eaee90aff45a54e7ec4e6c25..b41004397857936af1981e66fe84e6bb1d619379 100644 GIT binary patch literal 19722 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

SumfL1Zd^-Jm! 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 N002ovPDHLkV1lK4w`TwV diff --git a/src/fixed.h b/src/fixed.h new file mode 100644 index 0000000..cc8ea2a --- /dev/null +++ b/src/fixed.h @@ -0,0 +1,85 @@ +//--- +// fixed: 48:16 fixed-point arithmetic +//--- +#pragma once +#include + +typedef int64_t fixed_t; +/* Standard arithmetic. */ + +static inline fixed_t fmul(fixed_t left, fixed_t right) +{ + /* Generally optimized by the compiler to use dmuls.l and xtrct */ + int64_t p = (int64_t)left * (int64_t)right; + return (int32_t)(p >> 16); +} + +static inline fixed_t fdiv(fixed_t left, fixed_t right) +{ + /* Pretty slow */ + int64_t d = (int64_t)left << 16; + return d / right; +} + +#define fix(x) ((int)((x) * 65536)) + +static inline fixed_t fixdouble(double constant) +{ + return (fixed_t)(constant * 65536); +} + +static inline fixed_t fixfloat(float constant) +{ + return (fixed_t)(constant * 65536); +} + +static inline fixed_t fdec(fixed_t f) +{ + return f & 0xffff; +} + +static inline int ffloor(fixed_t f) +{ + return f >> 16; +} + +static inline int fceil(fixed_t f) +{ + return (f + 0xffff) >> 16; +} + +static inline int fround(fixed_t f) +{ + return (f + 0x8000) >> 16; +} + +static inline float f2float(fixed_t f) +{ + return (float)f / 65536; +} + +static inline double f2double(fixed_t f) +{ + return (double)f / 65536; +} + +static inline double f2int(fixed_t f) +{ + return (int)f / 65536; +} + +static inline fixed_t feasein(fixed_t x) +{ + return fmul(x, x); +} + +static inline fixed_t fease(fixed_t x) +{ + if(x <= fix(0.5)) { + return 2 * fmul(x, x); + } + else { + x = fix(1) - x; + return fix(1) - 2 * fmul(x, x); + } +} diff --git a/src/main.c b/src/main.c index 4b0403a..529370d 100644 --- a/src/main.c +++ b/src/main.c @@ -7,11 +7,14 @@ #include #include +#include "fixed.h" + #define MAXHEIGHT 200 bool stop = false; uint8_t moduleToRun = 1; +uint8_t pagevisible=0; size_t image_size_profile(int profile, int width, int height) @@ -585,23 +588,23 @@ extern font_t matrix; typedef struct { int x; - int y; - int speed; - int len; - char str[32]; + int y; + int speed; + int len; + char str[32]; } STRIP; static STRIP strips[NUMBER_OF_STRIPS]; void init_strip(STRIP* strip ) { - strip->len = 5 + rand() % 28; - strip->x = rand() % 45; - strip->y = -1*strip->len*CHAR_HEIGHT; - strip->speed = 1+rand() % 5; + strip->len = 5 + rand() % 28; + strip->x = rand() % 45; + strip->y = -1*strip->len*CHAR_HEIGHT; + strip->speed = 1+rand() % 5; - for( int j=0; j< strips->len; j++ ) - strip->str[j] = '!' + rand() % 96; + for( int j=0; j< strips->len; j++ ) + strip->str[j] = '!' + rand() % 96; } @@ -615,21 +618,18 @@ void init_module6() void run_module6( void ) { - for( int k=0; k< NUMBER_OF_STRIPS; k++) { strips[k].y += strips[k].speed; } - dfont(&matrix); - for( int k=0; k< NUMBER_OF_STRIPS; k++) { for( int j=0; j< strips[k].len; j++ ) if (strips[k].y - j*CHAR_HEIGHT<=200-CHAR_HEIGHT) { if(j==0) dprint( strips[k].x*CHAR_WIDTH, strips[k].y - j*CHAR_HEIGHT, C_WHITE, "%c", strips[k].str[j] ); - else if(j==0) dprint( strips[k].x*CHAR_WIDTH, strips[k].y - j*CHAR_HEIGHT, C_RGB(150,255,150) , "%c", strips[k].str[j] ); + else if(j==0) dprint( strips[k].x*CHAR_WIDTH, strips[k].y - j*CHAR_HEIGHT, C_RGB(150,255,150), "%c", strips[k].str[j] ); else if(j==0) dprint( strips[k].x*CHAR_WIDTH, strips[k].y - j*CHAR_HEIGHT, C_RGB(50,255,50), "%c", strips[k].str[j] ); else dprint( strips[k].x*CHAR_WIDTH, strips[k].y - j*CHAR_HEIGHT, C_GREEN, "%c", strips[k].str[j] ); } @@ -638,11 +638,377 @@ void run_module6( void ) init_strip( strips + k ); } +} +/********************************\ + * FIRE EFFECT - MODULE 7 * + * Specific data and structures * +\********************************/ + +void init_module7() +{ + for(int i=0; idata, palette, palette_size); } +void run_module7( void ) +{ + uint8_t* image = screen->data; + uint16_t temp; + uint8_t index; + int i,j; + + j = DWIDTH * (MAXHEIGHT- 1); + for (i = 0; i < DWIDTH - 1; i++) + { + int random = 1 + rand()%16; + if (random > 9) + imagedata[j + i] = 255; + else + imagedata[j + i] = 0; + } + + for (index = 0; index < 60 ; ++index) + { + for (i = 0; i < DWIDTH - 1; ++i) + { + if (i == 0) + { + temp = imagedata[j]; + temp += imagedata[j + 1]; + temp += imagedata[j - DWIDTH]; + temp /=3; + } + else if (i == DWIDTH - 1) + { + temp = imagedata[j + i]; + temp += imagedata[j - DWIDTH + i]; + temp += imagedata[j + i - 1]; + temp /= 3; + } + else + { + temp = imagedata[j + i]; + temp += imagedata[j + i + 1]; + temp += imagedata[j + i - 1]; + temp += imagedata[j - DWIDTH + i]; + temp >>= 2; + } + if (temp > 1) + temp -= 1; + + imagedata[j - DWIDTH + i] = temp; + } + j -= DWIDTH; + } + + image += palette_size + (DWIDTH * MAXHEIGHT); + + for (i = MAXHEIGHT - 3; i >= 100; --i) + { + for (j = DWIDTH - 1; j >= 0; --j) + { + *image= imagedata[i * DWIDTH + j]; + image--; + } + } + + void* pos = screen->data; + + pos+=palette_size; + memcpy(pos, imagedata, DWIDTH*MAXHEIGHT); + + dimage(0,0,screen); + +} + + + +/********************************\ + * JULIA FRACTAL SET - MODULE 8 * + * Specific data and structures * +\********************************/ + +int PIXELZOOM = 2; +int SPEED_UP = 1; +int SCR_WID_PIXEL; +int SCR_HEI_PIXEL; +int MAX_ITERATION; +fixed_t cr, ci; +fixed_t xmin, xmax, ymin, ymax; + +float rit = -0.80f; +float iit = -1.0f; +float si = 1.0; +float sr = 1.0; + + +void init_module8() +{ + PIXELZOOM = 2; + SPEED_UP = 1; + SCR_WID_PIXEL = DWIDTH/PIXELZOOM; + SCR_HEI_PIXEL = MAXHEIGHT/PIXELZOOM; + MAX_ITERATION = 256/SPEED_UP; +} + +void draw_Julia( float xmi, float ymi, float xma, float yma, float r, float i ) +{ + fixed_t zr, zi; + int u; + int maxiter = MAX_ITERATION; + fixed_t tmp,zr2,zi2; + fixed_t xinc, yinc, fi, fj; + + cr=fix(r); + ci=fix(i); + + xmin = fix(xmi); + xmax = fix(xma); + ymin = fix(ymi); + ymax = fix(yma); + + xinc = fdiv(xmax-xmin,fix(SCR_WID_PIXEL)); + yinc = fdiv(ymax-ymin,fix(SCR_HEI_PIXEL)); + + + for(int j=0; j<=SCR_HEI_PIXEL/2; j++) + { + fj=fix(j); + for(int i=0; i<=SCR_WID_PIXEL; i++) + { + fi=fix(i); + zr=xmin+fmul(fi,xinc); + zi=ymax-fmul(fj,yinc); + zi2=fmul(zi,zi); + zr2=fmul(zr,zr); + u=0; + + while(((zr2+zi2)1.0) si*=-1.0f; + + //rit += 0.01*sr; + //if (rit<-0.8 || rit>0.8) sr*=-1.0f; + + draw_Julia( -1.98f, -1.0f, 1.98f, 1.0f, rit, iit ); +} + + +/********************************\ + * MANDELBROT SET - MODULE 9 * + * Specific data and structures * +\********************************/ + +float zoomfactor = 1.0f; +float sens = 1.0f; + +void init_module9() +{ + + zoomfactor = 1.0f; + sens = 1.0f; + PIXELZOOM = 2; + SPEED_UP = 3; + SCR_WID_PIXEL = DWIDTH/PIXELZOOM; + SCR_HEI_PIXEL = MAXHEIGHT/PIXELZOOM; + MAX_ITERATION = 256/SPEED_UP; +} + +void draw_Mandelbrot( float xmi, float ymi, float xma, float yma) +{ + int u; + int maxiter = MAX_ITERATION; + fixed_t tmp, xinc, yinc, fi, fj, x, y, x2, y2, x0, y0,w ; + + xmin = fix(xmi); + xmax = fix(xma); + ymin = fix(ymi); + ymax = fix(yma); + + xinc = fdiv(xmax-xmin,fix(SCR_WID_PIXEL)); + yinc = fdiv(ymax-ymin,fix(SCR_HEI_PIXEL)); + + + for(int j=0; j<=SCR_HEI_PIXEL; j++) + { + fj=fix(j); + for(int i=0; i<=SCR_WID_PIXEL; i++) + { + + fi=fix(i); + x0=xmin+fmul(fi, xinc); + y0=ymax-fmul(fj, yinc); + + x = fix(0); + y = fix(0); + w = fix(0); + x2 = fmul(x, x); + y2 = fmul(y, y); + u=0; + + while((x2+y2<=fix(4)) && (u0) zoomfactor*=1.2f; + else zoomfactor/=1.2f; + + if (zoomfactor==100 || zoomfactor==1 ) sens*=-1; +} + + static void get_minimum_inputs( void ) { @@ -654,41 +1020,69 @@ static void get_minimum_inputs( void ) if(keydown(KEY_EXIT)) stop=true; - if(keydown(KEY_F1)) + if(pagevisible==0 && keydown(KEY_F1)) { init_module1(); moduleToRun = 1; } - if(keydown(KEY_F2)) + if(pagevisible==0 && keydown(KEY_F2)) { init_module2(); moduleToRun = 2; } - if(keydown(KEY_F3)) + if(pagevisible==0 && keydown(KEY_F3)) { init_module3(); moduleToRun = 3; } - if(keydown(KEY_F4)) + if(pagevisible==0 && keydown(KEY_F4)) { init_module4(); moduleToRun = 4; } - if(keydown(KEY_F5)) + if(pagevisible==0 && keydown(KEY_F5)) { init_module5(); moduleToRun = 5; } - if(keydown(KEY_F6)) + if(pagevisible==0 && keydown(KEY_F6)) + { + pagevisible=1; + } + + if(pagevisible==1 && keydown(KEY_F1)) + { + pagevisible=0; + } + + if(pagevisible==1 && keydown(KEY_F2)) { init_module6(); moduleToRun = 6; } + + if(pagevisible==1 && keydown(KEY_F3)) + { + init_module7(); + moduleToRun = 7; + } + + if(pagevisible==1 && keydown(KEY_F4)) + { + init_module8(); + moduleToRun = 8; + } + + if(pagevisible==1 && keydown(KEY_F5)) + { + init_module9(); + moduleToRun = 9; + } } @@ -696,11 +1090,9 @@ static void get_minimum_inputs( void ) int main(void) { + srand( rtc_ticks() ); - - - size_t size = image_size_profile( 2, DWIDTH, MAXHEIGHT); screen = malloc( size ); screen->profile = 2; @@ -709,9 +1101,11 @@ int main(void) screen->height = MAXHEIGHT; + + init_module1(); - + dfont(&matrix); while(!stop) { @@ -723,13 +1117,28 @@ int main(void) else if (moduleToRun==4) run_module4(); else if (moduleToRun==5) run_module5(); else if (moduleToRun==6) run_module6(); + else if (moduleToRun==7) run_module7(); + else if (moduleToRun==8) run_module8(); + else if (moduleToRun==9) run_module9(); - dprint_opt(33, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "PLASMA" ); - dprint_opt(99, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "BLOBS" ); - dprint_opt(165, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "LENS" ); - dprint_opt(231, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "STARS" ); - dprint_opt(297, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "RAIN" ); - dprint_opt(363, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "MATRIX" ); + if (pagevisible==0) + { + dprint_opt(33, 212, moduleToRun==1?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "PLASMA" ); + dprint_opt(99, 212, moduleToRun==2?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "BLOBS" ); + dprint_opt(165, 212, moduleToRun==3?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "LENS" ); + dprint_opt(231, 212, moduleToRun==4?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "STARS" ); + dprint_opt(297, 212, moduleToRun==5?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "RAIN" ); + dprint_opt(363, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "%c%c%c",'!'+31,'!'+31,'!'+31 ); + } + else if (pagevisible==1) + { + dprint_opt(33, 212, C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "%c%c%c",'!'-1,'!'-1,'!'-1 ); + dprint_opt(99, 212, moduleToRun==6?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "MATRIX" ); + dprint_opt(165, 212, moduleToRun==7?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "FIRE" ); + dprint_opt(231, 212, moduleToRun==8?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "JULIA" ); + dprint_opt(297, 212, moduleToRun==9?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "MANDEL" ); + dprint_opt(363, 212, moduleToRun==10?C_RGB(255,0,0):C_RGB(255,255,255), C_NONE, DTEXT_CENTER, DTEXT_CENTER, "%c%c%c",'!'+63,'!'+63,'!'+63 ); + } dupdate();