文章目录
- 0、 写在前面
- 1、绘图工具
- 1.1、清除窗口
- 1.2、指定颜色
- 1.3、强制完成绘图
- 1.4、坐标系统工具
- 2、点,直线,多边形
- 2.1、填充多边形
- 3、点,直线,多边形细节刻画
- 4、基本状态管理
0、 写在前面
1、OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。
2、Opengl所有复杂的图形,都是有简单的图形构成的;
3、早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便;3.3之后这种模式被摒弃,改为更为现代的函数的核心模式(把一些绘图命令存在一个列表,以后在一起执行),效率更高,但是上手不易啊。
1、绘图工具
1.1、清除窗口
主要函数:
glClearColor(0.0,0.0,0.0,0.0); //清除颜色设置为黑色
glClear(GL_COLOR_BUFFER_BIT); //把整个窗口清除为当前清除颜色
缓冲区主要有
缓冲区 | 名称 |
---|---|
颜色缓冲区 | GL_COLOR_BUFFER_BIT |
深度缓冲区 | GL_DEPTH_BUFFER_BIT |
累计缓冲区 | GL_ACCUM_BUFFER_BIT |
模板缓冲区 | GL_STENCIL_BUFFER_BIT |
1.2、指定颜色
之前说了opengl是个状态机,颜色设置的时候,设置完之后后续的颜色都会使用当前颜色,除非重新设置。
主要函数如glColorXX
glColor3f(0.0,0.0,0.0); //黑色
1.3、强制完成绘图
glFlush(); //并不等待绘图完成,强制命令开始
glFinish(); //也是强制刷新,但是等待硬件或者网络提示帧缓冲区绘图完成,图形进程会阻塞
一般而言glFlush够用。
1.4、坐标系统工具
无论是打开窗口,还是移动窗口或者改变窗口大小,窗口系统都会发送一个事件作为通知,如果使用GLUT,会用glutReshapeRunc(回调函数)
上一节在QT中,这个resizeGL就是这个回调函数作用。
2、点,直线,多边形
1、在opengl中任何图形都是三维空间中的坐标;
2、在图形中直线其实是线段;
3、一般多边形都是凸多边形;
2.1、填充多边形
主要代码
glBegin(XX); //绘制开始
glVertex2f(0.0,0.0); //一系列的点
...
glEnd(); //绘制结束
绘制图形的类型如下所示:
大致画出的类型对应下图:
在glBegin与end之间还可以用下面的函数来渲染,除此之外基本上不能使用其他oengl函数
3、点,直线,多边形细节刻画
1、在上面可以轻松的绘制出所需要的图形,直线绘制中可以设置直线的宽度,直线的类型;
2、多边形轮廓、实心形式等;
4、基本状态管理
opengl维护许多状态和状态变量,物体在渲染时肯恩光辉使用光照、纹理、隐藏表面消除、雾以及其他物体外观状态,默认情况大部分状态一开始不处于活动状态,打开、关闭这些状态主要用以下函数
glEnable(GLenum capability); //打开
glDisable(GLenum capability); //关闭
GLboolean glsEnabled(GLenum capability); //查询状态
//以下函数可以查询状态当前值
void glGetBoooleanv(GLenum capability,GLboolean *params);
...