Edit

Share via


Porting Polygons and Quadrilaterals

Keep the following points in mind when porting polygons and quadrilaterals:

  • There is no direct equivalent for concave(TRUE). Instead you can use the tessellation routines in the GLU, described in Tessellating Polygons.
  • Polygon modes are set differently.
  • These polygon drawing functions have no direct equivalents in OpenGL: the poly family of routines; the polf family of routines; pmv, pdr, and pclos; rpmv and rpdr; splf; and spclos.

If your IRIS GL code uses these functions, you'll have to rewrite the code using glBegin( GL_POLYGON ).

The following table lists the IRIS GL polygon drawing functions and their equivalent OpenGL functions.

IRIS GL function OpenGL function Meaning
bgnpolygonendpolygon glBegin ( GL_POLYGON )glEnd Vertices define boundary of a simple convex polygon.
glBegin( GL_QUADS )glEnd
Interprets quadruples of vertices as quadrilaterals.
bgnqstripendqstrip glBegin ( GL_QUAD_STRIP )glEnd
Interprets vertices as linked strips of quadrilaterals.
glEdgeFlag
polymode glPolygonMode Sets polygon drawing mode.
rectrectf
glRect Draws a rectangle.
sboxsboxf
Draws a screen-aligned rectangle.

??

Porting Polygon Modes

The OpenGL function glPolygonMode lets you specify which side of a polygon (the back or the front) the mode applies to. Its syntax is:

void glPolygonMode( GLenum face, GLenum mode ); 
 

where face is one of:

GLenum value Meaning
GL_FRONT mode which applies to front-facing polygons
GL_BACK mode which applies to back-facing polygons
GL_FRONT_AND_BACK mode which applies to both front- and back-facing polygons

The GL_FRONT_AND_BACK mode is equivalent to the IRIS GL polymode function. The following table lists IRIS GL polygon modes and their equivalent OpenGL modes.

IRIS GL mode OpenGL mode Meaning
PYM_POINT GL_POINT Draws vertices as points.
PYM_LINE GL_LINE Draws boundary edges as line segments.
PYM_FILL GL_FILL Draws polygon interior filled.
PYM_HOLLOW Fills only interior pixels at the boundaries.

Porting Polygon Stipples

When porting IRIS GL polygon stipples, keep the following points in mind:

  • OpenGL doesn't use tables for polygon stipples; only one stipple pattern is kept. You can use display lists to store different stipple patterns.
  • The OpenGL polygon stipple bitmap size is always a 32x32 bit pattern.
  • Stipple encoding is affected by glPixelStore.

For more information on porting polygon stipples, see Porting Pixel Operations.

The following table lists IRIS GL polygon stipple functions and their equivalent OpenGL functions.

IRIS GL function OpenGL function Meaning
defpattern glPolygonStipple Sets the stipple pattern.
setpattern OpenGL keeps only one polygon stipple pattern.
getpattern glGetPolygonStipple Returns the stipple bitmap (used to return an index).

In OpenGL, you enable and disable polygon stippling by passing GL_POLYGON_STIPPLE as a parameter for glEnable and glDisable.

The following OpenGL code sample demonstrates polygon stippling:

void display(void) 
{ 
    GLubyte fly[] = { 
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
      0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 
      0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 
      0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 
      0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 
      0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 
      0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 
      0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 
      0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC, 
      0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, 
      0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0, 
      0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0, 
      0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30, 
      0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08, 
      0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08, 
      0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08 
    }; 
    GLubyte halftone[] = { 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 
      0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55 
    }; 
 
    glClear (GL_COLOR_BUFFER_BIT); 
 
/*  draw all polygons in white*/ 
    glColor3f (1.0, 1.0, 1.0); 
 
/*  draw one solid, unstippled rectangle,*/ 
/*  then two stippled rectangles*/ 
    glRectf (25.0, 25.0, 125.0, 125.0); 
    glEnable (GL_POLYGON_STIPPLE); 
    glPolygonStipple (fly); 
    glRectf (125.0, 25.0, 225.0, 125.0); 
    glPolygonStipple (halftone); 
    glRectf (225.0, 25.0, 325.0, 125.0); 
    glDisable (GL_POLYGON_STIPPLE); 
 
    glFlush (); 
}

Porting Tessellated Polygons

In IRIS GL, you use concave(TRUE) and then bgnpolygon to draw concave polygons. The OpenGL GLU includes functions you can use to draw concave polygons.

To draw a concave polygon with OpenGL

  1. Create a tessellation object.
  2. Define callbacks that will be used to process the triangles generated by the tessellator.
  3. Specify the concave polygon to be tessellated.

The following table lists the OpenGL functions for drawing tessellated polygons.

OpenGL GLU function Meaning
gluNewTess Creates a new tessellation object.
gluDeleteTess Deletes a tessellation object.
gluTessCallback
gluBeginPolygon Begins the polygon specification.
gluTessVertex Specifies a polygon vertex in a contour.
gluNextContour Indicates that the next series of vertices describe a new contour.
gluEndPolygon Ends the polygon specification.