Я пишу класс, который наследуется от QGLWidget :
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
GLWidget(QWidget *parent = 0);
~GLWidget();
void paintEvent(QPaintEvent *event);
private:
QImage* _frame;
};
Конструктор GLWidget
загружает изображение с диска, а paintEvent()
отвечает за отправку данных в графический процессор с помощью собственных вызовов OpenGL, которые выполняются между beginNativePainting()
и 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
для переворачивания не оказало никакого влияния на отображение изображения.