Fun GL program
Bruce Karsh
karsh at trifolium.esd.sgi.com
Fri Jun 1 20:36:22 AEST 1990
Here's a fun little graphics program. Run it when you feel that bugs are
getting you down.
When you've had enough, you can kill it by selecting the plain root from the
Windows chest.
------------------------( Cut Here multibug.c )--------------------------------
#include "gl.h"
#include "gl/device.h"
#include "math.h"
#define PI 3.1415926535
#define NBUGS 12
#define MAXBUGS 500
int phase[MAXBUGS];
Coord bugx[MAXBUGS],bugy[MAXBUGS];
Angle bugt[MAXBUGS];
int bugc[MAXBUGS];
int nbugs;
main(argc,argv)
int argc;
char *argv[];
{
short dev,data;
int i;
imakebackground();
winopen("background");
shademodel(FLAT);
if(argc == 2)
nbugs=atoi(argv[1]);
else
nbugs=NBUGS;
if(nbugs > MAXBUGS)nbugs=MAXBUGS;
for(i=0;i<nbugs;i++)bugc[i]=i+1;
repaint();
while(1) {
if(qtest()) {
dev=qread(&data);
if(dev == REDRAW) {
repaint();
}
} else {
/* Move the bugs. */
for(i=0;i<nbugs;i++) {
bugx[i] += 2*cos(PI/180*bugt[i]/10.0);
bugy[i] += 2*sin(PI/180*bugt[i]/10.0);
if(bugx[i]>1300)bugx[i] = -35;
if(bugx[i]< -35)bugx[i] = 1300;
if(bugy[i] > 1050)bugy[i] = -35;
if(bugy[i] < -35)bugy[i] = 1050;
bugt[i] += rand() % 200 - 100;
}
newbug();
sginap(2);
}
}
}
repaint()
{
color(14);
clear();
newbug();
}
newbug()
{
int i;
/* Draw the new bugs. */
for(i=0;i<nbugs;i++) {
bug(bugx[i],bugy[i],bugt[i],phase[i],bugc[i]);
}
}
bug(x,y,t,p,c)
Coord x,y;
Angle t;
int p;
{
float x0,y0;
pushmatrix();
translate(x,y,0);
rotate(t,'Z');
/* Draw the body. */
color(c);
circf(0,0,15);
color(BLACK);
circ(0,0,15);
color(c);
/* Draw the head. */
circf(15+6+1,0,6);
color(BLACK);
circ(15+6+1,0,6);
color(c);
/* Draw the left foreleg. */
x0=15*cos(60*PI/180.);
y0=15*sin(60*PI/180.);
color(BLACK);
move2(x0,y0);
draw2(x0,y0+5);
/* Draw the right foreleg. */
move2(x0,-y0);
draw2(x0,-y0-5);
/* Draw the left middle leg. */
x0=0;
y0=15;
move2(x0,y0);
draw2(x0,y0+5);
/* Draw the right middle leg. */
move2(x0,-y0);
draw2(x0,-y0-5);
/* Draw the left hindleg. */
x0=15*cos(120*PI/180.);
y0=15*sin(120*PI/180.);
color(BLACK);
move2(x0,y0);
draw2(x0,y0+5);
/* Draw the right hindleg. */
move2(x0,-y0);
draw2(x0,-y0-5);
popmatrix();
}
Bruce Karsh
karsh at sgi.com
More information about the Comp.sys.sgi
mailing list