目次

010 図形の描画

概要

GLUTを使うとちょっとした図形が簡単に表示できます。

立方体の描画

#include <GL/glew.h>
#include <GL/freeglut.h>
 
#pragma comment(lib, "glew32.lib")
 
// 色
GLfloat color[] =
{
	1.0f, 0.0f, 0.0f, 1.0f
};
 
//ライトの位置
GLfloat light_pos[] =
{
	200.0f,		// X
	150.0f,		// Y
	-500.0f,	// Z
	1.0f		// W
};
 
void displayCallBack()
{
	// 画面の初期色設定。
	glClearColor( 0.5f, 0.5f, 0.5f, 1.0f );
 
	// 画面クリア。
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
 
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
 
	int window_width = glutGet( GLUT_INIT_WINDOW_WIDTH );
	int window_height = glutGet( GLUT_INIT_WINDOW_HEIGHT );
	gluPerspective( 30.0f, (double)window_width / (double)window_height, 1.0f, 1000.0f );
 
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
 
	// 視点の設定
	gluLookAt(
		150.0f, 100.0f, -150.0f, //カメラの座標
		0.0f, 0.0f ,0.0f ,		// 注視点の座標
		0.0f, 1.0f, 0.0f );		// 画面の上方向を指すベクトル
 
	// ライトの設定
	glLightfv( GL_LIGHT0, GL_POSITION, light_pos );
 
	// マテリアルの設定
	glMaterialfv( GL_FRONT, GL_DIFFUSE, color );
 
	// 立方体の描画。
	glutSolidCube( 60.0f );
 
	glutSwapBuffers();
}
 
void reshapeCallBack( int _width, int _height )
{
	glViewport( 0, 0, _width, _height );
}
 
void idleCallBack()
{
	glutPostRedisplay();
}
 
int main( int argc, char *argv[] )
{
	// GLUTの初期化
	glutInit( &argc, argv );
 
	// ウィンドウの位置を指定。
	glutInitWindowPosition( 100, 100 );
 
	// ウインドウサイズ指定
	glutInitWindowSize( 640, 480 );
 
	// ウインドウの表示モード指定
	glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );
 
	// ウインドウ生成
	glutCreateWindow( argv[0] );
 
	// コールバック関数の登録。
	glutDisplayFunc( displayCallBack );		// ディスプレイ。
	glutIdleFunc( idleCallBack );			// アイドル。
	glutReshapeFunc( reshapeCallBack );		// ウインドウリサイズ時コールバック。
 
	// 深度有効。
	glEnable( GL_DEPTH_TEST );
	// ライト有効。
	glEnable( GL_LIGHTING );
	// ライト01番有効。
	glEnable( GL_LIGHT0 );
 
	// メインループ
	glutMainLoop();
 
	return 0;
}

球体の描画

glutSolidSphere(40.0,16,16);

トーラスの描画

GLdouble innerRadius = 20.0f;	// 内側の円の半径。
GLdouble outerRadius = 40.0f;	// 外側の円の半径。
GLint sides = 16;				// 断面の分割数。
GLint rings = 16;				// 円の分割数。
glutSolidTorus( innerRadius, outerRadius, sides, rings );

円錐の描画

GLdouble base	= 20.0f;	// 底辺の円の半径。
GLdouble height	= 60.0f;	// 外側の円の半径。
GLint slices	= 16;		// 断面の分割数。
GLint stacks	= 16;		// 円の分割数。
glutSolidCone( base, height, slices, stacks );

ティーポットの描画

glutSolidTeapot( 40.0 );