From aae737d17d128a382f4408049c2b3d1d253169bc Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Sun, 7 Jan 2024 19:36:35 -0600 Subject: [PATCH] Slightly optimized cube. --- examples/cube/cube.c | 50 +++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/examples/cube/cube.c b/examples/cube/cube.c index d6b0170..9fd3d5b 100644 --- a/examples/cube/cube.c +++ b/examples/cube/cube.c @@ -97,10 +97,22 @@ int32_t SIN[] = { 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 68, 75, 81, 87, 93, 509, 510, 510, 511, 511, 511, 511, 511 }; +typedef struct lineS { + int16_t x1; + int16_t y1; + int16_t x2; + int16_t y2; +} lineT; + int32_t *COS = SIN + COS_OFF; +uint16_t width; +uint16_t height; +int32_t a = TO_FIX(4); +int32_t scale = TO_FIX(40); +lineT past[24][2]; -void draw_cube(int16_t t) { +void draw_cube(byte p, int16_t t) { static const int16_t edges[] = { 0, 1, 1, 3, 3, 2, 2, 0, @@ -128,18 +140,13 @@ void draw_cube(int16_t t) { int32_t cubeProjX[8]; int32_t cubeProjY[8]; int16_t i; + byte l; int16_t e1; int16_t e2; int16_t x1; int16_t y1; int16_t x2; int16_t y2; - uint16_t width; - uint16_t height; - int32_t a = TO_FIX(4); - int32_t scale = TO_FIX(40); - - bitmapGetResolution(&width, &height); for (i=0; i<8; ++i) { // Rotation around Y @@ -158,23 +165,34 @@ void draw_cube(int16_t t) { cubeProjY[i] = fix_div(fix_mul(a, cubeRotY[i]), cubeRotZ[i]); } + l = 0; for (i=0; i<24; i += 2) { e1 = edges[i]; e2 = edges[i + 1]; - x1 = TO_LONG(fix_mul(cubeProjX[e1], scale)) + (width >> 1); - y1 = TO_LONG(fix_mul(cubeProjY[e1], scale)) + (height >> 1); - x2 = TO_LONG(fix_mul(cubeProjX[e2], scale)) + (width >> 1); - y2 = TO_LONG(fix_mul(cubeProjY[e2], scale)) + (height >> 1); + x1 = TO_LONG(fix_mul(cubeProjX[e1], scale)) + width; + y1 = TO_LONG(fix_mul(cubeProjY[e1], scale)) + height; + x2 = TO_LONG(fix_mul(cubeProjX[e2], scale)) + width; + y2 = TO_LONG(fix_mul(cubeProjY[e2], scale)) + height; + past[l][p].x1 = x1; + past[l][p].y1 = y1; + past[l][p].x2 = x2; + past[l][p].y2 = y2; + l++; bitmapLine(x1, y1, x2, y2); } } int main(void) { - int16_t t = 0; - byte p = 0; + byte i; + int16_t t = 0; + byte p = 0; f256Init(); + bitmapGetResolution(&width, &height); + width = width >> 1; + height = height >> 1; + while(1) { if (p) { p = 0; @@ -186,9 +204,11 @@ int main(void) { bitmapShowPage(1); } bitmapSetColor(0); - bitmapClear(); + for (i=0; i<12; i++) { + bitmapLine(past[i][p].x1, past[i][p].y1, past[i][p].x2, past[i][p].y2); + } bitmapSetColor(255); - draw_cube(t); + draw_cube(p, t); t += 2; }