一、计算机图像学相关概念
1.1 计算机图形学,是一种使用数学算法将二维或三维图形转化为计算机显示器所能显示的二维栅格形式的科学。
1.2 屏幕像素组成的网格即称为栅格。
1.3 计算机图形学研究
- Modeling:构造场景的三维模型,建模;
- Rendering:将三维场景渲染到屏幕上,根据三维模型,计算屏幕窗口中每个像素点的颜色,像素点颜色与光照、环境以及物体材质等因素有关,如下图中,展示的间接漫射光与焦散现象;
- 间接漫射光与焦散现象;
- Animation:动画
- 关键帧技术;
- 过程动画;
- 基于物理的动画技术;
- 关节动画;
- Morphing和deformation(空间变形)技术;
1.4 Rendering
是一个3D model -> 2D images的过程,主要可以分为两大类方法。
- 逐像素绘制,即光线投射或光线跟踪;
- 逐面片绘制:绘制速度较快,比较成熟,形成了固化在显卡里的图形流水线。
逐面片绘制的方式,把模型的每个面片进行投影、光栅化(Rasterization)。- 投影:三维变换到二维;
- 光栅化:计算面片所覆盖的栅格。
1.5 Graphics Pipeline(图形流水线)
- 在计算机中将3D模型转化为屏幕上的图像需要经过的一系列处理步骤,这个处理步骤就是图形流水线。
主要步骤可以简化为:
1.6 本模块采用OpenGL作为基础图形库、freeglut作为辅助开发库、采用glew作为扩展功能库来进行开发。
- OpenGL是一个图形硬件的程序接口。
- aux、glut、freeglut、glfw库
- 提供了管理窗口的功能;
- 加入了键盘、鼠标等交互接口;
- 提供了右键菜单等交互功能;
- 提供了一些“高级”建模函数,如glutSolidTeapot();
1.7 图形流水行是一个固定的处理步骤,OpenGL相关函数可以理解为对这个流水线进行参数设置。GPU在Vertex Operations和Fragment Operations两个模块中具有可可编程功能。通过Vertex Shader 或Fragment Shader(Pixel Shader)编程来实现相关功能。
-
可直接在Vertex Shader中编程控制顶点的各种属性;省去了在CPU中计算顶点的位置在传输到GPU中的耗时;通过Vertex Shader只需要传输一次,后面的计算顶点位置的计算都在GPU中进行,效率高;
-
可以直接在Fragment shader中编程控制片元、像素的各种属性;
-
随之技术的发展,GPU中增加了一个Geometry shader模块,能能根据GPU中输入的源数据生成新的顶点和面片,可以在GPU中细化模型;
1.8 相关例子
1.9 shader编程
采用GLSL编程语言。
1.20 GPU高性能计算
- 高性能计算;
- 大计算量任务:医学、化学、生物、金融、科学计算、图像处理等领域;
- 人工智能;
- 区块链;
上述大量计算都可以采用GPU来计算。
通用并行计算平台,使得不具备计算机图形基础得人可以采用GPU进行通用计算(GPGPU)。
- CUDA
- OpenCL
二、freeglut、glew环境配置
http://freeglut.sourceforge.net/
http://glew.sourceforge.net/