Scroll to navigation

GLUTESSVERTEX(3G) GLUTESSVERTEX(3G)

名前

gluTessVertex - ポリゴンの頂点を指定する
 

書式

void gluTessVertex( GLUtesselator* tess,
	GLdouble  *location,
	GLvoid*  data )
 

引き数

tess
location
data

説明

gluTessVertex はプログラムで定義するポリゴンの頂点を記述する。 繰り返して gluTessVertex を呼ぶことで閉じた経路を記述する。 例えば四角形を記述するには、 gluTessVertex を 4 回呼ばなければならない。 gluTessVertex を呼ぶことができるのは、 gluTessBeginContourgluTessEndContour に挟まれた部分だけである。
data は普通、頂点位置を格納している構造体を指す。 この構造体は、色や法線など、各頂点が持つ属性も持つ。 テセレーション処理( gluTessCallback の項目を参照)の後、このポインタは GLU_TESS_VERTEXGLU_TESS_VERTEX_DATA コールバック経由で ユーザに返される。

使用例

三角形の穴が開いた四角形は以下のように記述できる:
 
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj); gluTessEndPolygon(tobj);
 

注意

ローカル変数を locationdata に使い、ループの一部として その変数に値を格納してしまうことはよくある誤りである。 例えば、 for (i = 0; i < NVERTICES; ++i) {
GLdouble data[3];
data[0] = vertex[i][0];
data[1] = vertex[i][1];
data[2] = vertex[i][2];
gluTessVertex(tobj, data, data);
}
はうまく動作しない。 locationdata が指定しているポインタは gluTessEndPolygon が実行されるまで参照が切れないかもしれないの で、ループの最後の繰り返しで指定されたもの以外の頂点座標は、 テセレーション処理が始まる前に上書きされるかもしれない。
この問題がある時によく起こる 2 つの症状は、点がひとつしか表示されない こと( data に対して局所変数が使われている時)と、 GLU_TESS_NEED_COMBINE_CALLBACK エラーが起こること ( location に対して局所変数が使われている時)である。

関連項目

gluTessBeginPolygon, gluNewTess, gluTessBeginContour, gluTessCallback, gluTessProperty, gluTessNormal, gluTessEndPolygon