次の方法で共有


多角形と四辺形の移植

ポリゴンと四辺形を移植する場合は、次の点に注意してください。

  • 凹型 (TRUE) に直接相当するものはありません。 代わりに、「ポリゴンのテセレーション」で説明されている GLU の テセレーション ルーチンを使用できます。
  • 多角形モードの設定は異なります。
  • これらのポリゴン描画関数は、OpenGL では、 ルーチンの poly ファミリに直接相当するものはありません。ルーチンの polf ファミリ。 pmvpdrpclos; rpmv および rpdr; splf;と spclos

IRIS GL コードでこれらの関数を使用する場合は、 glBegin( GL_POLYGON ) を使用してコードを書き直す必要があります。

次の表に、IRIS GL ポリゴン描画関数と同等の OpenGL 関数を示します。

IRIS GL 関数 OpenGL 関数 説明
bgnpolygonendpolygon glBegin ( GL_POLYGON )glEnd 頂点は、単純な凸多角形の境界を定義します。
glBegin( GL_QUADS )glEnd
頂点の 4 倍を四角形として解釈します。
bgnqstripendqstrip glBegin ( GL_QUAD_STRIP )glEnd
頂点を四角形のリンクされたストリップとして解釈します。
glEdgeFlag
polymode glPolygonMode ポリゴン描画モードを設定します。
rectrectf
glRect 四角形を描きます。
sboxsboxf
画面に合わせた四角形を描画します。

??

ポリゴン モードの移植

OpenGL 関数 glPolygonMode を使用すると、モードを適用する多角形 (背面または前面) の辺を指定できます。 構文は次のとおりです。

void glPolygonMode( GLenum face, GLenum mode ); 
 

face は次のいずれかです。

GLenum 値 説明
GL_FRONT 正面向きのポリゴンに適用されるモード
GL_BACK バックフェイシングポリゴンに適用されるモード
GL_FRONT_AND_BACK 前面と背面の両方のポリゴンに適用されるモード

GL_FRONT_AND_BACK モードは IRIS GL ポリモード 関数と同等です。 次の表に、IRIS GL ポリゴン モードと同等の OpenGL モードを示します。

IRIS GL モード OpenGL モード 説明
PYM_POINT GL_POINT 頂点をポイントとして描画します。
PYM_LINE GL_LINE 境界エッジを線分として描画します。
PYM_FILL GL_FILL 塗りつぶされたポリゴン内部を描画します。
PYM_HOLLOW 境界の内側のピクセルのみを塗りつぶします。

多角形のスティップルの移植

IRIS GL ポリゴン のスティップルを移植する場合は、次の点に注意してください。

  • OpenGL では、多角形のスチップルにテーブルは使用されません。スプル パターンは 1 つだけ保持されます。 表示リストを使用して、さまざまなヒント パターンを格納できます。
  • OpenGL ポリゴンスティプル ビットマップ サイズは、常に 32 x 32 ビット パターンです。
  • Stipple エンコードは glPixelStore の影響を受けます。

多角形のスティップルの移植の詳細については、「 ピクセル操作の移植」を参照してください。

次の表に、IRIS GL ポリゴン のヒント関数と、それに相当する OpenGL 関数を示します。

IRIS GL 関数 OpenGL 関数 説明
defpattern glPolygonStipple ヒント パターンを設定します。
setpattern OpenGL では、多角形のヒント パターンが 1 つだけ保持されます。
getpattern glGetPolygonStipple ヒント ビットマップ (インデックスを返すために使用) を返します。

OpenGL では、 glEnableglDisable のパラメーターとしてGL_POLYGON_STIPPLEを渡すことで、ポリゴン のスティップリングを有効または無効にします。

次の 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 多角形の指定を終了します。