STEP04:OpenGLの座標系の話-その1(2D)-

STEP03では様々な図形を描画したが、実際に自分の意図した形状を描画するためには、頂点の位置をどのように設定したら良いかを知る必要がある。ここでは頂点の位置を表す座標系について説明する。

まずは以下の図を見てほしい。
STEP04_00

これはOpenGLがウィンドウ上に描画を行う際の頂点位置の座標系を表している。
座標系の原点(0,0)の位置はウィンドウの中央の位置にとなる。
そしてウィンドウの左端の位置はX = -1 であり、右端は X = 1 である。
同様にウィンドウの上端は Y = -1 であり、下端は Y = 1 となる。
なお、この座標系はOpenGLのデフォルト状態での設定であり、これを変更することが可能である。
それについては次以降で説明していく。

上記の事を踏まえて、以下のコードを実行してみてほしい。

//////////////////////////////////////////////
// Copyright Ryo Ishikawa 2014. (http://www.ryoxx.org/)
//////////////////////////////////////////////
/// @file Step04_Coordinate2D.cpp
/// @brief Step04 「座標系(2D)」のソースコード

#include<gl/glut.h>

// 描画を行う関数
void displayFunc(void)
{
	glClear(GL_COLOR_BUFFER_BIT);

	//★四角形を描画★
	glBegin(GL_QUADS);
	glVertex2d(-0.5, 0.5);//★左上
	glVertex2d(-0.5,-0.5);//★左下
	glVertex2d( 0.5,-0.5);//★右下
	glVertex2d( 0.5, 0.5);//★右上
	glEnd();

	glFlush();
}

// メイン関数
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutCreateWindow(argv[0]);
	glutDisplayFunc(displayFunc);

	glClearColor(0.0, 0.0, 0.0, 1.0);

	glutMainLoop();

	return 0;
}

このコードを実行すると、以下のようなウィンドウが現れるはずである。
STEP04_01

コードを見てもらえばわかるように、ここでは、原点を中心としてX,Yの各方向に±0.5の大きさ(つまり縦横1.0)の四角形を描画している。

説明した座標系は表示ウィンドウの大きさに対する相対的なものである。つまり、ウィンドウの大きさを変えると、それに伴って表示上の画像の形も変わる。

試しに、表示ウィンドウをマウスでサイズを変えてみてほしい。

STEP04_02

ウィンドウを横に伸ばすと、上記のように描画される形状も横長に変化する。

このようにウィンドウの縦横比と連動して表示される形状の縦横比も変化する。

このような動作が望ましい場合もあるだろうが、これが困る場合も多い。

たとえば、ウィンドウのサイズがどうであっても、正確に正方形を描きたいような場合がある。

このような場合には別途処理を施す必要があるが、それは次ステップ以降で説明していく。