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
004 キーボード入力 [stepism]

ユーザ用ツール

サイト用ツール


サイドバー

About

Contents

Materials Link

その他

PR


wiki:opengl:tips:004

004 キーボード入力

概要

キーボードのR、G、B キーを押すと画面の色が変わる様にします。

GLUTソースコード

KeyboardCallBack 関数を登録して、キーボードの入力状態を得ます。

// ディスプレイコールバック 
void displayCallBack() 
{ 
	// 画面クリア。 
	glClear( GL_COLOR_BUFFER_BIT ); 
 
	// ダブルバッファ交換。 
	glutSwapBuffers(); 
} 
 
// キーボード入力用コールバック 
void KeyboardCallBack( unsigned char _key, int _x, int _y ) 
{ 
	switch( _key ) 
	{ 
	case 'r': 
		glClearColor( 1.0, 0.0, 0.0, 1.0 ); 
		break; 
 
	case 'g': 
		glClearColor( 0.0, 1.0, 0.0, 1.0 ); 
		break; 
 
	case 'b': 
		glClearColor( 0.0, 0.0, 1.0, 1.0 ); 
		break; 
 
	case '\033':	// ESC 
		glClearColor( 1.0, 1.0, 1.0, 1.0 ); 
		break; 
	default: 
		break; 
	} 
 
	// ディスプレイコールバック呼び出し。 
	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] ); 
 
	// 画面の初期色設定。 
	glClearColor( 1.0, 1.0, 1.0, 1.0 ); 
 
	// コールバック関数の登録。 
	glutDisplayFunc( displayCallBack );		// ディスプレイ。 
	glutKeyboardFunc( KeyboardCallBack );	// キーボード 
 
	// メインループ 
	glutMainLoop(); 
 
	return 0; 
} 

Win32API版ソースコード

GLUTでは5キー以上の同時入力を受け付けないので、Windows環境であればWindowsAPI を利用した方が良い。

// アイドル時用コールバック 
void IdleCallBack() 
{ 
	if( GetAsyncKeyState('R') & 0x8000 ) 
	{ 
		glClearColor( 1.0, 0.0, 0.0, 1.0 ); 
	} 
	else if( GetAsyncKeyState('G') & 0x8000 ) 
	{ 
		glClearColor( 0.0, 1.0, 0.0, 1.0 ); 
	} 
	else if( GetAsyncKeyState('B') & 0x8000 ) 
	{ 
		glClearColor( 0.0, 0.0, 1.0, 1.0 ); 
	} 
	else if( GetAsyncKeyState(VK_ESCAPE) & 0x8000 ) 
	{ 
		glClearColor( 1.0, 1.0, 1.0, 1.0 ); 
	} 
	// ディスプレイコールバック呼び出し。 
	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] ); 
 
	// 画面の初期色設定。 
	glClearColor( 1.0, 1.0, 1.0, 1.0 ); 
 
	// コールバック関数の登録。 
	glutDisplayFunc( displayCallBack );		// ディスプレイ。 
	glutIdleFunc( IdleCallBack );			// アイドル。 
 
	// メインループ 
	glutMainLoop(); 
 
	return 0; 
} 
wiki/opengl/tips/004.txt · 最終更新: 2014/11/07 03:29 (外部編集)