From f4e3b2a1f9ec36336e92dae11f6e6b6f8c330bbd Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Thu, 8 Jan 2026 23:35:38 -0800 Subject: [PATCH] this is the coolest thing I have done --- Makefile | 21 +++++ app | Bin 0 -> 16808 bytes main.c | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.o | Bin 0 -> 6560 bytes 4 files changed, 248 insertions(+) create mode 100644 Makefile create mode 100755 app create mode 100644 main.c create mode 100644 main.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5524bf5 --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +CC = gcc +CFLAGS = -Wall -Wextra -std=c17 `sdl2-config --cflags` +LDFLAGS = `sdl2-config --libs` -lm + +SRC = $(wildcard *.c) +OBJ = $(SRC:.c=.o) +TARGET = app + +all: $(TARGET) + +$(TARGET): $(OBJ) + $(CC) $(OBJ) -o $(TARGET) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +run: $(TARGET) + ./$(TARGET) + +clean: + rm -f $(OBJ) $(TARGET) diff --git a/app b/app new file mode 100755 index 0000000000000000000000000000000000000000..f8ece6109d24f5f5c92fcd41b63ec0101451747b GIT binary patch literal 16808 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 +#include +#include + +#define WINDOW_W 800 +#define WINDOW_H 800 + +#define BACKGROUND_R 20 +#define BACKGROUND_G 20 +#define BACKGROUND_B 20 +#define BACKGROUND_A 255 +#define RAINDROP_R 156 +#define RAINDROP_G 174 +#define RAINDROP_B 255 +#define RAINDROP_A 255 + +typedef struct { + float x; // -1 .. 1 + float y; // -1 .. 1 + float z; // -1 .. 1 +} VEC3; + +typedef struct { + float x; // 0 .. WINDOW_W + float y; // 0 .. WINDOW_H +} VEC2; + +VEC2 project(VEC3 v) +{ + return (VEC2) + { + x: v.x / v.z, + y: v.y / v.z, + }; +} + +VEC2 toScreenCoord(VEC2 v) +{ + // -1..1 -> 0..2 -> 0..1 -> 0..WINDOW_W/H + + return (VEC2) { + x: (v.x + 1) / 2 * WINDOW_W, + y: (1 - (v.y + 1) / 2) * WINDOW_H, + }; +} + +VEC3 rotate(VEC3 v, double angle) +{ + return (VEC3) { + x: v.x * cos(angle) - v.z * sin(angle), + // y: v.y * cos(angle) - v.x * sin(angle), + y: v.y, + z: v.x * sin(angle) + v.z * cos(angle), + }; +} + +VEC3 translate_z(VEC3 v) +{ + return (VEC3) { + v.x, + v.y, + v.z + 1, + }; +} + +int main(void) +{ + if (SDL_Init(SDL_INIT_VIDEO) != 0) + { + SDL_Log("Error initializing: %s", SDL_GetError()); + return 1; + } + + SDL_Window *window; + SDL_Renderer *renderer; + + window = SDL_CreateWindow( + "Cube", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + WINDOW_W, + WINDOW_H, + SDL_WINDOW_SHOWN + ); + + if (!window) + { + SDL_Log("Error creating window: %s", SDL_GetError()); + SDL_Quit(); + return 1; + } + + renderer = SDL_CreateRenderer( + window, + -1, + SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC + ); + + if (!renderer) + { + SDL_Log("Error creating renderer: %s", SDL_GetError()); + SDL_DestroyWindow(window); + SDL_Quit(); + return 1; + } + + int running; + SDL_Event event; + Uint32 last_time; + + double angle = 0; + + VEC3 vertecies[8] = { + {x: 0.25, y: 0.25, z: 0.25}, + {x: -0.25, y: 0.25, z: 0.25}, + {x: -0.25, y: -0.25, z: 0.25}, + {x: 0.25, y: -0.25, z: 0.25}, + + {x: 0.25, y: 0.25, z: -0.25}, + {x: -0.25, y: 0.25, z: -0.25}, + {x: -0.25, y: -0.25, z: -0.25}, + {x: 0.25, y: -0.25, z: -0.25}, + }; + + int faces[6][4] = { + {0, 1, 2, 3}, // front + {4, 5, 6, 7}, // back + {0, 1, 5, 4}, // top + {2, 3, 7, 6}, // bottom + }; + + last_time = SDL_GetTicks(); + running = 1; + + while (running) + { + while (SDL_PollEvent(&event)) + { + if (event.type == SDL_QUIT) + { + running = 0; + } + } + + // delta time + Uint32 now; + float delta; + + now = SDL_GetTicks(); + delta = (now - last_time) / 1000.0f; // seconds + last_time = now; + + angle += 3.141592654 * delta; + + // clear scren + SDL_SetRenderDrawColor( + renderer, + BACKGROUND_R, + BACKGROUND_G, + BACKGROUND_B, + BACKGROUND_A + ); + SDL_RenderClear(renderer); + + // render + + SDL_SetRenderDrawColor( + renderer, + RAINDROP_R, + RAINDROP_G, + RAINDROP_B, + RAINDROP_A + ); + + // Draw faces + // SDL_RenderDrawLine(renderer, x1, y1, x2, y2) + for (int i = 0; i < 6; i++) + { + for (int j = 0; j < 4; j++) + { + VEC3 ao = vertecies[faces[i][j]]; + VEC3 bo = vertecies[faces[i][(j + 1) % 4]]; + + ao = rotate(ao, angle); + bo = rotate(bo, angle); + + ao = translate_z(ao); + bo = translate_z(bo); + + VEC2 a = project(ao); + VEC2 b = project(bo); + + a = toScreenCoord(a); + b = toScreenCoord(b); + + SDL_RenderDrawLine(renderer, a.x, a.y, b.x, b.y); + } + } + + // for (int i = 0; i < sizeof(vertecies) / sizeof(vertecies[0]); i++) + // { + // VEC3 v3 = vertecies[i]; + // v3 = rotate(v3, angle); + // v3 = translate_z(v3); + + // VEC2 v2 = project(v3); + // v2 = toScreenCoord(v2); + + // SDL_Rect point_rect; + // // Adjust x and y to center the point visually, if desired + // point_rect.x = v2.x - 10 / 2; + // point_rect.y = v2.y - 10 / 2; + // point_rect.w = 10; + // point_rect.h = 10; + + // // Draw the filled rectangle + // SDL_RenderFillRect(renderer, &point_rect); + // } + + SDL_RenderPresent(renderer); + } + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + return 0; +} diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..08ce7271e76017d8b6c8c96efc9486e0071fee3c GIT binary patch literal 6560 zcmbtYe{38_6`r&6!=XvnSD>^iYTZ8?IV8CzQBfc&se`>_k?i6ov6@6lu3aHZxR~#o z-8oOjw-J;l?e2TueDA%P*|#%u_q5&km5NYEC<%$JV!=|V5UsZ_=yg)96RX5Z(chZ2A_WYu0dWIc7oImz#*#{egy8ix*wRap% z?ts&4kH~>duq)Hn9(w?|JwWCdnEwEC0!T;yVrKs|h6MV)5fJ}5ZSDO4NjjzLD3E!$ z&ce03yldF*SKWCB%p#aArxzzV%_PVqll%!uFqz@~CD+nO%DaZ`(~CyZw>U}Pw6)tt zroDNvIf8H}YlCUR`|*y$_8goD*>iY5a>6cqmEg~_KE*AV?CPdb2H=dV`nZTVEr=0j z)s&0q)t2+k$ySv6g&MpM`BJj^%xbAPxi_3sGMbYs4Dx+Rc#t2*wT@*%Y&*LI>bAj} zN+Hhjb`HgS|9RdP9Q{!CxYN@;E;`rVEVLGX72;zK#?Rp?&dX0ES5UFW5Nk|yZoXM8 zI-}o`qQ(6c283eCv+AZ6W-FZCfE>F0fMI{Zupcz+I>T--Y{#%04ZGQ}cNz9>!`^4u zt%luh*hdUIZrDc+J7d^ghJE5j+dipHp8bq&d`mZ;b56Zb{P+C4tf#Xp@p7HqA7-4N z6|$p1Sz3kc7_^WKMEg<&VeP80X(77BaIKnw)_o@2I<~y(YPNTi{ z=vsRgD|j~FbqgzP#<4z^|NEUzZrFMIZ$0B7XT`9Bhp{em36SeD_XU2aMMOYya4ut= zYQjS0ebQJgvAk9{O=0oiI%`j%#K*P`&Z9GDKZV;l-p=!;`bC1S`(%2YdzIuf8o6Lk z!V=dW!2}g-Ih<>oq4(Mo>HkNvG`{>`fI;sMz~VmaouhD>}KN6UqZ}hQ`q{;jAw* zVsEvRd*Ko&y>(T&?3+~ViBrv?Tybdjo}r1mL&H7qRjwI^^T!E1r~>DqU`99*S!Tmb zo?@~?*mD;)8MQSzIiD1kJyMR0Mn?tW>u~A*b||i z?ukn4`3oP-&-d7quqKyU&;JCLUXwlDbHd90V(vzC@ygA*ynK;&h@DC$Q#G+fEE9{y zW5;8O!&_?ZON;u>gRbA!mU5#R;5El$iT30%+3b0hT2gMJ-A%bE*~X|RAHuB;wc7xF zD=utf$Ds?+Z133huX|V2iS70ETWV?>+=H=bqGsc!$fn4K^&1~p+wLCRxT$mF8Xpq; z04bs4J4C3fI&{~{`7UO zN+Hh;H}Ek;aht}Ma{#Q`$CWL|4(x6p{|HZt95bHx;i8WzYXFqP*8^wX7#DtsoEtp9 zh>Q5^J}&13*j8NS;%pDVcLm^lSLNb#1mI5u;JE<&#Q=OD0RMFW{@VcjF9G;e0A7JY zDK}ox5sf7xZQ^Ju`E|D~BQnXI_zc}deKMJ97pY_>nsG&2GA+`vgvg|#iF6#uf#cFo z>}+T}@Kt>4QrYfi5Jx&Tm`cXEa>rzoFqeKjeRZjIZNsHC&JLT^~2+?M;n;i`JiaHJs;7)z7O&9EDG6 zd>+gceg|I?gw0exNdv+kJ{0!6B_sTjD|O9IM*=6-=pFBy78EX>+41hd?|ci zyp+`Wio(_Tu+_lT`S7HHtMgvJfvfYLh@_wF$V3m~nMrxiBT7rT@n|IDc4b7QJ(`J% z$iZ}4L{dr5XiIi`1`)V*`ej#& zSLbUne_mCCzs)LB+y#yAw627BN*6aPNR?lopMXwZzdVH6msb0@zx=}T1<*MB2?8B?zfnBp}*e-{l+RR0ykb3XkyD8PT#a=?&U?@_v|{;TJg(W3Mc2}-l? zuVd6r?xQ|t_FwrA8Uf7y^Y==*_jgkM`7eYTKf6O;<*(i!`(x$?B&v8wg6#GiX)=%L j&uKQ_9U#%l!vf@XW59+fxCWH-pY{76l~ERMrvHBcA=W>e literal 0 HcmV?d00001