我看了很多关于OpenGL而不是绘图,常见错误等的文章和问题。这让我很困扰。

我尝试了glOrtho的几种不同设置,不同的顶点位置,颜色等,但都无济于事。

可以确认 OpenGL状态是有效的,因为代码中的透明颜色为紫色(意味着窗口为紫色)。 gDEBugger还在确认帧正在更新(Fraps也是如此)。

这是代码。标有“没有帮助”的行最初不存在,是我尝试过并失败的事情。

QTWindow::QTWindow( )
{
    // Enable mouse tracking
    this->setMouseTracking(true);
}

void QTWindow::initializeGL()
{
    // DEBUG
    debug("Init'ing GL");
    this->makeCurrent(); ///< Didn't help
    this->resizeGL(0, 0); ///< Didn't help
    glDisable(GL_CULL_FACE); ///< Didn't help
    glClearColor(1, 0, 1, 0);
}

void QTWindow::paintGL()
{
    // DEBUG
    debug("Painting GL");
    this->makeCurrent(); ///< Didn't help
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,1,1);
    glBegin(GL_TRIANGLES);
    glVertex2f(500,100);
    glVertex2f(100,500);
    glVertex2f(0,0);
    glEnd();
    this->swapBuffers(); ///< Didn't help
}

void QTWindow::resizeGL(int width, int height)
{
    // DEBUG
    debug("Resizing GL");
    this->makeCurrent(); ///< Didn't help
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1000, 0, 1000, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

即使关闭了剔除,三角形也不会显示。但是,这三个调试日志的名称完全相同。

我想念什么?

最佳答案

尝试在QTWindow::resizeGL()函数的最开始处调用glViewport()函数:

glViewport(0, 0, width, height);

并且永远不要调用width和height设置为0的resizeGL();)除此之外,您不必直接调用resizeGL(),因为无论何时调整窗口大小,Qt都会调用resizeGL()。

您可以删除对swapBuffers()函数的所有调用-Qt在内部对其进行调用。

应该在所有其他GL调用之前调用makeCurrent()函数,因此最好在initializeGL()中调用它,但是不必在paintGL()函数中调用它(除非paintGL()正在被调用)从另一个线程调用,但我敢打赌它不在您的代码中)。

关于c++ - QGLWidget拒绝画任何东西,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14763940/

10-11 15:54