最終更新: mikk_ni3_92 2008年10月07日(火) 14:39:01履歴
現在地 >> メニュー >> 基本編13 >> 基本編13::穴のあるポリゴン >> winding規則
テセレーションはどこが穴の部分かを判断するのに「winding数」を見る。
これは、以下のようになっている。
「winding数」が割り当てられたあと、「winding規則」を使って穴かどうか判断する。
ルールには、以下のものがある。
設定は、
void gluTessProperty(GLUtesselator *tess, GLenum property, GLdouble *value)
で行う。
[例]
この場合、穴の部分が「winding数=2」となる。→穴と判定される。
テセレーションはどこが穴の部分かを判断するのに「winding数」を見る。
これは、以下のようになっている。
- 最初のwinding数は「0」。
- 反時計まわりで囲まれた領域は「winding数」が「+1」される。
- 時計回りで囲まれた領域は「winding数」が「-1」される。
「winding数」が割り当てられたあと、「winding規則」を使って穴かどうか判断する。
ルールには、以下のものがある。
- GLU_TESS_WINDING_ODD: winding数が奇数のもの描画( デフォルト)
- GLU_TESS_WINDING_NONZERO: winding数が0じゃないものを描画
- GLU_TESS_WINDING_POSITIVE: winding数が正のものを描画
- GLU_TESS_WINDING_NEGATIVE: winding数が負のものを描画
- GLU_TESS_WINDING_ABS_GEQ_TWO:winding数が2の絶対値以上のものを描画
設定は、
void gluTessProperty(GLUtesselator *tess, GLenum property, GLdouble *value)
で行う。
[例]
gluTessProperty(tess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); gluTessBeginPolygon(tess, 0); gluTessBeginContour(tess); gluTessVertex(tess, vdata[0], vdata[0]); gluTessVertex(tess, vdata[1], vdata[1]); gluTessVertex(tess, vdata[2], vdata[2]); gluTessVertex(tess, vdata[3], vdata[3]); gluTessEndContour(tess); gluTessBeginContour(tess); gluTessVertex(tess, vdata[4], vdata[4]); gluTessVertex(tess, vdata[5], vdata[5]); gluTessVertex(tess, vdata[6], vdata[6]); gluTessVertex(tess, vdata[7], vdata[7]); gluTessEndContour(tess); gluTessEndPolygon(tess); ※基本編13::まとめコード2より
この場合、穴の部分が「winding数=2」となる。→穴と判定される。