#include #define DISTORTION 80 typedef struct { int x; int y; int z; } _3DPoint; typedef struct { int x; int y; } _2DPoint; /* to join the corners of a cube */ int cube_lines [12] [2] = { {0,1} , {1,2} , {2,3} , {3,0} , {4,5} , {5,6} , {6,7} , {7,4}, {0,4} , {1,5} , {2,6} , {3,7} } ; /* ti 89 */ _2DPoint screen_center= { 80 , 50 }; LCD_BUFFER screen; int _ti89; void xexit(const char *msg) { LCD_restore(screen); if(msg) ST_helpMsg(msg); exit(1); } void draw_cube(_3DPoint cube[8], _3DPoint camera) { _2DPoint s_cube[8]; /* the cube in 2d */ _3DPoint tmp; short i,j; for (i=0 ; i < 8 ; i++) { tmp.x = cube[i].x - camera.x; tmp.y = cube[i].y - camera.y; tmp.z = cube[i].z - camera.z; /* cconvert the points in 2D */ if(tmp.z == 0) xexit("tmp.z == 0"); s_cube[i].x = screen_center.x + (DISTORTION * tmp.x )/ tmp.z ; s_cube[i].y = screen_center.y - (DISTORTION * tmp.y )/ tmp.z ; } /* draw the lines */ for (j=0 ; j < 12; j++) { DrawLine( s_cube[ cube_lines[j][0] ].x, s_cube[ cube_lines[j][0] ].y, \ s_cube[ cube_lines[j][1] ].x, s_cube[ cube_lines[j][1] ].y, \ A_NORMAL ); } } void _main(void) { LCD_save(screen); ClrScr(); _3DPoint cube [8] = { {-10,-10,-10},{10,-10,-10},{10,10,-10},{-10,10,-10}, {-10,-10,10}, {10,-10,10}, {10,10,10},{-10,10,10} }; _3DPoint camera = {0,0,40}; draw_cube(cube, camera); ngetchx(); ClrScr(); camera.x=2; camera.y=5; draw_cube(cube, camera); ngetchx(); ClrScr(); camera.x=-2; camera.y=-5; draw_cube(cube, camera); ngetchx(); ClrScr(); LCD_restore(screen); }