我看了很多关于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/