我正在使用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);
答案 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);
}