移植多边形和四边形

移植多边形和四边形时,请记住以下几点:

  • 没有直接等效的 凹 (TRUE) 。 可以改用 GLU 中的细化例程,如 细化多边形中所述。
  • 多边形模式的设置方式不同。
  • 这些多边形绘制函数在 OpenGL 中没有直接等效项:例程的 poly 系列; 常规的 polf 系列; pmvpdrpclos; rpmvrpdr; splf;和 spclos

如果 IRIS GL 代码使用这些函数,则必须使用 glBegin ( GL_POLYGON ) 重写代码。

下表列出了 IRIS GL 多边形绘制函数及其等效的 OpenGL 函数。

IRIS GL 函数 OpenGL 函数 含义
bgnpolygonendpolygon glBegin ( GL_POLYGON ) glEnd 顶点定义简单凸多边形的边界。
glBegin ( GL_QUADS ) glEnd
将四倍顶点解释为四边形。
bgnqstripendqstrip glBegin ( GL_QUAD_STRIP ) glEnd
将顶点解释为四边形的链接带。
glEdgeFlag
polymode glPolygonMode 设置多边形绘制模式。
rectrectf
glRect 绘制矩形。
sboxsboxf
绘制屏幕对齐的矩形。

??

移植多边形模式

OpenGL 函数 glPolygonMode 允许指定多边形 (该模式应用到的背面或正面) 的哪一侧。 其语法为:

void glPolygonMode( GLenum face, GLenum mode ); 
 

其中,人脸是以下项之一:

GLenum 值 含义
GL_FRONT 适用于正面多边形的模式
GL_BACK 适用于后向多边形的模式
GL_FRONT_AND_BACK 适用于正面和背面多边形的模式

GL_FRONT_AND_BACK模式等效于 IRIS GL polymode 函数。 下表列出了 IRIS GL 多边形模式及其等效的 OpenGL 模式。

IRIS GL 模式 OpenGL 模式 含义
PYM_POINT GL_POINT 将顶点绘制为点。
PYM_LINE GL_LINE 将边界边缘绘制为线段。
PYM_FILL GL_FILL 绘制填充的多边形内部。
PYM_HOLLOW 仅填充边界处的内部像素。

移植多边形笔尖

移植 IRIS GL 多边形时,请记住以下几点:

  • OpenGL 不对多边形使用表;仅保留一个 stipple 模式。 可以使用显示列表来存储不同的安装模式。
  • OpenGL 多边形位图大小始终为 32x32 位模式。
  • Stipple 编码受 glPixelStore 的影响。

有关移植多边形 stipple 的详细信息,请参阅 移植像素操作

下表列出了 IRIS GL 多边形功能及其等效的 OpenGL 函数。

IRIS GL 函数 OpenGL 函数 含义
defpattern glPolygonStipple 设置 Stipple 模式。
setpattern OpenGL 仅保留一个多边形样式。
getpattern glGetPolygonStipple 返回用于返回索引) (位图。

在 OpenGL 中,通过将GL_POLYGON_STIPPLE作为 glEnableglDisable 的参数传递来启用和禁用多边形安装。

以下 OpenGL 代码示例演示多边形安装:

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 (); 
}

移植细化多边形

在 IRIS GL 中,使用 凹形 (TRUE) ,然后使用 bgnpolygon 绘制凹形多边形。 OpenGL GLU 包括可用于绘制凹形多边形的函数。

使用 OpenGL 绘制凹形多边形

  1. 创建细化对象。
  2. 定义将用于处理细化器生成的三角形的回调。
  3. 指定要分割的凹形多边形。

下表列出了用于绘制细化多边形的 OpenGL 函数。

OpenGL GLU 函数 含义
gluNewTess 创建新的分割对象。
gluDeleteTess 删除分割对象。
gluTessCallback
gluBeginPolygon 开始多边形规范。
gluTessVertex 指定轮廓中的多边形顶点。
gluNextContour 指示下一系列顶点描述新的轮廓。
gluEndPolygon 结束多边形规范。