最終更新: mikk_ni3_92 2008年10月06日(月) 14:30:46履歴
現在地 >> メニュー >> 基本編13 >> 基本編13::単純な再分割
関連:基本編13::穴のあるポリゴン、基本編13::辺の交差
ポリゴンに穴があったり、辺が交差する事がないような場合、
単純な再分割を行う。
テセレータはその処理を通して、「GL_TRIANGLE」, 「GL_TRIANGLE_FAN」...などの中で、
どれが効率的かを判断し、OpenGLのレンダリングパイプラインへまわす。
もし、どんなプリミティブを使用したかを知りたい場合、
例えば、以下のようにコールバック関数の登録する。
[例]
サンプルコード >> 基本編13::まとめコード1
関連:基本編13::穴のあるポリゴン、基本編13::辺の交差
ポリゴンに穴があったり、辺が交差する事がないような場合、
単純な再分割を行う。
テセレータはその処理を通して、「GL_TRIANGLE」, 「GL_TRIANGLE_FAN」...などの中で、
どれが効率的かを判断し、OpenGLのレンダリングパイプラインへまわす。
もし、どんなプリミティブを使用したかを知りたい場合、
例えば、以下のようにコールバック関数の登録する。
[例]
#ifndef CALLBACK #define CALLBACK #endif ... ... const char* getPrimitiveType(GLenum type) { switch(type) { case GL_POINTS: return "GL_POINTS"; break; case GL_LINES: return "GL_LINES"; break; case GL_LINE_LOOP: return "GL_LINE_LOOP"; break; case GL_LINE_STRIP: return "GL_LINE_STRIP"; break; case GL_TRIANGLES: return "GL_TRIANGLES"; break; case GL_TRIANGLE_STRIP: return "GL_TRIANGLE_STRIP"; break; case GL_TRIANGLE_FAN: return "GL_TRIANGLE_FAN"; break; case GL_QUADS: return "GL_QUADS"; break; case GL_QUAD_STRIP: return "GL_QUAD_STRIP"; break; case GL_POLYGON: return "GL_POLYGON"; break; } return NULL; } //コールバック関数 void CALLBACK TessBeginCB( GLenum type ) { glBegin(type); std::cout << "Used Primitive :" <<getPrimitiveType(type)<< "\n"; } ... ... tess = gluNewTess(); gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK*)(void))TessBeginCB); ... ...
サンプルコード >> 基本編13::まとめコード1