C++メモ XCodeを使ってOpenGLでウィンドウの背景色をつけてみる

Mac,プログラミング

前回の続き(コーディングできるまでの手順の記事はここ)。

次のフレームワークを追加する。

  • OpenGL.framework

glClearColorってメソッドでウィンドウの背景色を指定する。
glClearColorの入力になる引数のポイントはこんな感じ。

  • 引数の型はfloat
  • 引数は赤色、緑色、青色、透明度って順番
  • 赤色、緑色、青色、透明度の値は0〜1で指定
    ※色をRGBで考えるときは255で割って0〜1になるようにする

glClearColorを呼び出しただけだと実行しても起きない。
次のメソッドをglutDisplayFuncの引数で指定したメソッド(あとに書くコードのdisplayってメソッド)に、

  1. glClearっていうバッファをクリアしてくれるメソッドを呼び出す
    ※引数はバッファをクリアするのは背景だよ意味のGL_COLOR_BUFFER_BITって定数を指定する
  2. glFlushっていう描画処理を実行してくれるメソッドを呼び出す

で、コードはこんな感じ。

//
//  main.cpp
//  ProtoOpenGL
//
//  Created by tetsuya yoshida on 2012/12/05.
//
//

#include <iostream>
#include <GLKit/GLKit.h>
#include <GLUT/GLUT.h>

// コールバック関数
void display(void)
{
	// 背景を塗りつぶす(バッファをクリアする)
	glClear(GL_COLOR_BUFFER_BIT);
	// 描画処理を実行する
	glFlush();

	return;
}

// メイン関数
int main(int argc, const char * argv[])
{
	// ウィンドウのタイトル名となる文字列を決める
	char title[80] = "sample";
	// GLUTライブラリを初期化する
	glutInit(&amp;argc, (char**)argv);
	// ウィンドウを生成する(引数の文字列をウィンドウ名に設定する)
	glutCreateWindow(title);
	// カレントウィンドウに対するコールバック関数を設定する
	glutDisplayFunc(display);

	// 背景色を決める
	float red = 255.0f/255.0f;  // 赤色
	float green = 155.0f/255.0f;    // 緑色
	float blue = 0.0f/255.0f;   // 青色
	float alpha = 0.0f/100.0f;  // 透明度
	// ウィンドウの背景色を設定する
	glClearColor(red, green, blue, alpha);

	// メインループを開始する
	glutMainLoop();

	return 0;
}

実行した結果はこんな感じ。

ちなみに、今回のコードだとウィンドウのサイズをいくら変更しても、ウィンドウの背景色は決めた色になる。
その訳は、こんな処理が行われるから。

  1. ウィンドウのサイズを変更した場合、glutDisplayFuncメソッドで指定した設定したコールバック処理をするメソッド(コードではdisplayメソッド)が呼ばれる
  2. displayメソッドで、glClearとglFlushが呼ばれる
  3. 描画処理する
    ※要するに再描画する

ま、自分へのメモってことで。