Qt OpenGL纹理不会出现

时间:2015-10-06 14:38:34

标签: c++ qt opengl

我正在使用Qt使用OpenGL创建一个简单的精灵编辑器,但图像不会显示,它只是屏幕上的白色四边形。

我检查了我的代码,我认为一切都是正确的。四边形与图像大小相同,纹理ID不为0.

这是我的代码:

初​​始化:

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_CULL_FACE);

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, win_width, win_height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);

纹理加载:

QImage b = QImage(filename);
m_texture = QGLWidget::convertToGLFormat(b);

glGenTextures(1, &m_id);
glBindTexture(GL_TEXTURE_2D, m_id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
             m_texture.width(),
             m_texture.height(),
             0, GL_RGBA, GL_UNSIGNED_BYTE,
             m_texture.bits());

渲染:

glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, m_id);

glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f);
glVertex2i(0, 0);

glTexCoord2f(1.0f, 0.0f);
glVertex2i(m_texture.width(), 0);

glTexCoord2f(1.0f, 1.0f);
glVertex2i(m_texture.width(), m_texture.height());

glTexCoord2f(0.0f, 1.0f);
glVertex2i(0, m_texture.height());

glEnd();

glBindTexture(GL_TEXTURE_2D, 0);

这是我到目前为止所得到的: White Quad

1 个答案:

答案 0 :(得分:0)

尝试手动将OpenGL版本设置为3.2。

QGLFormat glFormat;
glFormat.setVersion(3, 2);
glFormat.setProfile(QGLFormat::CoreProfile);
QGLFormat::setDefaultFormat(glFormat);

执行此操作后,使用glGetString()打印OpenGL版本。

如果你仍然获得2.1,那么你并没有在正确的OpenGL环境中设置它。我不确定您是如何进行OpenGL调用的,但我使用的是QT Creator Designer,并在主窗口中嵌入了QGLWidget。所以我成功地通过在MainWindow构造函数

中设置OpenGL版本来设置它
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QGLFormat glFormat;
    glFormat.setVersion(3, 2);
    glFormat.setProfile(QGLFormat::CoreProfile);
    QGLFormat::setDefaultFormat(glFormat);
    ui->setupUi(this);
}