OpenGL講習 インデックスに戻る

内容

まずはポリゴンを組み合わせて、立方体を描画します。
次にgluが提供する基本図形描画機能を利用して、球体を描画します。
また図形描画を行う位置を好みで変更できるようにします。

Sample05.jpg

ソースダウンロード

http://dl.getdropbox.com/u/235401/OpenGL/Sample05.zip

解説

照明

立体を描画するにあたって、まずは照明効果を有効にします。
これをしないとそれぞれの面が全ておなじ色で描画されてしまうため、
立体感がない絵ができあがってしまいます。

 
glEnable( GL_LIGHTING );
 

まずはこれで、照明効果を有効にします。

 
glEnable( GL_LIGHT0 );
 
GLfloat light0[] = { 2.0, 3.0, 5.0, 1.0 };
GLfloat ambient[] = { 0.2, 0.2, 0.2, 1.0 };
glLightfv( GL_LIGHT0, GL_POSITION, light0 );
glLightfv( GL_LIGHT0, GL_AMBIENT, ambient );
 

次に照明0番を有効にし、そのパラメータを設定します。

下の部分では、その照明0番の向きと色(強さ)を設定しています。
GL_POSITIONで位置を、GL_AMBIENTで色の設定ですね。

ちなみにOpenGLでは、照明は0番〜7番の8つが利用できます。

立方体

 
glBegin( GL_QUADS );
{
	GLfloat red[] = { 1.0, 0.0, 0.0, 1.0 };
	GLfloat green[] = { 0.0, 1.0, 0.0, 1.0 };
	GLfloat blue[] = { 0.0, 0.0, 1.0, 1.0 };
	GLfloat yellow[] = { 1.0, 1.0, 0.0, 1.0 };
	GLfloat cyan[] = { 0.0, 1.0, 1.0, 1.0 };
	GLfloat magenda[] = { 1.0, 0.0, 1.0, 1.0 };
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, red );
	glVertex3d( -1, -1, -1 );
	glVertex3d( -1, -1, 1 );
	glVertex3d( -1, 1, 1 );
	glVertex3d( -1, 1, -1 );
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, green );
	glVertex3d( 1, -1, -1 );
	glVertex3d( 1, 1, -1 );
	glVertex3d( 1, 1, 1 );
	glVertex3d( 1, -1, 1 );
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, blue );
	glVertex3d( -1, -1, -1 );
	glVertex3d( 1, -1, -1 );
	glVertex3d( 1, -1, 1 );
	glVertex3d( -1, -1, 1 );
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, yellow );
	glVertex3d( -1, 1, -1 );
	glVertex3d( -1, 1, 1 );
	glVertex3d( 1, 1, 1 );
	glVertex3d( 1, 1, -1 );
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, cyan );
	glVertex3d( -1, -1, -1 );
	glVertex3d( -1, 1, -1 );
	glVertex3d( 1, 1, -1 );
	glVertex3d( 1, -1, -1 );
 
	glMaterialfv( GL_FRONT, GL_AMBIENT, magenda );
	glVertex3d( -1, -1, 1 );
	glVertex3d( 1, -1, 1 );
	glVertex3d( 1, 1, 1 );
	glVertex3d( -1, 1, 1 );
}
glEnd();
 

長くてベタですが、ポイントだけ見ておきましょう。

まずglBeginにGL_QUADSという値を渡しています。
これは4つの頂点を指定して、四角形を描画するという意味です。

その後glVertex3dを4回1セットで四角形を1枚描画しますが、
その前にglMaterialfvという関数を呼んでいます。
以前はglColor3fといった関数で色を指定していたのですが、
この方法では今のように照明を有効にしている場合にはうまく色がつきません。
これにかわり、glMaterialfvを使ってマテリアル(材質)を設定というふうにする必要があります。

球体

 
GLUquadricObj* sphere = gluNewQuadric();
gluSphere( sphere, 0.5, 10, 10 );
 

さて立方体はポリゴンもせいぜい6枚ですむため
1枚1枚をわざわざ記述しても大したことはありませんが、
球体を描画しようと思うとなかなか大変です。

gluには球体のほかいくつかの基本図形を描画してくれる便利な関数があるので
これを使って楽をしてしまいましょう。

gluSphereというのが球体を描画してくれる関数です。
第2引数が表示したい球の半径、第3,4引数がそれぞれ経度・緯度方向のポリゴン分割数です。

位置設定

 
glTranslated( 1.0, 2.0, 0.0 );
GLUquadricObj* sphere = gluNewQuadric();
gluSphere( sphere, 0.5, 10, 10 );
glTranslated( -1.0, -2.0, 0.0 );
 

さて球体を描画する部分をはさんでglTranslatedという関数を2回呼んでいたのですが、
これによって図形の描画位置を決めています。


添付ファイル: fileSample05.jpg 1067件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-24 (日) 17:14:24 (2586d)