ポリゴンと四辺形を移植する場合は、次の点に注意してください。
- 凹型 (TRUE) に直接相当するものはありません。 代わりに、「ポリゴンのテセレーション」で説明されている GLU の テセレーション ルーチンを使用できます。
- 多角形モードの設定は異なります。
- これらのポリゴン描画関数は、OpenGL では、 ルーチンの poly ファミリに直接相当するものはありません。ルーチンの polf ファミリ。 pmv、 pdr、 pclos; 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 では、 glEnable と glDisable のパラメーターとして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 を使用して凹型ポリゴンを描画するには
- テセレーション オブジェクトを作成します。
- テセレータによって生成された三角形を処理するために使用されるコールバックを定義します。
- テセレーションする凹型ポリゴンを指定します。
次の表は、テセレーションされたポリゴンを描画するための OpenGL 関数の一覧です。
OpenGL GLU 関数 | 説明 |
---|---|
gluNewTess | 新しいテセレーション オブジェクトを作成します。 |
gluDeleteTess | テセレーション オブジェクトを削除します。 |
gluTessCallback | |
gluBeginPolygon | 多角形の指定を開始します。 |
gluTessVertex | コンター内の多角形の頂点を指定します。 |
gluNextContour | 次の一連の頂点が新しいコンターを記述することを示します。 |
gluEndPolygon | 多角形の指定を終了します。 |