ベジェ曲線・曲面

2010年1月4日

ファイル

09-bezier.tar.gz (曲線)

09-bezier2.tar.gz (曲面)

内容

ベジェ曲線・曲面を描画します。ベジェ曲線を描画する場合、以下のような準備が必要です。

	glMap1f(GL_MAP1_VERTEX_3, 0., 1., stride, n, &ctrlPoint[0][0]);
	glEnable(GL_MAP1_VERTEX_3);
	glMapGrid1f(100, 0., 1.);

glMap1f の 1 は 1 次元を表わします。第 1 引数の GL_MAP1_VERTEX_3 は 3 次元の点を生成するための指定です。第 2, 3 引数の 0., 1. は始点と終点で、通常はこの通り指定します。第 4 引数 stride は配列の行を移動するときの移動量、ここでは配列 ctrlPoint が 4x3 の配列なので、stride = 3 となります。第 5 引数 n はベジェ曲線の制御点の数が入ります。第 6 引数 ctrlPoint はベジェ曲線の制御点の情報が入った配列です。

static const int n = 4;
static const int stride = 3;
static const GLfloat ctrlPoint[4][3] = {
	{-0.5, 0., 0.},
	{-0.25, 0.5, 0.},
	{0.25, -0.5, 0.},
	{0.5, 0., 0.},
};

glEnable() では、GL_MAP1_VERTEX_3 を有効にしています。glMapGrid1f() はベジェ曲線のグリッドを設定しています。第 1 引数は分割数、第 2, 3 引数は始点と終点です。

glEvalMesh1() でベジェ曲線を描画します。

	glEvalMesh1(GL_LINE, 0, 100);

第 1 引数 GL_LINE は描画タイプで、他に GL_POINT も指定できます。第 2, 3 引数は、描画始点と終点のグリッド番号です。

ベジェ曲面は、ベジェ曲線の GL_MAP1_VERTEX_3, glMap1f(), glMapGrid1f(), glEvalMesh1() の代わりに GL_MAP2_VERTEX_3, glMap2f(), glMapGrid2f(), glEvalMesh2() を使えば描画できます。

OpenGL プログラミング 目次へ