From 8a8f754041509e3aa7f92d3177fdcf4f5e17594e Mon Sep 17 00:00:00 2001 From: Jason Bou-Samra <154414066+bou-samra@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:42:57 +1000 Subject: [PATCH] bulk data dump --- 3D_Jason | Bin 0 -> 18256 bytes 3D_Jason.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 7 +++ 3 files changed, 179 insertions(+) create mode 100644 3D_Jason create mode 100644 3D_Jason.c create mode 100644 Makefile diff --git a/3D_Jason b/3D_Jason new file mode 100644 index 0000000000000000000000000000000000000000..13d6122d8d8592926c679154e8faa03303d016cd GIT binary patch literal 18256 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 literal 0 HcmV?d00001 diff --git a/3D_Jason.c b/3D_Jason.c new file mode 100644 index 0000000..3918724 --- /dev/null +++ b/3D_Jason.c @@ -0,0 +1,172 @@ +/**************************************************************************** + ** 3D_Jason.c - display a 3D rotating cube ** + ** Copyright (c) 31/12/2022 Jason Bou-Samra [Paragon] ** + ** ** + ** This program is free software: you can redistribute it and/or modify ** + ** it under the terms of the GNU General Public License as published by ** + ** the Free Software Foundation, either version 3 of the License, or ** + ** (at your option) any later version. ** + ** ** + ** This program is distributed in the hope that it will be useful, ** + ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** + ** GNU General Public License for more details. ** + ** ** + ** You should have received a copy of the GNU General Public License ** + ** along with this program. If not, see . ** + ****************************************************************************/ + +#include +#include +#include +#include + +int initSDL(void); +int shutdownSDL(void); +int rotate (void); +int draw (void); + +double x[8], y[8], z[8]; +double xt[8], yt[8], zt[8]; +double xu[8], yu[8], zu[8]; +double angle = 0.0; +bool quit = false; + +SDL_Window *window = NULL; +SDL_Renderer *s; +SDL_Event event; + +/* window paramaters */ +#define WIDTH 640 /* pixels */ +#define HEIGHT 512 /* pixels */ +#define DELAY 3000 /* milliseconds */ +#define TITLE "3Dcube" /* title */ +#define RAD 3.14159265/180 +#define SPEED 3 + +int main(void) +{ + initSDL(); + SDL_RenderSetScale(s, 2.0, 2.0); /* scale x2 */ + +while (quit==false){ + +while (SDL_PollEvent(&event)) { + if (event.type==SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {quit = true;} +} +if(quit) {break;} + + rotate(); + draw(); + +} + shutdownSDL(); +} + +/* rotation & projection routine */ +int rotate() +{ + +for (int i=7; i>=0; i--){ + +/* x angle (Roll) */ + xt[i]=x[i]; + yt[i]=y[i]*cos(RAD*angle)-z[i]*sin(RAD*angle); + zt[i]=y[i]*sin(RAD*angle)+z[i]*cos(RAD*angle); + +/* y angle (Pitch) */ + xu[i]=zt[i]*sin(RAD*angle)+xt[i]*cos(RAD*angle); + yu[i]=yt[i]; + zu[i]=xt[i]*-sin(RAD*angle)+zt[i]*cos(RAD*angle); + +/* z angle (Yaw) */ + xt[i]=xu[i]*cos(RAD*angle)-yu[i]*sin(RAD*angle); + yt[i]=xu[i]*sin(RAD*angle)+yu[i]*cos(RAD*angle); + zt[i]=zu[i]; + +/* 2d perspective projection */ +xt[i]=(xt[i]*200)/(zt[i]+800)+160; +yt[i]=(yt[i]*200)/(zt[i]+800)+128; +} + +angle = angle + SPEED; +} + +/* render cube */ + int draw() + { + SDL_SetRenderDrawColor(s, 0x00, 0x00, 0x00, 255); /* background */ + SDL_RenderClear(s); /* clear screen (black) */ + SDL_SetRenderDrawColor(s, 0x80, 0x00,0x80,255); /* pen */ + SDL_RenderDrawLine(s, xt[0], yt[0], xt[1], yt[1]); + SDL_RenderDrawLine(s, xt[1], yt[1], xt[2], yt[2]); + SDL_RenderDrawLine(s, xt[2], yt[2], xt[3], yt[3]); + SDL_RenderDrawLine(s, xt[3], yt[3], xt[0], yt[0]); + + SDL_RenderDrawLine(s, xt[4], yt[4], xt[5], yt[5]); + SDL_RenderDrawLine(s, xt[5], yt[5], xt[6], yt[6]); + SDL_RenderDrawLine(s, xt[6], yt[6], xt[7], yt[7]); + SDL_RenderDrawLine(s, xt[7], yt[7], xt[4], yt[4]); + + SDL_RenderDrawLine(s, xt[0], yt[0], xt[4], yt[4]); + SDL_RenderDrawLine(s, xt[1], yt[1], xt[5], yt[5]); + SDL_RenderDrawLine(s, xt[2], yt[2], xt[6], yt[6]); + SDL_RenderDrawLine(s, xt[3], yt[3], xt[7], yt[7]); + + SDL_RenderPresent(s); + } + +/* initialise SDL */ +int initSDL(){ + SDL_Init(SDL_INIT_EVERYTHING); + +/* new window */ + window = SDL_CreateWindow( + TITLE, /* title*/ + SDL_WINDOWPOS_UNDEFINED, /* x pos */ + SDL_WINDOWPOS_UNDEFINED, /* w pos */ + WIDTH, /* width */ + HEIGHT, /* height */ + 0); /* Additional flag(s) */ + + /* deal with errors */ + if (window == NULL) { + fprintf(stderr, "SDL window failed to initialise: %s\n", SDL_GetError()); + return 1; + } + +/* create renderer */ +s = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + +} + +/* shutdown routine */ +int shutdownSDL() +{ + +// SDL_Delay(DELAY); /* pause sdl sub-system */ + SDL_DestroyWindow(window); /* free memory */ + SDL_Quit(); /* shutdown entire sdl sub-systems */ + return 0; +} + +/* cube verticies */ +/* x component */ +double x[]={-80.0, 80.0, 80.0, -80.0, -80.0, 80.0, 80.0, -80.0 +}; + +/* y component */ +double y[]={80.0, 80.0, -80.0, -80.0, 80.0, 80.0, -80.0, -80.0 +}; + +/* z component */ +double z[]={80.0, 80.0, 80.0, 80.0, -80.0, -80.0, -80.0, -80.0 +}; + +/* perspective projection table */ +double ProjPos[]={ +}; + +/* message */ +char author[]={"3d vector graphics demo"}; +const char* text = "c version 1"; diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d5467ac --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +#! /bin/make +# :vim: set noexpandtab: + +CFLAGS = -lm `sdl2-config --cflags --libs` + +3D_Jason: 3D_Jason.c + $(CC) -o 3D_Jason 3D_Jason.c $(CFLAGS)