OpenGL是一套跨平台的用来渲染3D图形的API。OpenGL自身是一个巨大的状态机:一系列的变量描述OpenGL此刻应当如何运行,OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲,最后,我们使用当前OpenGL上下文来渲染。

  假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形。

  当使用OpenGL的时候,我们会遇到一些状态设置函数,这类函数将会改变上下文。以及状态使用函数,这类函数会根据当前OpenGL的状态执行一些操作。比如下面例子中的glClearColor()函数是一个状态设置函数,而glClear()函数则是一个状态使用的函数,它使用了当前的状态来获取应该清除为的颜色。

  Qt中的QtOpenGL模块提供了使用OpenGL的方法,使用它需要在.pro项目文件中添加QT+=opengl。QGLWidget是QtOpenGL模块中的一个类,它是一个用来渲染OpenGL图形的部件,可以继承该类后来像使用其它QWidget部件一样使用它。QGLWidget提供了3个虚函数重写它们来实现指定操作:

    initializeGL():设置OpenGL渲染环境,定义显示列表等,只在resizeGL()、paintGL()之前被调用一次。

    resizeGL():设置OpenGL的视口,投影等,部件大小改变的时候被调用。

    paintGL():渲染OpenGL场景,当部件需要更新时被调用。

  Qt中有一个Hello GL示例程序,它在OpenGL分类中。

1、基本绘制

  下面代码使用QGLWidget绘制了一个直线、三角形、文本,其中的MyGLWidget继承自QGLWidget:

#include <QApplication>
#include "myglwidget.h"

int main(int argc, char**argv)
{
    QApplication app(argc, argv);

    MyGLWidget w;
    w.resize(600, 400);
    w.show();

    return app.exec();
}
View Code

相关文章:

  • 2021-12-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案