int main() { int exit_flag = 0, i; VERTEX cube[8]; cube[0].local = (_3D) { -10.0, -10.0, 0.0 }; cube[1].local = (_3D) { 10.0, -10.0, 0.0 }; cube[2].local = (_3D) { 10.0, 10.0, 0.0 }; cube[3].local = (_3D) { -10.0, 10.0, -10.0 }; cube[4].local = (_3D) { -10.0, -10.0, 10.0 }; cube[5].local = (_3D) { 10.0, -10.0, 10.0 }; cube[6].local = (_3D) { 10.0, 10.0, 10.0 }; cube[7].local = (_3D) { -10.0, 10.0, 10.0 }; _3D world_pos = {0.0, 0.0, 100.0}; init(); printf("D1:=%f;\nD2:=%f;\nD3:=%f;\nD4:=%f;\n", dist_3d(cube[0].local, cube[1].local), dist_3d(cube[1].local, cube[2].local), dist_3d(cube[2].local, cube[3].local), dist_3d(cube[3].local, cube[0].local)); readkey(); int xang, yang, zang; while(!exit_flag) { rest(10); xang = 0; yang = 0; zang = 0; if(keypressed()) { if(key[KEY_ESC]) { exit_flag = 1; } if(key[KEY_A]) { world_pos.x -= 1.0; } if(key[KEY_D]) { world_pos.x += 1.0; } if(key[KEY_W]) { world_pos.z += 3.0; } if(key[KEY_S]) { world_pos.z -= 3.0; } if(key[KEY_UP]) { xang = 3; } if(key[KEY_DOWN]) { xang = -3; } if(key[KEY_RIGHT]) { yang = 3; } if(key[KEY_LEFT]) { yang = -3; } } clear_to_color(buffer, 0); for(i = 0; i < 8; i++) { rotate_vertex(&cube[i], xang, yang, zang); project_vertex(&cube[i], world_pos); } /* printf("%f, %f, %f\n", dist_3d(cube[0].local, cube[1].local), dist_3d(cube[1].local, cube[2].local), dist_3d(cube[2].local, cube[0].local)); */ printf("Sx1:=%f;\nSy1:=%f;\nSx2:=%f;\nSy2:=%f;\nSx3:=%f;\nSy3:=%f;\nSx4:=%f;\nSy4:=%f;\n", cube[0].screen[0].x, cube[0].screen[0].y, cube[1].screen[0].x, cube[1].screen[0].y, cube[2].screen[0].x, cube[2].screen[0].y, cube[3].screen[0].x, cube[3].screen[0].y); printf("t = %f\n\n\n\n\n\n", (cube[0].local.x + world_pos.x) / cube[0].screen[0].x); /*printf("{%f %f %f}\n", cube[0].local.x + world_pos.x, cube[0].local.y + world_pos.y, cube[0].local.z + world_pos.z); */ _2d_line(cube[0].screen[0], cube[1].screen[0], RED); _2d_line(cube[1].screen[0], cube[2].screen[0], RED); _2d_line(cube[2].screen[0], cube[3].screen[0], RED); _2d_line(cube[3].screen[0], cube[0].screen[0], RED); /* _2d_line(cube[4].screen[0], cube[5].screen[0], RED); _2d_line(cube[5].screen[0], cube[6].screen[0], RED); _2d_line(cube[6].screen[0], cube[7].screen[0], RED); _2d_line(cube[7].screen[0], cube[4].screen[0], RED); _2d_line(cube[0].screen[0], cube[4].screen[0], RED); _2d_line(cube[1].screen[0], cube[5].screen[0], RED); _2d_line(cube[2].screen[0], cube[6].screen[0], RED); _2d_line(cube[3].screen[0], cube[7].screen[0], RED); */ /* _2d_line(cube[0].screen[1], cube[1].screen[1], BLUE); _2d_line(cube[1].screen[1], cube[2].screen[1], BLUE); _2d_line(cube[2].screen[1], cube[3].screen[1], BLUE); _2d_line(cube[3].screen[1], cube[0].screen[1], BLUE); _2d_line(cube[4].screen[1], cube[5].screen[1], BLUE); _2d_line(cube[5].screen[1], cube[6].screen[1], BLUE); _2d_line(cube[6].screen[1], cube[7].screen[1], BLUE); _2d_line(cube[7].screen[1], cube[4].screen[1], BLUE); _2d_line(cube[0].screen[1], cube[4].screen[1], BLUE); _2d_line(cube[1].screen[1], cube[5].screen[1], BLUE); _2d_line(cube[2].screen[1], cube[6].screen[1], BLUE); _2d_line(cube[3].screen[1], cube[7].screen[1], BLUE); */ blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); } destroy_bitmap(buffer); return 0; }
int main() { int exit_flag = 0, i; VERTEX cube[8]; cube[0].local = (_3D){-10.0, -10.0, -10.0}; cube[1].local = (_3D){10.0, -10.0, -10.0}; cube[2].local = (_3D){10.0, 10.0, -10.0}; cube[3].local = (_3D){-10.0, 10.0, -10.0}; cube[4].local = (_3D){-10.0, -10.0, 10.0}; cube[5].local = (_3D){10.0, -10.0, 10.0}; cube[6].local = (_3D){10.0, 10.0, 10.0}; cube[7].local = (_3D){-10.0, 10.0, 10.0}; _3D world_pos = {0.0, 0.0, 100.0}; init(); while(!exit_flag) { rest(10); if(keypressed()) { if(key[KEY_ESC]) { exit_flag = 1; } if(key[KEY_LEFT]) { world_pos.x -= 1.0; } if(key[KEY_RIGHT]) { world_pos.x += 1.0; } if(key[KEY_UP]) { world_pos.z += 3.0; } if(key[KEY_DOWN]) { world_pos.z -= 3.0; } } clear_to_color(buffer, 0); for(i = 0; i < 8; i++) { rotate_vertex(&cube[i], 1, 2, 3); project_vertex(&cube[i], world_pos); } _2d_line(cube[0].screen[0], cube[1].screen[0], RED); _2d_line(cube[1].screen[0], cube[2].screen[0], RED); _2d_line(cube[2].screen[0], cube[3].screen[0], RED); _2d_line(cube[3].screen[0], cube[0].screen[0], RED); _2d_line(cube[4].screen[0], cube[5].screen[0], RED); _2d_line(cube[5].screen[0], cube[6].screen[0], RED); _2d_line(cube[6].screen[0], cube[7].screen[0], RED); _2d_line(cube[7].screen[0], cube[4].screen[0], RED); _2d_line(cube[0].screen[0], cube[4].screen[0], RED); _2d_line(cube[1].screen[0], cube[5].screen[0], RED); _2d_line(cube[2].screen[0], cube[6].screen[0], RED); _2d_line(cube[3].screen[0], cube[7].screen[0], RED); _2d_line(cube[0].screen[1], cube[1].screen[1], BLUE); _2d_line(cube[1].screen[1], cube[2].screen[1], BLUE); _2d_line(cube[2].screen[1], cube[3].screen[1], BLUE); _2d_line(cube[3].screen[1], cube[0].screen[1], BLUE); _2d_line(cube[4].screen[1], cube[5].screen[1], BLUE); _2d_line(cube[5].screen[1], cube[6].screen[1], BLUE); _2d_line(cube[6].screen[1], cube[7].screen[1], BLUE); _2d_line(cube[7].screen[1], cube[4].screen[1], BLUE); _2d_line(cube[0].screen[1], cube[4].screen[1], BLUE); _2d_line(cube[1].screen[1], cube[5].screen[1], BLUE); _2d_line(cube[2].screen[1], cube[6].screen[1], BLUE); _2d_line(cube[3].screen[1], cube[7].screen[1], BLUE); blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); } destroy_bitmap(buffer); return 0; }
//############################################################################ inline LaserBoy_3D_double rotate_vertex_on_coordinates(LaserBoy_3D_double p1, LaserBoy_3D_double p2, LaserBoy_3D_double a) { return rotate_vertex(p1 - p2, a) + p2; }