initializeGL函数由于是初始化,所以只调用一次
而resizeGL和paintGL会多次调用

resizeGL在正常的情况下,触发的条件是,窗口大小发生变化时,resizeGL被调用,之后会触发paint事件,从而调用paintGL()事件处理器。

paintGL在正常的情况下,只要你移动窗口的位置,就会马上触发paint事件,从而调用paintGL事件处理器。当然,还有窗口在隐藏和显示之间变换时,也会触发paint事件,从而调用paintGL事件处理器。

1:initializeGL()函数只在程序开始时运行一次,之后不会再运行

2:resizeGL()只在在窗口尺寸发生变化时,会自动运行,然后触发paint事件,从而调用paintGL()事件处理函数

3:paintGL()会在窗口位置移动时被调用,或是窗口在隐藏和显示之间变换时,被调用

4. updateGL()功能是触发 paintGL()

initializeGL函数由于是初始化,所以只调用一次而resizeGL和paintGL会多次调用resizeGL在正常的情况下,触发的条件是,窗口大小发生变化时,resizeGL被调用,之后会触发paint事件,从而调用paintGL()事件处理器。paintGL在正常的情况下,只要你移动窗口的位置,就会马上触发paint事件,从而调用paintGL事件处理器。当然,还有窗口在隐藏和...
paint GL ()函数  如果在函数 有循环,例如,循环 每次对模型进行角度控制,那么此时模型不会像预期的那样,循环 的每次对模型进行改变,实际上,而是整个个函数仅仅是最终的角度变化。     如果要想实现 paint GL ()函数 的对角度的循环控制,可以把角度控制放在一个槽函数 ,这个槽函数一方面处理角度的变化,另一方面又会去处理 paint GL ()的更新--采用u pdate GL ()...
void MainWidget:: paint GL () QMetaObject::invokeMethod(this,"u pdate ", Qt ::QueuedConnection); 其他定时触发: QT imer::sin gl eShot(10, this,SLOT(eventOperation()));单sing...
Qt Creator 的3D绘图及动画教程(参照NeHe) 刚刚学习了 Qt Creator,发现 Qt 提供了 Qt OpenGL 模块,对 OpenGL 做了不错的封装,这使得我们可以很轻松地在 Qt 程序 使用 OpenGL 进行绘图渲染。虽然里面还是由不少专业的解释照搬原文的,但还是加入了大量自己的分析。而且 Qt OpenGL 框架上比VC简单太多了,有不少东西都封装优化好了,代码上还是由有很多区别的。当然,其 原教程没解释好的问题我都作了深入的解释,以及一些多余部分解释、代码都被我删掉简化了。 这份 Qt OpenGL 的3
Opengl 学习笔记(1) 没学 opengl 的时候我以为 opengl 就是一个类库,我只需要 调用 里面的api就可以轻松的完成任务,简简单单的画出好看的图形,但是当我真正开始学的时候才发现这玩意和ugui完全就不是一个量级的,这玩意好像有一点太过底层了,而且虽然还是掉api,但是这其 的api又异常复杂,但既然我开始写总结了,那我应该算勉强看懂了,我就用我自己的话稍微总结一下。虽然 opengl 本身不是一个api,它仅仅是个规范,但是我们用的时候就当api用就完事了。 二. Opengl 介绍 1.渲染模式
首先清楚 OpenGL 的常用几个函数作用: (1) init ializ eGL () 初始化 OpenGL 函数 (2) resize GL (int w, int h)调整窗口大小函数 (3) paint GL ()绘制图像函数 1、 paint GL ()函数作调整 先定义模型、观察、投影3个矩阵。 //1、定义的4*4的矩阵 模型 观察 投影矩阵 QMatrix4x4 model; QMatrix4x4 view; QMatrix4x4 projection; /*----------按照
unsigned int captureFBO; gl GenFramebuffers(1, &captureFBO); gl BindFramebuffer( GL _FRAMEBUFFER, captureFBO); unsigned int captureRBO; gl GenRenderbuffers(1, &captureRBO);
这是一个使用 Qt OpenGL 绘制滚动图片的程序。它使用Q OpenGL Widget类来创建一个 OpenGL 上下文,然后使用 OpenGL 函数来绘制图像,并在每个帧之间使用 QT imer类来更新图像的位置。 #include < Qt Widgets/QApplication> #include < Qt Widgets/Q OpenGL Widget> #include < Qt Core/ QT imer> #include < Qt Gui/QImage> #include < Qt Gui/Q Paint er> class ScrollImage : public Q OpenGL Widget { public: ScrollImage(QWidget* parent = nullptr) : Q OpenGL Widget(parent) QT imer* timer = new QT imer(this); connect(timer, & QT imer::timeout, this, &ScrollImage::u pdate Position); timer->start(16); void setImage(const QImage& image) m_image = image; u pdate (); protected: void init ializ eGL () override gl ClearColor(1.0f, 1.0f, 1.0f, 1.0f); gl Enable( GL _TEXTURE_2D); gl GenTextures(1, &m_textureId); gl BindTexture( GL _TEXTURE_2D, m_textureId); gl TexParameteri( GL _TEXTURE_2D, GL _TEXTURE_MIN_FILTER, GL _LINEAR); gl TexParameteri( GL _TEXTURE_2D, GL _TEXTURE_MAG_FILTER, GL _LINEAR); gl TexParameteri( GL _TEXTURE_2D, GL _TEXTURE_WRAP_S, GL _REPEAT); gl TexParameteri( GL _TEXTURE_2D, GL _TEXTURE_WRAP_T, GL _REPEAT); void paint GL () override gl Clear( GL _COLOR_BUFFER_BIT); if (!m_image.isNull()) { QImage image = m_image.mirrored(false, true); // Flip the image vertically gl BindTexture( GL _TEXTURE_2D, m_textureId); gl TexImage2D( GL _TEXTURE_2D, 0, GL _RGBA, image.width(), image.height(), 0, GL _RGBA, GL _UNSIGNED_BYTE, image.bits()); gl Begin( GL _QUADS); gl TexCoord2f(0.0f, m_position); gl Vertex2f(-1.0f, 1.0f); gl TexCoord2f(1.0f, m_position); gl Vertex2f(1.0f, 1.0f); gl TexCoord2f(1.0f, m_position - 1.0f); gl Vertex2f(1.0f, -1.0f); gl TexCoord2f(0.0f, m_position - 1.0f); gl Vertex2f(-1.0f, -1.0f); gl End(); void resize GL (int width, int height) override gl Viewport(0, 0, width, height); private: void u pdate Position() m_position += 0.02f; if (m_position > 1.0f) { m_position = 0.0f; u pdate (); QImage m_image; GL uint m_textureId = 0; float m_position = 0.0f; int main(int argc, char *argv[]) QApplication a(argc, argv); QImage image(":/image.jpg"); if (image.isNull()) { qCritical() << "Failed to load image"; return -1; ScrollImage w; w.setGeometry(100, 100, image.width(), image.height()); w.setWindowTitle("Scroll Image"); w.setImage(image); w.show(); return a.exec(); 要运行此程序,您需要将一张名为“image.jpg”的图像添加到您的项目 ,并将其路径添加到QImage构造函数 。运行程序后,您将看到图像从上到下滚动。每秒大约更新60次,因为定时器更新率为每16毫秒一次。您可以通过调整计时器时间来更改更新率。