[ Previous | Next | Contents | Glossary | Home | Search ]
GL3.2 for AIX: Graphics Library (GL) Technical Reference

backface.c Example C Language Program

/*
backface.c:
Draw a cube that can run with backface() turned on or
off.  Turn backface() on with the F key.
Turn backface() off with the B key.  Cube is moved
when LEFTMOUSE is pressed and mouse itself is moved.
*/
#include <gl/gl.h>
#include <gl/device.h>
#define CUBE_SIZE 200
#define CUBE_OBJ 1
main ()
{
  Device  dev;
  int      moveit;
  short    val, x = 30,y = 30;
  initialize();
  while (TRUE) {
    while (qtest()) {
      dev = qread(&val);
      if (dev == ESCKEY) {
        backface(FALSE);
        gexit();
        exit();
      }
      else if (dev == REDRAW) {
        reshapeviewport();
        drawcube(x,y);
      }
      else if (dev == LEFTMOUSE)
        moveit = val;
        /* left mouse is down */
      else if (dev == BKEY) {
        backface(TRUE);
        /* turn back facing off */
        drawcube(x,y);
      }
      else if (dev == FKEY) {
        backface(FALSE);
        /* turn back facing on */
        drawcube(x,y);
      }
    }
    if (moveit) {
      x = getvaluator(MOUSEX);
      y = getvaluator(MOUSEY);
      drawcube(x,y);
    }
  }
}
initialize()
{
  int gid;
  prefposition(XMAXSCREEN/4, XMAXSCREEN*3/4, 
      YMAXSCREEN/4, YMAXSCREEN*3/4);
  gid = winopen("backface");
  doublebuffer();
  gconfig();
  shademodel(FLAT);
  ortho((float)-XMAXSCREEN, (float)XMAXSCREEN,
      (float)-YMAXSCREEN, (float)YMAXSCREEN,
      (float)-YMAXSCREEN, (float)YMAXSCREEN);
  qdevice(ESCKEY);
  qdevice(REDRAW);
  qdevice(LEFTMOUSE);
  qdevice(BKEY);
  qdevice(FKEY);
  qenter(REDRAW,gid);
  backface(TRUE);
  /* turn on back facing polygon removal */
}
/* define a cube */
cube()
{ 
  /* front face */
  pushmatrix();
  translate(0.0,0.0,CUBE_SIZE);
  color(RED);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();  /* right face */
  pushmatrix();
  translate(CUBE_SIZE, 0.0, 0.0);
  rotate(900, 'y');
  color(GREEN);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();  /* back face */
  pushmatrix();
  translate(0.0, 0.0, -CUBE_SIZE);
  rotate(1800, 'y');
  color(BLUE);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();  /* left face */
  pushmatrix();
  translate(-CUBE_SIZE, 0.0, 0.0);
  rotate(-900, 'y');
  color(CYAN);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();  /* top face */
  pushmatrix();
  translate(0.0, CUBE_SIZE, 0.0);
  rotate(-900, 'x');
  color(MAGENTA);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();  /* bottom face */
  pushmatrix();
  translate(0.0, -CUBE_SIZE, 0.0);
  rotate(900, 'x');
  color(YELLOW);
  rectfi(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE);
  popmatrix();
}
drawcube(x,y)
short x,y;
{
  pushmatrix();
  rotate(2*x, 'x');
  rotate(2*y, 'y');
  color(BLACK);
  clear();
  cube();
  popmatrix();
  swapbuffers();
}
/*Changes
   -The constant CUBE_SIZE had a .0 append to the end of it
*/

Related Information

The backface subroutine, ortho or ortho2 subroutine, popmatrix subroutine, pushmatrix subroutine, rotate subroutine, shademodel subroutine, swapbuffers subroutine, translate subroutine.

Removing Hidden Surfaces in GL3.2 Version 4 for AIX: Programming Concepts.


[ Previous | Next | Contents | Glossary | Home | Search ]