現在地 >> メニュー >> 基本編13 >> 基本編13::穴のあるポリゴン >> winding規則

winding数


テセレーションはどこが穴の部分かを判断するのに「winding数」を見る。

これは、以下のようになっている。
  • 最初のwinding数は「0」。
  • 反時計まわりで囲まれた領域は「winding数」が「+1」される。
  • 時計回りで囲まれた領域は「winding数」が「-1」される。

winding規則


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

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます