glDrawPixels() を glRasterPos2*() および glPixelZoom() と組み合わせて使用すると、非常に奇妙な結果が得られます。私は写真を持っていて、古いフレームバッファのように、つまり (0,0) が左上隅にあるように表示したいと思います。コードは次のとおりです。
void GLWidget::resizeGL( int w, int h )
{
glViewport( 0, 0, w, h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, w, 0, h, -1, 1 );
}
void GLWidget::paintGL()
{
for( int i = 0; i < SCREEN_WIDTH; ++i )
{
displayBitmap[i] = 0xf81f;
}
for( int i = 239 * SCREEN_WIDTH; i < 239 * SCREEN_WIDTH + SCREEN_WIDTH; ++i )
{
displayBitmap[i] = 0xf800;
}
//glRasterPos2f( 0, SCREEN_HEIGHT - 0.1 );
glRasterPos2i( 0, SCREEN_HEIGHT - 1 );
glPixelZoom( 1, -1 );
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
glDrawPixels( SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, displayBitmap );
}
このまま実行すると、(0,1) に紫色の線が表示されます。つまり、1 本の黒い線、次に紫色の線、そして目に見えない下の領域にある赤い線です。
OK、だから私は変わる
glRasterPos2i( 0, SCREEN_HEIGHT - 1 );
に
glRasterPos2i( 0, SCREEN_HEIGHT );
いいえ、出力が破損しています。奇妙なことに、次のように変更すると:
glRasterPos2f( 0, SCREEN_HEIGHT - 0.1 );
両方の線が正しい順序で描画されます (SCREEN_HEIGHT と SCREEN_HEIGHT - 1.0 は整数バージョンと同じ結果になります)。
ここで何が間違っていますか?画面の幅 = 320、画面の高さ = 240。