gpt4 book ai didi

c++ - QGLWidget 拒绝绘制任何东西

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:09 27 4
gpt4 key购买 nike

我看了很多关于 OpenGL 不绘图、常见错误等的文章和 SO 问题。这个让我很困惑。

我已经为 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);

并且永远不要在 widthheight 设置为 0 的情况下调用 resizeGL() ;) 除此之外,您没有必要直接调用 resizeGL()因为每当调整窗口大小时 Qt 都会调用它。

您可以删除对 swapBuffers() 函数的所有调用 - 它由 Qt 内部调用。

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com