Slightly optimized cube.

This commit is contained in:
Scott Duensing 2024-01-07 19:36:35 -06:00
parent f642221028
commit aae737d17d

View file

@ -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;
}