如何在beginNativePainting()中翻转纹理?

时间:2012-01-24 14:27:10

标签: c++ qt opengl textures qglwidget

我正在编写一个继承自 QGLWidget

的类
class GLWidget : public QGLWidget
{
    Q_OBJECT

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

    void paintEvent(QPaintEvent *event);    

private:
    QImage* _frame;
};

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

问题是图像正在翻转(垂直)显示,我需要解决这个问题。我还没有找到办法,所以我希望有人可以帮我解决这个问题。

在原生Glut应用程序中,我可以像这样简单地调用endNativePainting()进行翻转:

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)方法进行翻转对图像的显示没有任何影响。

1 个答案:

答案 0 :(得分:3)

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

BTW:OpenGL假设左下角有纹理图像数据的来源(与大多数窗口系统相反,左上角有它)。