Posted at

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();