1、OpenGL Architecture Review Board:OpenGL 架构评审委员会,是一个独立的联盟,负责管理 OpenGL 的未来,提出并批准对规范的更改,新版本和一致性测试。ARB 批准的 OpenGL 扩展很可能之后会成为核心。
2、面向嵌入式平台的 OpenGL ES,面向浏览器的 WebGL
3、
- GLUT:负责创建窗口,初始化 OpenGL 上下文以及处理输入事件等。
- GLFW:提供简单的 API,用于创建窗口,上下文以及处理输入时间。
- GLEW:提供有效的运行时机制,用于确定目标平台上支持哪些 OpenGL 扩展。
4、OpenGL 使用一组状态变量的集合来保持图形渲染管线的状态。
5、OpenGL 基本图元:POINTS, LINES, LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN
6、逆时针为三角形的正方向
7、如果没有做背面剔除就可能会出现遮挡,要使用画家算法:首先绘制最远的,依次靠近
8、自遮挡的对象,没有启用深度测试就会产生显示错误。
9、在图元的坐标非常接近时,要启用多边形偏移,才能形成稳定的图像。
10、向量在图形学中可以表示位置(顶点),也可表示方向(视线方向、平面法线)
11、向量点乘和向量叉乘。
12、OpenGL 中的矩阵包括视图变换、模型变换和投影变换。
13、
- 视图变换:设定观察者或摄像机的位置
- 模型变换:在场景中移动物体
- 模型视图:模型和视图的一致性
- 投影变换:设定视景体的大小和形状
- 视口变换:窗口缩放
14、模型变换中旋转和平移的顺序非常重要
15、投影:从三维剪裁空间到二维屏幕空间
- 正投影:平行投影,没有畸变
- 透视投影:近大远小,视觉真实
16、欧拉角
- Yaw(偏航):y 轴
- Pitch(俯仰):x 轴
- Roll(翻滚):z 轴
17、glShaderModel mode 可以取下列值:
- GL_FLAT 恒定着色
- GL_SMOOTH 平滑着色
18、光照模型
- 局部光照模型:只考虑反射光:环境光(Ambient Light)、漫反射光(Diffuse Light)、镜面反射光(Specular Light)
I t o t a l = I a m b + I d i f f + I s p e c I_{total} = I_{amb} + I_{diff} + I_{spec} Itotal=Iamb+Idiff+Ispec - 全局光照模型
19、环境光:
I
e
=
I
a
K
a
I_e = I_a K_a
Ie=IaKa
反射强度=环境光强度 X 反射系数
散射光具有方向性,根据入射光线的角度在表面均匀地反射
I
d
=
I
p
K
d
c
o
s
θ
,
θ
∈
[
0
,
π
2
]
I_d = I_p K_d cos \theta, \theta \in [0, \dfrac{\pi}{2}]
Id=IpKdcosθ,θ∈[0,2π]
I
=
K
a
I
a
+
K
d
I
e
c
o
s
α
+
K
s
I
e
c
o
s
y
γ
I = K_a I_a + K_d I_e cos \alpha + K_s I_e cos^y \gamma
I=KaIa+KdIecosα+KsIecosyγ
多光源计算模型:
I
=
K
a
I
a
+
∑
i
=
1
m
I
i
(
K
d
c
o
s
α
+
K
s
c
o
s
n
γ
)
I = K_a I_a + \sum\limits_{i=1}^m I_i (K_d cos \alpha + K_scos^n \gamma)
I=KaIa+i=1∑mIi(Kdcosα+Kscosnγ)
镜面反射光:
I
s
=
K
s
I
e
c
o
s
n
θ
I_s = K_s I_e cos^n \theta
Is=KsIecosnθ
n 是高光指数,表面越光滑,n 越大
20、全局光照模型:可模拟现实世界中景物表面之间的镜面反射和透射现象的贡献。Whitted 模型(光线跟踪算法、辐射度方法)
21、抗锯齿=反走样,Antialiasing,全屏反锯齿(Full Screen Anti-aliasing,FSAA),超级采样抗锯齿(Super-Sampling Anti-aliasing,SSAA),多重采样抗锯齿(MultiSampling Anti-Aliasing,MSAA)
22、纹理过滤(Texture Filter):
过滤器种类:
- 最临近值过滤器(GL_NEAREST)会出现马赛克
- 线性过滤器(GL_LINEAR)平滑更接近与真实
23、纹理环绕
- GL_REPEAT,重复
- GL_MIRRORED_REPEAT:镜像重复
- GL_CLAMP_TO_EDGE:在0-1之间截止
- GL_CLAMP_TO_BORDER:以边界颜色进行扩展
24、Mipmapping 纹理由一系列纹理图像组成,每个图形的大小都是前面的一半。Mipmapping 是一种 LOD(Level of Detail)技术,正方形的图像经过 Mipmapping 会增加 1/3 的大小。使用金字塔型存储结构。
25、三线性插值:在 mip 层之间执行线性插值,再在层内进行线性插值。
26、各向异性过滤:对周围各个方向上的像素进行取样计算后映射到目标像素上的技术,与双线性过滤和三线性过滤相比,它在大角度显示方面具有更高的精度,令画面更逼真,但计算量也更大,对显卡的要求更高。
27、OpenGL 的渲染管线
- 显示列表
- 求值程序
- 顶点操作
- 图元装配
- 像素操作
- 纹理装配
- 光栅化
- 片断操作
OpenGL 的渲染管线主要分为两个阶段:
- 首先是基于顶点的操作,然后图元被光栅化,产生片段
- 在片段写入到帧缓冲区之前进行纹理、雾以及其他基于片段的操作
28、顶点处理分为 4 个阶段:顶点变换、光照、纹理坐标和变换、剪裁
29、基于片段操作的结果是一个颜色值,基于片段的固定功能管线分为 4 个阶段:
- 纹理应用和环境
- 颜色求和
- 雾应用
- 抗锯齿应用
30、可编程渲染管线:使用着色器(Shader)替代固定管线中的部分阶段
31、OpenGL 着色语言(GLSL)是一种对 GPU 进行编程的高级语言。
32、GLSL 使用两种类型的对象:着色器对象和程序对象
33、使用高度图(Height map)的像素值确定物体表面的光照特性,凹凸纹理(Bump mapping)分为:
- 位移映射(Displacement Mapping):使用高度图将经过纹理化的表面上实际几何点位置沿着表面法线根据保存在纹理中的数值进行移位的技术
- 法线映射(Normal Mapping):直接把高度图转换成一张法线图(Normal Map),其图的 RGB 分别是原高度图该点的法线指向:Nx,Ny,Nz
34、显示列表(Display List):命令发送到缓冲区后可以反复调用,只执行一次发送和编译,提高了执行的性能。
35、使用顶点数组可以加速数据载入,在多次绘制间保存和共享数据。
36、索引顶点数组(Indexed Vertex Arrays)不是按顺序从头遍历顶点数组,由一个单独的索引数组指定,优点是节省内存、减少变换开销。共享顶点。
37、动画的分类:
- 传统动画(手绘动画)
- 定格动画 Stop Animation (粘土动画、木偶动画 Puppet Animation)
- 计算机动画(二维动画、三维动画)
38、动画由多幅连续画面组成,当画面快速、连续地播放时,由于人类眼睛存在“视觉滞留效应”而产生动感。
39、三维动画的种类:
- 变形动画(优点:能够精细地控制形状的变化、针对面部表情动画特别适用;缺点:动画数据量大、制作复杂度高、很难在多个角色间调用)
- 骨骼动画(模型创建、骨骼创建、骨骼绑定 Rigging,动画设定[关键帧、动作数据])
40、三维动画的控制技术
- 过程式动画
- 运动学动画(Kinematics):通过公式给定运动路径,自动生成连续运动的动画。适合简单物体的动画生成,粒子系统;s=vt
- 动力学动画(Dynamics):利用物理规律模拟,使用物理引擎;适合碰撞反应、爆炸效果;f=ma。
- 关键帧动画:动画师指定少量关键帧的骨骼姿势,计算机通过插值算法计算中间姿势。
41、
- 动作数据驱动的角色动画(Motion Capture)
- 表演动画(Performance Animation)
42、朝向的表示
- 使用矩阵表示:容易使用计算机处理,不可插值
- 使用欧拉角:表示简单直接,万向节死锁
- 使用四元数:球面线性插值
43、欧拉角有两种:
静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。
动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态。
使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题。
一个典型的万向锁问题可以表述如下:先仰45°再俯90°,这与先俯90°再仰45°是等价的。事实上,一旦选择±90°作为俯角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。这种角度为±90°的第二次旋转使得第一次和第三次旋转的旋转轴相同的现象,称作万向锁。
44、四元数包含了足够有价值的朝向信息,但真正的威力源自可对它们执行的两种操作:合成和插值
44、球面线性插值(Spherical linear interpolation,通常简称Slerp),是四元数的一种线性插值运算,主要用于在两个表示旋转的四元数之间平滑差值。
45、
四元数的缺点:
- 比欧拉角稍微大一些,这个额外的数似乎没有太大关系,但在需要保存大量角位移时,如存储动画数据,这额外的33%也是数量可观的;
- 四元数可能不合法。坏的输入数据或浮点数舍入误差积累都可能使四元数不合法(能通过四元数标准化解决这个问题,确保四元数为单位大小);
- 难于使用,在所有三种形式中,四元数是最难于直接使用的。
四元数的优点:
- 不存在万向节锁的问题;
- 平滑插值(球面线性插值)
- 能和矩阵形式快速转换,四元数和矩阵间的转换比欧拉角与矩阵之间的转换稍微快一点。
- 仅用四个数。四元数仅包含4个数,而矩阵用了9个数,它比矩阵“经济”得多;
46、旋转表示方法的选择:
根据实际旋转不同的朝向表达方法
- 人机交互
- 欧拉角
- 大量的存储
- 欧拉角或四元数
- 插值
- 四元数(欧拉角会万向节死锁,矩阵则不能插值运算)
- 运动叠加
- 四元数或旋转矩阵(欧拉角不能直接叠加)
- 图形绘制
- 旋转矩阵
47、动作捕捉:使用各种设备记录人体的三维动作信息
48、动作捕捉技术的应用:
- 计算机动画
- 生物医学
- 机器人
- 电影
- 视频游戏
- 医疗人类学(运动康复训练)
49、动作捕捉的目标
- 全身动作
- 面部表情
- 手部动作
50、动作捕捉的特点
优点:
- 真实记录了每个动作细节
缺点:
- 难以修改:对动作数据的修改很容易导致失真
- 难以控制:没有很好的方法对捕获的动作进行控制
- 难以重用:应用到不同的角色、骨架
51、逆运动学(Inverse kinematics)是决定要达成所需要的姿势所要设置的关节可活动对象的参数的过程。例如,给定一个人体的三维模型,如何设置手腕和手肘的角度以便把手从放松位置变成挥手的姿势?这个问题在机器人学中是很关键的,因为操纵机械手臂通过关节角度来控制。逆运动学在游戏编程和三维建模中也很重要,虽然其重要性因为运动捕获数据的大型数据库越来越多的使用而降低了。