home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 15
/
CD_ASCQ_15_070894.iso
/
news
/
sorcpak
/
fpoly256
/
demox3d.c
next >
Wrap
C/C++ Source or Header
|
1992-01-27
|
4KB
|
234 lines
#include <bios.h>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
#include "fx3dkit.h"
/****************** TEST/DEMO SOFTWARE ******************/
/* defined keystrokes for the program */
enum key{ null=0,
F1,
F2,
F3,
F4,
home,
end,
up_arrow,
down_arrow,
left_arrow,
right_arrow,
esc,
enter,
backspace,
plus,
minus,
};
/* GET KEY COMMAND */
enum key getkey()
{
int c;
if (!kbhit()) return(null); /* null if no key hit */
c = (int) getch(); /* get key code */
if (c) /* nonzero key code */
{
switch(c) /* return proper name */
{
case 27: return(esc);
case 13: return(enter);
case 8: return(backspace);
case '+': return(plus);
case '-': return(minus);
default: return(c); /* ASCII if not command */
}
}
c = (int) getch(); /* zero code: get second byte */
switch(c) /* return proper name */
{
case 59: return(F1);
case 60: return(F2);
case 61: return(F3);
case 62: return(F4);
case 71: return(home);
case 79: return(end);
case 72: return(up_arrow);
case 80: return(down_arrow);
case 75: return(left_arrow);
case 77: return(right_arrow);
default: return(c); /* ASCII if not command */
}
}
void dummy(int a, int b, int c, int d, int e)
{
return;
}
#define INC 4 /* number degrees per step for THING demo */
main()
{
long btime;
float mtime;
int i,j,k;
int x[4],y[4];
char c;
lpoints l;
set_gmode();
set_vidpage(0,0);
set_drawpage(0);
goto speedtri; /* test tri/quad/line time */
/* goto grest; /* test line drawing and clipping */
demo:
j=0;
k=180;
i = 0;
set_drawpage(2);
clr_page(2,2);
setup_hdwe(PUT);
poly3(20,20,160,60,160,140,4);
poly3(300,180,160,60,160,140,3);
c=0;
doit:
set_vidpage(i^1,1);
copy_page(2,i);
/* clr_page(i,0); */
set_drawpage(i);
i = i^1;
setup_hdwe(PUT);
draw_thing(j,k);
reset_hdwe();
if(getkey()==esc)exit(0);
if(c==1)
{
j+=INC;
k-=INC;
if(j>=90) c = c^1;
}
if(c==0)
{
j-=INC;
k+=INC;
if(j<=-90)c = c^1;
}
goto doit;
grest:
t_clip = l_clip = 25;
b_clip = r_clip = 175;
set_drawpage(2);
clr_page(2,0);
setup_hdwe(PUT);
poly4(l_clip,t_clip,l_clip,b_clip,r_clip,t_clip,r_clip,b_clip,4);
grept:
set_vidpage(0,1);
copy_page(2,0);
set_drawpage(0);
setup_hdwe(PUT);
for(i=0;i<2;i++)
{
x[i] = random(100);
y[i] = random(100);
if(x[i]>50) x[i] +=100;
if(y[i]>50) y[i] +=100;
l.x1 = x[i]; l.x2 = x[i]+1;
l.y1 = y[i]; l.y2 = y[i];
vgalines(&l,13+i);
}
l.x1 = x[0]; l.x2 = x[1];
l.y1 = y[0]; l.y2 = y[1];
if(toupper(getch())=='N') goto grept;
setup_hdwe(PUT);
if(clipper(&l)!=-1)
vgalines(&l,15);
reset_hdwe();
if(toupper(getch())=='R')
{
setup_hdwe(PUT);
l.x1 = x[0]; l.x2 = x[1];
l.y1 = y[0]; l.y2 = y[1];
if(clipper(&l)!=-1)
vgalines(&l,15);
reset_hdwe();
}
goto grept;
speedtri:
setup_hdwe(PUT);
/* draw 49300 24x24 trapezoids */
reset_hdwe();
btime = biostime(0,0L);
setup_hdwe(PUT);
for(i=0;i<290;i++)
for(k=0;k<170;k++)
/*
poly4(i+10, k, i, k+4, i+3, k+4, i+20, k+30, ((i+k)%15)+1);
*/
/*
poly3(i+10, k, i, k+4, i+3, k+4, (i+k)&255);
*/
for(j=0;j<10;j++) vgaline(i,k,i+22,k+20,(i+k)&255);
/*
{
load_color((i+k)&255);
fastri(i+10,k,i,k+4,i+3,k+4);
}
*/
reset_hdwe();
exit_gmode();
printf("Time for 49300(0) Draws: %f\n", (float)(biostime(0,0L)-btime)/18.2);
btime = biostime(0,0L);
getch();
reset_hdwe();
exit_gmode();
}
draw_thing(j,k)
{
int x1,x2,y1,y2;
float snj=sin(j/57.3);
float snk=sin(k/57.3);
float csj=cos(j/57.3);
float csk=cos(k/57.3);
x1 = 66*csj+160;
x2 = 66*csk+160;
y1 = 66*snj+70;
y2 = 66*snk+70;
poly3(10,10,160,100,x2,y2,12);
poly3(310,10,160,100,x1,y1,13);
poly3(160,190,x1,y1,x2,y2,14);
poly3(160,100,x1,y1,x2,y2,15);
}