将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),即一条黑线,然后是紫线,然后在不可见的底部区域是红线。

好我换
glRasterPos2i( 0, SCREEN_HEIGHT - 1 );


glRasterPos2i( 0, SCREEN_HEIGHT );

不,输出已损坏。奇怪的是,如果我将其更改为:
glRasterPos2f( 0, SCREEN_HEIGHT - 0.1 );

它可以正常工作,以正确的顺序绘制两条线(SCREEN_HEIGHT和SCREEN_HEIGHT-1.0导致与整数版本相同的结果)。

我在这里做错了什么? SCREEN_WIDTH = 320,SCREEN_HEIGHT = 240。

最佳答案

消费级硬件仅很少支持glDrawPixels。并且在较新的OpenGL版本中,它已被完全删除。无需花费时间尝试使其工作,只需将图像加载到纹理中,并使用平凡的着色器绘制带有纹理的四边形即可。

相信我,弄乱glDrawPixels是不值得的。

关于c++ - 使用glDrawPixels时将图片上下颠倒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15871616/

10-11 01:12