現在地 >> メニュー >> 基本編13 >> 基本編13::単純な再分割
関連:基本編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

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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