写在前面
本文采用VS2017+QT5.12的开发环境。
创建工程
在VS2017选择文件——新建——项目,新建一个Gt GUI Application,设置项目名后,在基类设置为QWidget(本文用来显示基本的模型,不需要其他框条,所以选择此类)。
创建完毕后,将OpenGL常用的头文件
#include <QtOpenGL\qgl.h>
#include <gl\GL.h>
#include <gl\GLU.h>
导入头文件开头,并且将头文件的QWidget改成QGLWidget
class myopengl01 : public QGLWidget //由QWidget改成QGLWidget
(这里问哦们项目名为myopengl01)
以及源文件里的QWidget改成QGLWidget
myopengl01::myopengl01(QWidget *parent)
: QGLWidget(parent) //由QWidget改成QGLWidget
一切就准备就绪~
基本函数的声明
我们在头文件声明三个protected函数分别是
protected:
void initializeGL(); //声明初始化函数
void resizeGL(int w, int h); //声明窗口改变函数
void paintGL(); //声明绘制函数
用来实现初始化,窗口的设置以及绘制我们所需要的图形。
初始化函数的定义
在源文件中定义一个初始化函数
void myopengl01::initializeGL()
{
}
我们可以用以下代码设置初始化的内容
//设置生成坐标与尺寸
//500,200为屏幕上的像素点,用于生成的窗口在屏幕上显示的位置
//600x480为视窗的大小分辨率
setGeometry(500, 200, 600, 480);
//设置清除时的颜色
//即后面在调用glClear(GL_COLOR_BUFFER_BIT)函数清除颜色缓冲之后呈现的背景色
//四个数值项对应不同颜色的色值,此时设置显示的为黑色
glClearColor(0.0, 0.0, 0.0, 1.0);
//用于启用各种功能,其中GL_DEPTH_TEST为开启深度测试
//同理上个函数,也需要调用glClear(GL_DEPTH_BUFFER_BIT)清除后方可呈现
glEnable(GL_DEPTH_TEST);
这里列出了glEnable()函数的类与说明:
类型 值 说明
GL_ALPHA_TEST 4864 跟据函数glAlphaFunc的条件要求来决定图形透明的层度是否显示。
GL_AUTO_NORMAL 3456 执行后,图形能把光反射到各个方向
GL_BLEND 3042 启用颜色混合。例如实现半透明效果
GL_CLIP_PLANE0 ~ GL_CLIP_PLANE5 12288 ~ 12283 根据函数glClipPlane的条件要求启用图形切割管道。这里指六种缓存管道
GL_COLOR_LOGIC_OP 3058 启用每一像素的色彩为位逻辑运算
GL_COLOR_MATERIAL 2930 执行后,图形(材料)将根据光线的照耀进行反射。反射要求由函数glColorMaterial进行设定。
GL_CULL_FACE 2884