我正在编写一个继承自QGLWidget:的类
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
GLWidget(QWidget *parent = 0);
~GLWidget();
void paintEvent(QPaintEvent *event);
private:
QImage* _frame;
};
GLWidget
的构造函数从磁盘加载图像,paintEvent()
负责使用在beginNativePainting()
和endNativePainting()
之间执行的本地OpenGL调用将数据发送到GPU,这可以正常工作
问题是图像被翻转(垂直)显示,我需要解决这个问题。我还没有找到解决这个问题的方法,所以我希望有人能在这个问题上帮助我。
在原生的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()
,结果只得到一个黑屏(这意味着它没有按预期工作)。
有什么建议吗?
此外,使用QImage
的mirrowed(false, true)
方法进行翻转对图像的显示没有任何影响。
不要翻转投影,镜像纹理坐标。
BTW:OpenGL假设纹理图像数据的原点在左下角(与大多数窗口系统相反,后者在左上角)。