基本概念
1、着色器
GPU由大量的小型可编程处理器(shader core)组成,这些迷你的处理器上运行的迷你程序成为着色器。
2、管线
这是一个形象的说法,把 OpenGL 的模型比作一个生产线。
该模型内的数据流通常是单一路径的,程序发送给 OpenGL 的处理指令形成的数据进管线的开端,然后流经一个个阶段直到管线的末端。
3、基元
OpenGL 中的基本渲染单元。包括点、线、三角形(分别有一、二、三个点)。
我们在屏幕上看到的渲染的所有的东西都是这三种基元的集合。
4、顶点
(三维)坐标空间内的一个点,点、线、三角形分别有一、二、三个顶点。
5、光栅器
用作将三维形式的三角形转成一系列在屏幕渲染的像素的硬件。
6、管线前端的工作
处理顶点和基元,将图形处理后把它们组成的点、线、三角形传递给光栅器。
7、管线后端的工作
光栅器处理之后得到的是像素,管线后端处理这些像素,包括深度参数、模板测试、片段着色、混合、更新输出图像。
第一个 OpenGL 程序
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
#include <QOpenGLWidget>
class openglWidget : public QOpenGLWidget
{
Q_OBJECT
public:
openglWidget(QWidget * parent = nullptr);
protected:
virtual void paintGL();
};
#endif // OPENGLWIDGET_H
#include "openglwidget.h"
#include <QOpenGLExtraFunctions>
openglWidget::openglWidget(QWidget *parent)
:QOpenGLWidget(parent)
{
}
void openglWidget::paintGL()
{
static const GLfloat red[] = {1.0f,0.0f,0.0f,1.0f};//RGBA
QOpenGLExtraFunctions * funs = QOpenGLContext::currentContext()->extraFunctions();
funs->glClearBufferfv(GL_COLOR,0,red);
}
OpenGL 的函数命名遵循一些约定。所有函数以 gl 开头,本例中,后缀 fv 表示该函数使用一组向量(v)、浮点(f) 值。
glClearBufferfv():清除当前绑定的绘制帧缓冲区的各个缓冲区。