文章目录
- 一、计算机图形系统
- 二、相关概念
- 1、分辨率
- 2、屏幕坐标系
- 三、OpenGL图形软件包
- 1、 简介
- 2、四种变换
- 四、OpenGL的数据处理流程
- 五、OpenGL的相关库介绍
- 1、gl.h(核心库)
- 2、glu.h (实用库)
- 3、glaux.h (辅助库)
- 4、glut.h (实用工具包)
- 5、freeglut.h
- 6、glew.h
- 7、glfw.h
- 六、库函数命名规则 & 数据类型
一、计算机图形系统
- 计算机图形系统的结构
- 计算机图形系统的功能
- 其中图形输入设备包括:
二、相关概念
1、分辨率
-
光点
:指电子束打在显示器荧光屏上,显示器能显示的最小发光点 -
像素点
:指图形显示在屏幕上时,按当前图形显示分辨率所能提供的最小元素点 -
屏幕分辨率(光栅分辨率)
:它决定了显示系统物理意义上最大可能的分辨率,任何显示控制控制器提供的分辨率也不能超过它 - 分辨率通常用
水平方向上光点数
x垂直方向上光点数
来表示 - 在最高分辨率下,一个光电对应一个像素;若设置低于最高分辨率,则一个像素可能覆盖多个光点
2、屏幕坐标系
-
屏幕坐标系
:用于描述频幕上某一点的位置
1、 简介
- OpenGL是一个功能强大的图形库,可用于开发包含光照、纹理、透明、阴影等多种特殊视觉的三维图形
- 它是一个与软硬件无关的三维图形软件包,可运行于多种窗口系统上
- 它的底层是用C/C++编写的,任何主流平台都自带GL接口库,通过使用GL的库函数来操作显卡的绘图功能
2、四种变换
三维空间坐标下的物体要呈现在二维的屏幕坐标系中,需要进行空间坐标变换。我们用照相机拍照这一过程这一过程来说明物体从三维描述到二维描述的过程
-
视点变换
:相当于将取景框对准目标物体,调整相机位置和镜头朝向。 -
模型变换
:相当于设置物体位置和空间状态,对物体进行旋转、平移和缩放。 -
投影变换
:相当于调焦过程,将三维物体投影到二维屏幕上。包括正射投影
和透视投影
两种 -
视口变换
:相当于选择相纸尺寸并冲洗底片,规定二维投影的显示大小和范围
OpenGL使用齐次坐标(x,y,z,w)来描述物体坐标,利用它,可以将各种空间坐标变换用矩阵与向量相乘的一般向量运算表示,可以参考关于齐次坐标的理解(经典)。每进行一次空间坐标变换,OpenGL都会生成一个4x4阶的变换矩阵,假设某点坐标为 v(x,y,z,w),进行一次空间变换(矩阵M)后,坐标变为 Mv,再进行一次空间变换(矩阵N)后,坐标变为 MNv
- 构造几何要素(点、线、多边形、位图),创建对象的数学描述
- 在三维空间上放置对象,选择合适的场景观察点
- 计算对象颜色(颜色可能直接定义,也可能由光照条件及纹理间接给出)
- 光栅化,把对象的数学描述和颜色信息转换到屏幕的像素。另外也可执行消隐及对象素的操作
1、gl.h(核心库)
- 包含115个基本函数
- 函数以gl开头(如
glColor3f()
) - 完成图元的定义、几何变换、投影等,都是最基本的操作
2、glu.h (实用库)
- 包含43个函数
- 函数以glu开头(如
gluPrespective()
) - 对核心库gl.h进行部分封装,简化了使用操作,适合更高层的图形处理,如曲线曲面生成、图像操作等。如果计算能力比较强,只用核心库gl.h也可以实现这些操作
3、glaux.h (辅助库)
- 包含31个函数
- 函数以aux开头(如
auxInitWindow()
) - 主要用于窗口管理
4、glut.h (实用工具包)
- 它是辅助库的功能更强的替代品,用于隐藏不同窗口系统API的复杂性,具有跨平台性
- GLUT的子程序的前缀使用”glut”(如
glutCreateWindow()
) - 主要用于窗口管理
- 注意此库中已包含了
gl.h
和glu.h
,故不需再重复包含
5、freeglut.h
- 常见的glut是个闭源库,且很多年没有更新了。freeglut是一个开源且兼容glut的库,一直在维护,可以理解为glut的替代
6、glew.h
- GLUT或者FREEGLUT主要是1.0的基本函数功能;GLEW是使用OPENGL2.0之后的一个工具函数
- 不同的显卡公司有时会发布一些专门性的扩展函数,用户需要寻找最新版的glext.h才能使用。而GLEW能自动识别你的平台所支持的全部OpenGL高级扩展函数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。
7、glfw.h
- GLUT的另一个替代库
- 具有轻量级、开源、跨平台等特性
- 不能完全兼容glut函数