GLUTESSPROPERTY(3G)

名前
gluTessProperty - テセレーションオブジェクトの属性を設定する

書式
void gluTessProperty( GLUtesselator* tess,
	GLenum which,
	GLdouble data )

引き数

tess
    テセレーションオブジェクト(gluNewTess を使って作る)を指定する。

which
    設定する属性を指定する。 指定できる値は GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARY_ONLY, GLU_TESS_TOLERANCE である。

data
    属性に設定する値を指定する。

説明
gluTessProperty は、テセレーションオブジェクトに格納されている 属性を制御するために使う。 これらの属性はポリゴンの解釈やレンダリングのしかたに影響を及ぼす。 which に指定できる値は以下の通りである:

GLU_TESS_WINDING_RULE
    ポリゴン「内部」となる側を決める。 data に設定できるのは GLU_TESS_WINDING_ODD, GLU_TESS_WINDING_NONZERO, GLU_TESS_WINDING_POSITIVE, GLU_TESS_WINDING_NEGATIVE, GLU_TESS_WINDING_ABS_GEQ_TWO のいずれかである。

    winding 規則の動作を理解するためには、入力した経路が平面を領域分割 する場合を考えるとよい。 winding 規則は、各領域がポリゴンの内部にあるかどうかを決める。

    ひとつの経路 C に関する 点 x の winding 数は単に、C の回りを一度回った ときに x の回りを回った階数を符号付きの数で表した数である(反時計回りが正)。 複数の経路があるときには、それぞれの winding 数の和を求める。 この手続きにより、平面上のある点 x について符号付きの整数が決められる。 winding 数は、ひとつの領域に含まれる全ての点で同じ値になる点に注意する こと。

    winding 規則は、winding 数が選択した種類(奇数, 非 0, 正の値、負の値、 少なくともふたつの値の絶対値)となるときに、領域を「内側」と分類する。 過去(バージョン 1.2 より前の GLU)のテセレーション処理では、「奇数」 規則が使われていた。 「非 0」規則も、内部を定義する際の一般的な方法である。 他の 3 つの規則は、ポリゴンの CSG 操作を行う際に便利である。

GLU_TESS_BOUNDARY_ONLY
    真偽値を取る(値には GL_TRUE または GL_FALSE を設定しなければならない)。 GL_TRUE を設定すると、テセレーションの処理結果ではなく、ポリゴンの内部 と外部を区切っている閉じた経路の集合が返される。 外側の経路は法線に対して反時計回りを向き、内側の経路は法線に対して 時計回りを向く。 GLU_TESS_BEGIN コールバックと GLU_TESS_BEGIN_DATA コールバックは、それぞれの経路に対して GL_LINE_LOOP 型を用いる。

GLU_TESS_TOLERANCE
    出力データの大きさを減らすために形状特徴をマージする際の許容誤差を指定 する。 たとえば、ふたつの頂点が互いに非常に近ければ、これらはひとつの頂点に 置き換えられる。 許容誤差には、入力する全ての頂点について最大の座標の大きさが掛けられる。 これは、1 回のマージ操作の結果として全ての形状特徴を動かせる最大距離を 示す。 ひとつの形状特徴が複数のマージ操作に使われる場合、移動する最大距離は さらに大きくなることがある。

    形状特徴のマージは全くのオプションである。 許容誤差はヒントにすぎない。 実装においては、場合によってマージを行ったり行わなかったりしても かまわないし、形状特徴をまったく行わなくてもよい。 許容誤差の初期値は 0 である。

    現在の実装では、ふたつの頂点がマージされるのは両者が完全に一致する 場合だけであり、これは現在の許容誤差とは無関係に行われる。 頂点を稜線に繋ぎ合わせる処理が行われるのは、頂点が稜線のどちら側にある のかを判別できない場合だけである。 ふたつの稜線がマージされるのは、両方の端点が一致している場合だけである。

関連項目
gluGetTessProperty, gluNewTess