GLUBEGINTRIM(3G)

名前
gluBeginTrim, gluEndTrim - NURBS のトリミング閉曲線の定義を区切る

書式
void gluBeginTrim( GLUnurbs* nurb )
void gluEndTrim( GLUnurbs* nurb )

引き数

nurb
    NURBS オブジェクト(gluNewNurbsRenderer を使って生成する) を指定する。

説明
トリミング閉曲線の開始を示すには gluBeginTrim を使い、 トリミング閉曲線の終了を示すには gluEndTrim を使う。 トリミング閉曲線は向きを持った曲線セグメントの集まりであり(これが 閉じた曲線をなす)、NURBS 曲面の境界を定義する。 このトリミング閉曲線の定義は、NURBS 曲面の定義の途中 (gluBeginSurface と gluEndSurface の呼び出しの間) に記述する。

ひとつの NURBS 曲面の定義に対して、複数のトリミング閉曲線を含めること ができる。 例えば、穴を開けた長方形のような形の NURBS 曲面の定義を記述する際には、 その定義にはふたつのトリミング閉曲線が含まれる。 ひとつは長方形の外形を定義する閉曲線であり、もうひとつは長方形に 開けた穴を定義する閉曲線である。 これらのトリミング閉曲線の定義は、それぞれ gluBeginTrim/gluEndTrim で括る。

ひとつのトリミング閉曲線の定義は、複数の曲線分で定義できる。 それぞれの曲線分は区分線形曲線 (gluPwlCurve を参照)や ひとつの NURBS 曲線 (gluNurbsCurve を参照)、あるいは 両者の組み合わせ(順番は任意)として記述される。 トリミング閉曲線の定義中に呼び出されるライブラリ関数は gluPwlCurve と gluNurbsCurve だけである。

NURBS 曲面の表示される部分は、トリミング閉曲線のパラメータが増加する 向きで見て、曲線の左にある領域である。 したがって、NURBS 曲面のうち切り取られずに残る領域は反時計回りの トリミング閉曲線の内側かつ時計回りのトリミング閉曲線の外側にある部分で ある。 前述の長方形について言うと、長方形の外形線を示す トリミング閉曲線は反時計回りであり、内側にあけた穴を示す トリミング閉曲線は時計回りとなる。

複数の曲線を使ってひとつのトリミング閉曲線を定義した場合は、 曲線分の集合がひとつの閉じた閉曲線を作らなければならない (つまり、各曲線の終点は次の曲線の始点であり、かつ最後の曲線の終点は 最初の曲線の始点でなければならない)。 曲線の始点と終点が十分近いが厳密には一致していない場合は、これらは 一致するものとして扱われる。 始点と終点が十分近くない場合は、結果はエラーとなる (gluNurbsCallback を参照)。

トリミング閉曲線の定義に複数の曲線が含まれる場合は、曲線の向きは整合性 が取れていなければならない(つまり、全ての曲線の左側になる部分が内側に なければならない)。 トリミング閉曲線が入れ子になる場合は、曲線の向きが正しく変わる場合だけ 許される。 トリミング閉曲線が自分自身あるいは他の閉曲線と交わっている場合には、 結果はエラーとなる。

NURBS 曲面に対してトリミング情報が指定されていなければ、 曲面全体が描画される。

使用例
次に示すコードは、区分線形曲線ひとつと NURBS 曲線ふたつを含む トリミング閉曲線を定義する:

gluBeginTrim(nobj);
   gluPwlCurve(..., GLU_MAP1_TRIM_2);
   gluNurbsCurve(..., GLU_MAP1_TRIM_2);
   gluNurbsCurve(..., GLU_MAP1_TRIM_3); gluEndTrim(nobj);

関連項目
gluBeginSurface, gluNewNurbsRenderer, gluNurbsCallback, gluNurbsCurve, gluPwlCurve