三维图形程序设计
- 基础知识
- 计算机图形学概述
- 图形与图像
- 图形流水线
- 图形开发库
- GPU
- OpenGL编程
- OpenGL的功能
- OpenGL的两种编程模式
- OpenGL相关的库
- OpenGL基本语法
- 程序流程
- 变换(Transformation)
- 变换的步骤
- 几何变换
- 投影变换
- 视口变换
- 光照
- 光照明模型
- phong模型
- Blinn-Phong光照模型
- openg中的光照明模型
- 参考资料
基础知识
计算机图形学概述
计算机图形学(CG)是一门研究如何利用计算机进行图形的计算、处理和显示的学科。简单的说是一种使用数学算法将二维或三维图形转化为计算机显示器所能显示的二维栅格形式的科学(3D–>2D)。
- 建模(Modeling):构建物体三维模型
- 渲染(Rendering):计算屏幕窗口中每个像素的颜色,像素点颜色与光照、环境及物体材质有关
- 逐像素绘制
- 逐面片绘制(主流)
- 动画(Animation):让物体动起来
图形与图像
- 图形(graph):表示形的几何信息
- 图像(image):像素组成的二维栅格
图形的显示最终要转化为图像。
图形流水线
- 图形流水线(Graphics pipeline):在计算机中将3D模型转化为屏幕上的图像经过的一系列处理步骤(现在一般是逐面片绘制)。
- 逐面片绘制:模型由许多面片(polygon)组成,逐面片的进行投影、光栅化(Rasterization)。
- 投影:三维变换到二维
- 光栅化:计算面片所覆盖的栅格
- 逐面片绘制:模型由许多面片(polygon)组成,逐面片的进行投影、光栅化(Rasterization)。
- 1992年,SGI发布OpenGL1.0,图形流水线逐渐形成业界标准。
- 1994年出现PC显卡,1999年出现GPU,图形流水线逐渐硬化到pc机专用图形硬件中。
- 顶点操作(vertex operation)
变换(Transformation):几何变换->投影->裁剪->视口变换 - 光栅化(rasterization)
计算面片所覆盖的栅格 - 片元操作(fragment operation)
纹理、雾效、测试等
图形开发库
- 基础图形库
- OpenGL(Open graphics library)
调用图形硬件的程序接口,应用程序和图形显卡驱动的中介,可跨平台。 - Direct3D
在游戏界占优。
- OpenGL(Open graphics library)
- 辅助OpenGL开发的工具库
aux(微软)、glut->freeglut、glfw - 辅助调用OpenGL扩展功能的库
glew、glad
GPU
- GPU是显卡的心脏,用来处理屏幕相关计算,并实现图形流水线,架构是并行。
- GPU中图形流水线的发展
- 早期固定管线(fixed),效率高,不够灵活
- 2003年出现可编程渲染管线,vetex 和fragment可编程功能,Vertex Shader(顶点着色器)和Fragment Shader(片元着色器)
- 2006年增加了Geometry Shader(几何着色器)
- GPU编程
- 早期汇编语言
- 高级着色语言(shader language)
- GPU的应用未来
- 通用并行计算平台
- CUDA——基于Nvidia GPU的并行计算架构
- OpenCL——业界众多著名厂商共同制作的面向异构系统通用目的 并行编程的开放式标准
- GPGPU(General-Purpose GPU)
用GPU完成通用计算,完成巨大计算量加速 - GPU+CPU混合架构
- 通用并行计算平台
OpenGL编程
OpenGL的功能
- 变换(几何、投影、视口)
- 光照与材质
- 纹理映射
- 图像功能(anti-aliasing反混淆、blending混合、fog)
- 特效(depth cue深度暗示、motion blur运动模糊)
- 建模(basic primitives,NURBS曲面)
OpenGL的两种编程模式
- 固定流水线模式——传统方式
- shader编程模式——现代方式
OpenGL相关的库
- OpenGL library(核心库)
函数前缀gl
库文件gl.h、opengl32.lib、opengl32.dll - OpenGL utility library(实用程序库)
函数前缀glu
库文件glu.h,glu.lib,glu.dll - 辅助工具库(glut、freeglut、glew)
功能主要有:- 执行与窗口相关的功能
- 鼠标、键盘交互
- 高级建模命令
OpenGL基本语法
程序流程
变换(Transformation)
变换的步骤
几何变换
- 平移(Translation)
glTranslate*()
- 缩放(Scaling)
glScale*()
- 旋转(Rotation)
glRotate*()
投影变换
视口变换
光照
光照明模型
phong模型
- 环境光
- 漫射光
- 镜面反射光
Blinn-Phong光照模型
- 改进了镜面反射光的计算
openg中的光照明模型
本质上还是blinn模型
参考资料
中国大学MOOC-图形编程技术