Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

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

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();
kikuchi-hiroshi
SIer系のSEを経て、オンラインゲームのサーバを担当。 現在は渋谷のソーシャルゲーム系企業に勤めるエンジニアです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away