現在地 >> メニュー >> 基本編22
INDEX:基本編21 << 基本編22 >> 基本編23

PixMapの描画


OpenGLは格納してあるピクセルデータを描画する事が可能である。
(※つまり、読み込んだ画像を表示することができる)

手順

  1. 画像を読み込む
  2. 描画の設定
  3. 描画する

[1]:画像を読み込む


OpenCVやAUXライブラリなどで読み込んだり、自分で関数を作成して読み込む。
ここでは、OpenCVで読み込んだものとする。

[2]:描画の設定


ウィンドウのサイズやビューポートを画像のサイズに合わせる。
なお、
  • OpenGLはピクセルデータを描画する際にウィンドウの「左下」から描画する → 場合によっては反転する。
  • ウィンドウをサイズを変更した時(reshapeが呼ばれた時) → 拡大・縮小対策
などの操作をいれるとよい。

[例]

void reshape(int w, int h)
{
	glViewport(0, 0, w, h);
	//反転とウィンドウの拡大・縮小対策
	glPixelZoom(static_cast<float>(w)/imgA->width, -static_cast<float>(h)/imgA->height);
	glRasterPos2i(-1, 1);//反転した場合の描画位置
}


■ピクセルの拡大は、
glPixelZoom(static_cast<float>(w)/imgA->width, static_cast<float>(h)/imgA->height);
■上下反転は
glPixelZoom( 1.0f, -1.0f );
で実現でき、

これをひとつにまとめると、
glPixelZoom(static_cast<float>(w)/imgA->width, -static_cast<float>(h)/imgA->height);
となる。


注意点として反転した場合は、描画開始位置を「左上原点」の位置にする必要がある。
もし、glOrtho()やgluOrth2D()関数でスクリーンの3次元空間上のサイズを指定しない場合、
(2×2)のスクリーンが3次元空間上に用意される。
従って、スクリーンの左上は、(-1,1)となる。(スクリーンの中心が原点)

[例]:gluOrth2D()関数でスクリーンを設定

void reshape(int w, int h)
{
	glViewport(0, 0, w, h);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0,w,h,0);
	glMatrixMode(GL_MODELVIEW);

	glPixelZoom(static_cast<float>(w)/imgA->width, -static_cast<float>(h)/imgA->height);
	
	glRasterPos2i(0, 0); //(0,0)を指定
}



※メモ
OpenCVの場合はcvFlip()関数で反転できる。

[3]:描画


描画は、glDrawPixels()関数で行う。

[例]

... ...
glDrawPixels(imgA->width,imgA->height,GL_BGR,GL_UNSIGNED_BYTE,imgA->imageData);
... ...


サンプル >> 基本編22::まとめコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます