リファレンスにもあるが検出した交点は、
コールバック関数を記述して、位置、色を取得して出力にしなくてはならない。
[例]
GLdouble vertices[64][6]; //64個まで追加可能
int vertexIndex = 0;
... ...
gluTessCallback(tess, GLU_TESS_COMBINE, (void (__stdcall*)(void))TessCombine);//コールバック登録
... ...
void TessCombine(const GLdouble newVertex[3], const GLdouble *neighborVertex[4],
const GLfloat neighborWeight[4], GLdouble **outData)
{
//座標を取得
vertices[vertexIndex][0] = newVertex[0];
vertices[vertexIndex][1] = newVertex[1];
vertices[vertexIndex][2] = newVertex[2];
//色の補間(線形補間)
vertices[vertexIndex][3] = neighborWeight[0] * neighborVertex[0][3] + //赤
neighborWeight[1] * neighborVertex[1][3] +
neighborWeight[2] * neighborVertex[2][3] +
neighborWeight[3] * neighborVertex[3][3];
vertices[vertexIndex][4] = neighborWeight[0] * neighborVertex[0][4] + //緑
neighborWeight[1] * neighborVertex[1][4] +
neighborWeight[2] * neighborVertex[2][4] +
neighborWeight[3] * neighborVertex[3][4];
vertices[vertexIndex][5] = neighborWeight[0] * neighborVertex[0][5] + //青
neighborWeight[1] * neighborVertex[1][5] +
neighborWeight[2] * neighborVertex[2][5] +
neighborWeight[3] * neighborVertex[3][5];
*outData = vertices[vertexIndex]; //アドレスをわたす
++vertexIndex;
}
注意点は、メモリリーク。
アニメーションをする時、
ディスプレイリストなどに登録しないと、
呼び出すたびにテセレーションを行い、コールバック関数を行う。
ディスプレイリストに登録するなどして、1度だけテセレーションするようにするのがいい。
サンプルコード >>
基本編13::まとめコード3