Warning: Declaration of action_plugin_linebreak::register(&$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/wiki/lib/plugins/linebreak/action.php on line 0

Warning: Declaration of action_plugin_syntaxhighlighter3_action::register(Doku_Event_Handler &$controller) should be compatible with DokuWiki_Action_Plugin::register(Doku_Event_Handler $controller) in /home/stepism/www/wiki/lib/plugins/syntaxhighlighter3/action/action.php on line 0

Warning: Declaration of syntax_plugin_linebreak::handle($match, $state, $pos, &$handler) should be compatible with DokuWiki_Syntax_Plugin::handle($match, $state, $pos, Doku_Handler $handler) in /home/stepism/www/wiki/lib/plugins/linebreak/syntax.php on line 19

Warning: Declaration of syntax_plugin_linebreak::render($mode, &$renderer, $data) should be compatible with DokuWiki_Syntax_Plugin::render($format, Doku_Renderer $renderer, $data) in /home/stepism/www/wiki/lib/plugins/linebreak/syntax.php on line 19
010 図形の描画 [stepism]

ユーザ用ツール

サイト用ツール


サイドバー

About

Contents

Materials Link

その他

PR


wiki:opengl:tips:010

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 ); 
wiki/opengl/tips/010.txt · 最終更新: 2014/11/07 07:23 (外部編集)