OpenGL技术简介

OpenGL本质上是图形硬件的软件接口,可以独立于操作环境和硬件,实际上是一套三维处理库,包含700多个函数或指令。

GLUT,GLEW和GL Tools

都是OpenGL的库,方便我们使用OpenGL。

什么是GLUT(OpenGL utility toolkit)

GLUT是OpenGL utility toolkit (OpenGL实用工具箱)的缩写,简而言之,就是为了我们不为在任何平台的细枝末节的东西操心,同时,不必了解特定平台的GUI编程,它包含简单的GUI功能,但十分有限。

什么是GLEW

一个开源库,方便OpenGL API通过扩展机制来发展。

什么是GLTools

提供很多快捷方式和便捷方式的库,是基于GLEW库的。

函数命名的规则

OpenGL核心函数(gl)

以gl开头,是OpenGL的基本函数,主要负责视点,形体,投影变换,颜色,法线材质,雾化等。可以运行于各个平台,共有115个基本函数,加上参数可以派生出300多个函数。

OpenGL实用函数(glu)

以glu开头,共43个,是在核心函数的编程的函数,进一步简化编程,可以完成纹理影像管理,坐标变换渲染简单曲面。

Windows专用函数(wgl)

以wgl开头,共16个,用于连接OpenGL和windows,管理渲染描述表(Rendering Context,RC),显示列表,字体,位图。只能用于windows环境。

OpenGL工具库函数(glut)

以glut开头,有30多个,不依赖于运行环境,所以各种环境下都可以运行。提供三维模型绘图功能和窗口操作函数,回调函数,菜单函数等。

OpenGL辅助库函数(aux)

以aux开头,共31个,可以简化像素格式设置,简化输入设置和交互手段,但是通用性较差,仅在win32上使用,所以很大程度上被glut函数取代

win32 API函数

这类函数没有专门的前缀,包括choosepixelformat()等6个函数,主要用于处理像素格式和缓存,只能用于windows。

OpenGL渲染表和像素格式

OpenGL通过渲染表来描绘图形,而且使用的是特殊的像素格式

渲染描述表(RC)和设备描述表(DC)(Windows下)

关于DC(设备描述表)的介绍
设备描述表:Device Context,DC
渲染描述表:Rendering Context,RC
在OpenGL的绘图流程中DC相当于是纸,,即一个状态保持器,OpenGL中通过RC在DC上进行绘制,RC实际上是OpenGL和DC之间的联系机制,可以理解为在RC上绘制图形,RC保存着在窗口中用来渲染一个场景所需要的信息:例如像素格式等,所以在用OpenGL进行程序开发时,首先设置一个RC并将其设置为当前的RC,之后所有的工作都是在当前RC完成的,直到它被删除为止。

基础图形管线的构成

基础图形管线的构成

着色器

顶点着色器(Vertex Shader):处理从客户机输入的数据,应用变换,或者进行其它类型的数学运算来计算光照效果、位移、颜色值等。为了渲染三个顶点的三角形,该着色器将执行三次
片段着色器(Fragment Shader):对每个三角形的片段进行填充,最终输出我们在屏幕上看到的颜色值

图元组合

图元组合(Prinitive Assembly):将三个顶点组合在一起,并且对三角形逐个片段进行光栅化

光栅化

光栅化是将几何数据经过一系列变换后最终转换为像素,从而呈现在显示设备上的过程,如下图
在这里插入图片描述

三种OpengGL着色器传递渲染数据的方法

属性

属性:对每一个顶点都要坐改变的数据元素,包括顶点的3分量位置,4分量颜色(r,g,b,a),主要就是有四个分量,总共有16种为每个顶点设置的不同类型的参数。
属性仅供顶点着色器使用。
属性对每个点都要做改变,但并不意味着不能重复。
属性是对整个批次的属性都取统一值的单个值,即,它是不变的

uniform值

uniform值:uniform值在每个批次会改变一次,最常见的应用是在顶点渲染中设置变换矩阵。
顶点着色器和片段着色器都可以有uniform值。

纹理

纹理:从顶点着色器到片段着色器都可以对纹理进行采样和筛选。典型情况下,片段着色器对一个纹理进行采样并住在一个三角形表面上应用图形数据

连点成线

点是最简单的图元。
点的大小可以指定,在默认情况下,点的大小不会受到透视除法的影响,即:离视点更远的地方点看上去不会更小,离视点更近点不会变得更大。
点总是正方形的像素,即使用glPointSize改变点的大小,也只能得到更大的正方形,为了获取圆点,我们必须在抗锯齿模式下绘制点。

线

一条线段是在两个顶点之间绘制的,所以一批线段应该包含偶数个顶点,每个顶点都是线段的端点

线带(line strip)

连续地从上一个顶点到下一个顶点绘制线段,形成一个真正连接点的线条,每个连接点会被选中两次,一次作为终点,一次作为起点

线环(line loop)

是线带的一种简单扩展,在线带的基础上额外增加了一条连接着一批次中最后一个点和第一个点的线段

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐