From: Dusty Newsgroups: comp.os.msdos.djgpp Subject: Whats wrong with this code?? Date: Thu, 04 Jun 1998 19:03:00 -0400 Organization: MindSpring Enterprises Lines: 179 Message-ID: <357727A4.A4DDD451@pipeline.com> NNTP-Posting-Host: user-38ldbq9.dialup.mindspring.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk A couple of days ago I started on my first 3d program in which it's only function was to convert eight 3d vertices to 2d coordinates, and connect them with lines in such a way that it formed a cube. I am using Allegro to provide the graphics functions like blitting, lines, ect. Sounds simple and straight forward right? Well it's been anything but simple and easy. My problem is that I can't get anything of the lines displayed. I know that the project_points() function works because I made a program that outputs the resulting numbers, and when graphed and connected make a nice cube. Could someone please help a beginner, and tell my what I am doing wrong. Thanks in advance. #include #include #include #include "allegro.h" #define SCREENW 640 #define SCREENH 480 #define FOCAL_DISTANCE 256 #define Xorigin SCREENW / 2 #define Yorigin SCREENH / 2 #define NUM_VERTS 7 #define NUM_SQR 3 typedef struct CUBE { int x,y,z; }CUBE; typedef struct SCREEN_POINTS { int x,y; } SCREEN_POINTS; CUBE points[7]; SCREEN_POINTS screenp[7]; void init() { points[0].x = 32; points[0].y = 32; points[0].z = 12; points[1].x = 32; points[1].y = 17; points[1].z = 12; points[2].x = 62; points[2].y = 17; points[2].z = 12; points[3].x = 62; points[3].y = 32; points[3].z = 12; points[4].x = 42; points[4].y = 42; points[4].z = 32; points[5].x = 42; points[5].y = 27; points[5].z = 32; points[6].x = 72; points[6].y = 27; points[6].z = 32; points[7].x = 72; points[7].y = 42; points[7].z = 32; } void project_points() { int c; init(); for(c=0; c<=NUM_VERTS; c++) { //if(!points[c].z) // points[c].z=1; screenp[c].x=FOCAL_DISTANCE * points[c].x / (points[c].z+Xorigin); screenp[c].y=FOCAL_DISTANCE * points[c].y / (points[c].z+Yorigin); } } void draw(BITMAP *buff) { int j; project_points(); for(j=0; j<=NUM_VERTS; j++) //all this stuff does is connect the //dots. { if(j=NUM_SQR) { line(buff, screenp[NUM_SQR].x, screenp[NUM_SQR].y, screenp[0].x,screenp[0].y,15); } if(jNUM_SQR) { if(j!=NUM_VERTS) line(buff, screenp[j].x, screenp[j].y, screenp[j+1].x, screenp[j+1].y,15); if(j=NUM_VERTS) line(buff, screenp[j].x, screenp[j].y, screenp[4].x, screenp[4].y,15); } } } BITMAP *bmp; int f; main() { allegro_init(); install_keyboard(); set_gfx_mode(GFX_AUTODETECT,SCREENW,SCREENH,0,0); set_pallete(desktop_pallete); bmp = create_bitmap(SCREENW,SCREENH); f=2; do { clear(bmp); draw(bmp); blit(bmp,screen,0,0,0,0,SCREENW,SCREENH); if (key[KEY_Y]) f=3; } while(f==2); //run forever allegro_exit(); }