3

我正在编写一个继承自QGLWidget的类:

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();

    void paintEvent(QPaintEvent *event);    

private:
    QImage* _frame;
};

的构造函数GLWidget从磁盘加载图像,并paintEvent()负责使用在beginNativePainting()和之间执行的原生 OpenGL 调用将数据发送到 GPU endNativePainting(),这工作正常。

问题是图像被翻转(垂直)显示,我需要解决这个问题。我还没有找到解决这个问题的方法,所以我希望有人能在这个问题上帮助我。

在本机 Glut 应用程序中,我可以glFrustum()像这样简单地调用来进行翻转:

static void Reshape( int width, int height )
{
   glViewport( 0, 0, width, height );

   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();

   glFrustum( -1.0, 1.0, 1.0, -1.0, 10.0, 100.0 );  // flip vertically

   glMatrixMode( GL_MODELVIEW );
   glLoadIdentity();
   glTranslatef( 0.0, 0.0, -15.0 );
}

但是我尝试在 之后加载投影矩阵,beginNativePainting()glFrustum()使用与上面调用相同的值进行调用,我得到的只是一个黑屏(这意味着它没有按预期工作)。

有小费吗?

此外,使用 的mirrowed(false, true)方法进行QImage翻转对图像的显示没有任何影响。

4

1 回答 1

3

不要翻转投影,镜像纹理坐标。

顺便说一句:OpenGL 假定纹理图像数据的原点位于左下角(与大多数窗口系统相反,后者位于左上角)。

于 2012-01-24T16:14:34.070 回答