macでGLUTを触ってみた vol.2


前回、ウィンドウを描画した所で、
終了したので今回はその続きから。

まず、先に前回のコンパイルオプションの指定で、
間違いがありましたので訂正。
まずは、前回と今回のコマンドを載せます。

GLUT API リファレンス(日本語)
http://www.asahi-net.or.jp/~yw3t-trns/opengl/glut/glut.htm#init

OpenGL 4 Reference
http://www.opengl.org/sdk/docs/man4/xhtml/

コンパイル

(前回)

gcc sample01.cpp -o sample01.out -Wall -framework GLUT -framework OpenGL

(今回)

gcc sample02.cpp -o sample02.out -Wall -framework GLUT -framework OpenGL -lstdc++

-lstdc++ を追加しています。

詳細はこの辺を参考にしてください。
gccの使い方メモ#03 gccとg++(其の弐)


さて、今回のサンプルプログラムはこちら。

[sample02.cpp]

#include <OpenGL/gl.h>
#include <GLUT/glut.h>

/**
 * 描画
 **/
void draw( void )
{
  // 背景色指定(R:Red,G:Green:B:Blue,A:Alpha)
  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );  

  // バッファをクリア
  glClear( GL_COLOR_BUFFER_BIT );

  // 強制描画
  glFlush();
}

/**
 * 更新
 **/
void update(void)
{
}


/**
 * メイン関数
 **/
int main( int argc, char* argv[] )
{
  // 初期化
  glutInit( &argc, argv );

  // ウィンドウサイズの設定(640x480)
  glutInitWindowSize( 640, 480 );

  // ウィンドウの作成
  glutCreateWindow( "ウィンドウの初期化" );

  // 描画
  glutDisplayFunc( draw );

  // ループ処理
  glutMainLoop();

  return 0;
}

※新たに使用している関数について説明

オプション 説明 引数
GLUTAPI void APIENTRY glutInitWindowSize(int width, int height); ウィンドウサイズの指定 width:幅、height:高さ
GLUTAPI int GLUTAPIENTRY glutCreateWindow(const char *title); ウィンドウの作成 title:ウィンドウタイトルバーに表示する文字列
void glClearColor( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); 画面クリア時の色指定 red:赤、green:緑、blue:青、 alpha:透明度
void glClear( GLbitfield mask ); クリアのバッファを指定 mask:マスクの設定
void glFlush( void ); 強制実行 -
  // ウィンドウサイズの設定(640x480)
  glutInitWindowSize( 640, 480 );

ウィンドウのサイズを 幅:640高さ:480 に設定。
640 x 480 なのは、画面解像度を調べてください。

  // ウィンドウの作成
  glutCreateWindow( "ウィンドウの初期化" );

「ウィンドウの初期化」というのをタイトルバーに設定。

  // 背景色指定(R:Red,G:Green:B:Blue,A:Alpha)
  glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );  

RGBAカラーとは、PCで色を表現する際に用いられる表記法の一つ。
それぞれ 0.0 〜 1.0 の間で指定。
RGBの値が大きいほど明るくなり、値が小さいほど暗くなります。
Aの値は アルファ値 と呼び、アルファ値を保存するデータ領域は アルファチャンネル と呼びます。

今回の場合は、全て 0 を指定しているので、 となります。
※RGB全てを 1 に指定すると、 となります。

  // バッファをクリア
  glClear( GL_COLOR_BUFFER_BIT );

[マスク値の説明]
GL_COLOR_BUFFER_BIT:カラーバッファ
GL_DEPTH_BUFFER_BIT:深度バッファ
GL_STENCIL_BUFFER_BIT:ステンシルバッファ

※ちなみにマスク値を複数設定する場合には、パイプ(|)で接続します。

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  // 強制描画
  glFlush();