Qt/OpenGL - 渲染的图元被扭曲
Posted
技术标签:
【中文标题】Qt/OpenGL - 渲染的图元被扭曲【英文标题】:Qt/OpenGL - rendered primitives are distorted 【发布时间】:2015-01-29 16:01:15 【问题描述】:我在 youtube 上关注如何在 Qt 中使用 OpenGL 的教程。我有两个班级:
glWidget -> 从 QGLWidget 继承; GLWindow -> 继承自 QMainWindow 并有一个窗体。
在 GLWindow 的表单中,我放置一个 Widget 并将其提升为 glWidget,以便在 glWidget 上呈现的任何内容都通过 GLWindow 上的 Widget 显示。
我在glWidget中实现了以下继承函数:
void glWidget::initializeGL()
glClearColor(0.1, 0.1, 0.1, 1.0);
void glWidget::paintGL()
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(0.2, 0.8, 0.1);
glVertex3f(-0.5, -0.5, 0.0);
glColor3f(0.8, 0.3, 0.9);
glVertex3f(0.5, -0.5, 0.0);
glColor3f(0.1, 0.1, 0.5);
glVertex3f(0.0, 0.5, 0.0);
glEnd();
我计划稍后使用着色器和缓冲区,但我不明白为什么我的渲染图元看起来像这样:
看起来三角形已经在世界空间而不是局部空间中进行了变换。如果它在本地空间中,那么三角形将出现在屏幕的中心。我指的教程可以在这里找到:https://www.youtube.com/watch?v=1nzHSkY4K18
我不知道我在这里做错了什么。起初我认为这与我的顶点有关,我知道这是立即模式,可能应该尝试使用缓冲区/着色器;但我仍然想了解我在这里做错了什么。为什么三角形没有像教程中出现的那样被渲染?我应该在 glWidget 的构造函数中传递一些东西吗?
【问题讨论】:
你是否实现了 resizeGL 并将其留空? 谢谢,现在可以正常渲染了! 好的,我会为以后的读者解答。 【参考方案1】:当扩展 QGLWidget 时,请记住 resizeGL() 将被自动调用:
resizeGL() - 设置 OpenGL 视口、投影等。在调整小部件大小时调用(以及首次显示时,因为所有新创建的小部件都会自动获得调整大小事件)。
在您的情况下,小部件似乎会自动调整大小,因此解决方案是覆盖它并让它为空。
在扩展 QGLWidget 时,最好同时覆盖 resizeGL 函数。
【讨论】:
以上是关于Qt/OpenGL - 渲染的图元被扭曲的主要内容,如果未能解决你的问题,请参考以下文章