/* zbuffer1.c:
A zbuffer() demo program that draws two intersecting planes.
This program requires the z-buffer option. */
#include <gl/gl.h> #include <gl/device.h>
main()
{
Device dev;
short val;
initialize();
while (TRUE)
{
if (qtest())
{
dev = qread(&val);
if (dev == ESCKEY)
{
zbuffer(FALSE);
gexit();
exit(0);
}
else if (dev == REDRAW)
{
reshapeviewport();
drawpolys();
}
}
}
}
initialize()
{
int gid; float xmax,ymax;
prefposition(XMAXSCREEN/4, XMAXSCREEN*3/4, YMAXSCREEN/4,
YMAXSCREEN*3/4);
gid = winopen("zbuffer1");
winset(gid);
winconstraints();
perspective(900, 1.34, 1.01, 500.0);
lookat(-150.0, 90.0, 250.0, 50.0, 50.0, 0.0, 0);
lsetdepth(0xC00000,0x3FFFFF);
qdevice(ESCKEY);
qdevice(REDRAW);
qenter(REDRAW,gid);
zbuffer(TRUE);
}
drawpolys()
{
zclear(); color(BLACK); clear(); color(YELLOW); pmv(0.0, 0.0, 100.0); pdr(100.0, 0.0, 100.0); pdr(100.0, 100.0, 100.0); pdr(0.0, 100.0, 100.0); pclos(); color(RED); pmv(0.0, 0.0, 50.0); pdr(100.0, 0.0, 50.0); pdr(100.0, 100.0, 200.0); pdr(0.0, 100.0, 200.0); pclos();
}
The lookat subroutine, pclos subroutine, pdr subroutine, perspective subroutine, pmv subroutine, zbuffer subroutine, zclear subroutine.