other versions
- wheezy 4.1.0.20011224-6
GLUTESSVERTEX(3G) | GLUTESSVERTEX(3G) |
名前¶
gluTessVertex - ポリゴンの頂点を指定する書式¶
void gluTessVertex( GLUtesselator* tess,GLdouble *location, GLvoid* data )
引き数¶
- tess
- location
- data
説明¶
gluTessVertex はプログラムで定義するポリゴンの頂点を記述する。 繰り返して gluTessVertex を呼ぶことで閉じた経路を記述する。 例えば四角形を記述するには、 gluTessVertex を 4 回呼ばなければならない。 gluTessVertex を呼ぶことができるのは、 gluTessBeginContour と gluTessEndContour に挟まれた部分だけである。 data は普通、頂点位置を格納している構造体を指す。 この構造体は、色や法線など、各頂点が持つ属性も持つ。 テセレーション処理( gluTessCallback の項目を参照)の後、このポインタは GLU_TESS_VERTEX や GLU_TESS_VERTEX_DATA コールバック経由で ユーザに返される。使用例¶
三角形の穴が開いた四角形は以下のように記述できる: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);
注意¶
ローカル変数を location や data に使い、ループの一部として その変数に値を格納してしまうことはよくある誤りである。 例えば、 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);
} はうまく動作しない。 location や data が指定しているポインタは gluTessEndPolygon が実行されるまで参照が切れないかもしれないの で、ループの最後の繰り返しで指定されたもの以外の頂点座標は、 テセレーション処理が始まる前に上書きされるかもしれない。 この問題がある時によく起こる 2 つの症状は、点がひとつしか表示されない こと( data に対して局所変数が使われている時)と、 GLU_TESS_NEED_COMBINE_CALLBACK エラーが起こること ( location に対して局所変数が使われている時)である。