現在地 >> メニュー >> 基本編13
INDEX:基本編12 << 基本編13 >> 基本編14

テセレーション


テセレーションとは、凹ポリゴンや、辺が交差している凸ポリゴンを再分割する事である。

手順

  1. テセレータオブジェクトを作成
  2. コールバック関数登録
  3. テセレータに座標をわたす

[1].テセレータオブジェクトを作成


テセレータオブジェクトの作成、消去は
  • GLUtessellator* gluNewTess() → 作成
  • void gluDeleteTess(GLUtessellator *tess) → 消去

の関数で行う。


[例]

//テセレータオブジェクト
GLUtesselator *tess;
... ...
tess = gluNewTess();  //テセレータの作成
... ...
gluDeleteTess(tess); //テセレータの削除



[2].コールバック関数の登録


テセレータに渡すとテセレーションを行い、その後OpenGLの命令を実行する。
この時、どんな処理をするのかを登録する。

void gluTessCallback(GLUtessellator *tess, GLUenum type, void (*fn)())

※詳しくはリファレンス参照。


[例]

    tess = gluNewTess();
            ... ...
    gluTessCallback(tess, GLU_TESS_BEGIN, (void (__stdcall*)(void))glBegin);  //glBegin()
    gluTessCallback(tess, GLU_TESS_END, (void (__stdcall*)(void))glEnd);    //glEnd()
    gluTessCallback(tess, GLU_TESS_ERROR, (void (__stdcall*)(void))TessErr);  //エラー処理
    gluTessCallback(tess, GLU_TESS_VERTEX, (void (__stdcall*)(void))glVertex3dv); //glVertex()関係


テセレータに座標をわたす


テセレータに座標を渡すと勝手にテセレーションを行う。
これは、「glBegin()関数」、「glEnd()関数」と似ている。
  1. 「gluTessBeginPolygon()関数」、「gluTessEndPolygon()関数」でテセレーションの範囲を指定し、
  2. 「gluTessBeginContour()関数」、「gluTessEndContour()関数」の間に「gluTessVertex()関数」で頂点を記述する


※使う関数は以下の4つ
  • void gluTessBeginPolygon(GLUtessellator *tess, void *userData)
  • void gluTessEndPolygon(GLUtessellator *tess)
  • void gluTessBeginContour(GLUtessellator *tess)
  • void gluTessEndContour(GLUtessellator *tess)
  • void gluTessVertex(GLUtessellator *tess, GLdouble cords[3], void *vertexData) //double型

[例]

//頂点座標
double vdata[4][3]={{0.2, 0, 0},  {0.4, 0.4, 0},  {0.2, 0.2, 0},  {0, 0.3, 0}};
... ...
	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);
     gluTessEndPolygon(tess);

<gluTessVertex()関数>


void gluTessVertex(GLUtessellator *tess, GLdouble cords[3], void *vertexData)

― 第1引数 ―
テセレータを指定。

― 第2引数 ―
テセレーションに使う座標を指定。

― 第3引数 ―
実際のレンダリングに使うデータ。

テセレーションの例


テセレーションの例として、
などがある。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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