「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」となる。→穴と判定される。