第 3 章 プログラムの作成
3.2 ソースプログラムの作成
3.2.5 OpenGL の初期設定
glfwMakeContextCurrent() 関数で OpenGL による描画を行うウィンドウを指定すれば、ようや
く OpenGL の機能が使用できるようになります。
l メインプログラム (main.cpp) の変更点
ここでは glClearColor() 関数により表示領域を消去する色 (背景色) を設定します。この最初
の三つの引数は、塗りつぶす色を (赤, 緑, 青) の光の三原色の割合で表します。ここでは白 (1,
1, 1) にしています。第4引数は不透明度を表します。ここでは透明 (0) にしています。
#include <iostream>
#include <GLFW/glfw3.h>
int main() {
// GLFW を初期化する
if (glfwInit() == GL_FALSE) {
// 初期化に失敗した
std::cerr << "Can't initialize GLFW" << std::endl;
return 1;
}
// ウィンドウを作成する
GLFWwindow *const window(glfwCreateWindow(640, 480, "Hello!", NULL, NULL));
if (window == NULL) {
// ウィンドウが作成できなかった
std::cerr << "Can't create GLFW window." << std::endl;
glfwTerminate();
return 1;
}
// 作成したウィンドウを OpenGL の処理対象にする glfwMakeContextCurrent(window);
// 背景色を指定する
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
}
void glClearColor(GLfloat R, GLfloat G, GLfloat B, GLfloat A)
glClear(GL_COLOR_BUFFER_BIT) でウィンドウを塗り潰す色を指定します。
R,G,B
それぞれ赤色、緑色、青色の成分の強さを示す GLfloat 型 (float 型と等価) の 0~1 の値。
1 が最も明るく、それぞれ 0, 0, 0 を指定すれば黒色、1, 1, 1 を指定すれば白色 (図 40)。
図 40 R, G, B の値と色
A
アルファ値と呼ばれ、OpenGL では不透明度として扱われます (0 で透明、1 で不透明)。
補足:OpenGL のデータ型
グラフィックスハードウェア (GPU) が内部的に使用しているデータの書式がプラットフォー
ム (CPU) と一致しているとは限らないので、OpenGL で取り扱うデータには独自のデータ型が
割り当てられています (表 2)。
しかし、基本的には、そのデータ型は CPU、あるいは使用するプログラミング言語のものに対 応付けられています。たとえば GLubyte 型は C 言語あるいは C++ 言語の unsigned char 型に 対応し、GLfloat 型は float 型に対応します。なお、OpenGL 4.2 では GLclampf 型と GLclampd 型は廃止され、それぞれ GLfloat、GLdouble に置き換えられました (表 2の <注>)。
なお、GLhalf 型に対応する CPU 側のデータ型は存在しないため、CPU 側でこの値をそのま ま計算などに用いることはできません。しかし、グラフィックスハードウェアから取り出して CPU 側で保持しておくことは可能です。
表 2 OpenGL のデータ型
OpenGL のデータ型 最小ビット数 説明
GLboolean 1 論理値
GLbyte 8 符号付き二進整数(二の補数表現)
GLubyte 8 符号なし二進整数
GLchar 8 文字列中の文字
GLshort 16 符号付き二進整数(二の補数表現)
GLushort 16 符号なし二進整数
GLint 32 符号付き二進整数(二の補数表現)
GLuint 32 符号なし二進整数
GLint64 64 符号付き二進整数(二の補数表現)
GLuint64 64 符号なし二進整数
GLsizei 32 非負の二進整数で表したサイズ
GLenum 32 二進整数で表した列挙子
GLintptr ※ 符号付き二進整数(二の補数表現)
GLsizeiptr ※ 非負の二進整数で表したサイズ
GLsync ※ 同期オブジェクトのハンドル
GLbitfield 32 ビットフィールド
GLhalf 16 符号なしの値に符号化された半精度浮動小数点数
GLfloat 32 単線度浮動小数点数
GLclampf 32 [0, 1] にクランプされた単精度浮動小数点数 <注>
GLdouble 64 倍線度浮動小数点数
GLclampd 64 [0, 1] にクランプされた倍精度浮動小数点数 <注>
※ ポインタ(アドレス)を保持するのに必要なビット数