最終更新: mikk_ni3_92 2008年11月14日(金) 17:41:19履歴
現在地 >> メニュー >> 基本編22
INDEX:基本編21 << 基本編22 >> 基本編23
ウィンドウのサイズやビューポートを画像のサイズに合わせる。
なお、
[例]
■ピクセルの拡大は、
これをひとつにまとめると、
注意点として反転した場合は、描画開始位置を「左上原点」の位置にする必要がある。
もし、glOrtho()やgluOrth2D()関数でスクリーンの3次元空間上のサイズを指定しない場合、
(2×2)のスクリーンが3次元空間上に用意される。
従って、スクリーンの左上は、(-1,1)となる。(スクリーンの中心が原点)
[例]:gluOrth2D()関数でスクリーンを設定
※メモ
OpenCVの場合はcvFlip()関数で反転できる。
描画は、glDrawPixels()関数で行う。
[例]
サンプル >> 基本編22::まとめコード
INDEX:基本編21 << 基本編22 >> 基本編23
ウィンドウのサイズやビューポートを画像のサイズに合わせる。
なお、
- 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()関数で反転できる。
描画は、glDrawPixels()関数で行う。
[例]
... ... glDrawPixels(imgA->width,imgA->height,GL_BGR,GL_UNSIGNED_BYTE,imgA->imageData); ... ...
サンプル >> 基本編22::まとめコード