Mathematics for 3D Game Programming and Computer Graphics读书笔记【1】

3d游戏编程和计算机图形学中的数学》 作者:Eric Lengyel
内容概要:
1. 渲染管道
2. 矢量
3. 矩阵
4. 矩阵变换
5. 3D引擎中的几何
6. 光线追踪
7. 光影
8. 可视性检测
9. 多边形技术
10. 阴影
11. 曲线和表面
12. 碰撞检测
13. 线性物理
14. 旋转物理
15. 流体与布料模拟
16. 数值方法

chapter 1 渲染管道

包含一些常用函数,如vertex transformation(顶点变换),primitive rasterization(原始光栅化)等等。

1.1 图形处理器

3D场景由一些由顶点与graphics primitive(图形基元)的对象所组成。
VRAM (Video Random Access Memory 视频随机存取存储器) 最重要的是包含了front and back image buffers(前后端图像缓冲区),前者是在viewport(视口)中可见的图像数据,后者不可见。
buffer swap(缓冲区交换)用来交换前端图像缓冲区和后端图像缓冲区。
VRAM还储存了depth buffer or z-buffer(深度缓冲区),用来记录像素点到虚拟摄像机的距离。
应用还可能同时创建一个stencil buffer(模板缓冲区),包含图像缓冲区中每个像素的整数掩码,可用于启用或禁用基于每像素的绘制。
对于绝大多数3D渲染应用而言,VRAM主要用来texture maps(纹理遍历)。

1.2 顶点变换

每个模型的顶点数据存放在object space(对象空间)中,每个模型的位置和方向数据又集中存储在world space(世界空间)中。在一个模型被渲染前,它的所有粒子数据必须转移到camera space or eye space(摄像机空间)中。方法是将对象空间到世界空间的矩阵变换表示和世界空间到摄像头空间的矩阵变换表示联系起来,它们的乘积称作model-view变换。
在模型的顶点被变换到摄像机空间后,它们会经历有透视效果的projection transformation(投射变换)。投射变换是发生在四维齐次坐标系中的,在投射之后被称作homogeneous clip space(齐次裁剪空间),名称来源于在该空间中图形基元会根据场景的可视区域而被剪裁以保证不会渲染任何视口之外的对象部分。
在齐次裁剪空间中,顶点都由normalized device coordinates(规格化设备坐标)来表示,其x,y,z都在[-1,1]的范围内。之后还需经历一次viewport transformation(视口变换),它将标准化坐标映射到视口所覆盖的像素坐标的实际范围。z坐标通常被转变成[0,1]中的浮点数,但随后会根据深度缓冲区将每个像素缩放到对应的数值,现在可以说这些顶点处于window space(视窗空间中)。

1.3 光栅化和片段操作

填充属于一个图形基元像素的水平跨度(顶点数据转化为片元)的过程被称作光栅化。
随后CPU为每个像素点计算深度,替换顶点颜色,替换材质坐标,这些信息结合像素所在位置称为fragment(片元)。
有时候可以启用face culling(背面剔除)来优化渲染性能。
在光栅化过程中给每个像素分配颜色和深度的过程称作fragment shading or pixel shading(片着色或像素着色)。
在形成图形片元后,还要经过一系列测试。

  1. Pixel Ownership Test: 检测该片元是否在视口中是可视的(有可能被遮挡)。
  2. scissor test: 有的应用会指明一个scissor rectangle(剪裁矩形)来剪裁掉矩形之外的部分。
  3. alpha test: 比较片元透明度和一个事先决定的值,如果不通过就丢弃该片元。
  4. stencil test: 该测试读取一个片元模板缓冲区中的值,将其与应用事先设定的值比较,根据失败和成功还可以自定函数,并且若成功还可以影响之后的深度测试。
  5. depth test: 比较当前片元的深度与深度缓冲区的深度,一般要求当前片元深度小于等于才能通过。

在通过所有测试后,一个片元的最终颜色会经过blending(混合)操作存储到image buffer(图像缓冲区)中。

chapter 2 矢量

3D游戏引擎使用矢量表示空间中的点,三角网格的顶点,摄像头的方向,三角网格曲面的方向等。

2.1 矢量特性

介绍一些矢量基础知识。

2.2 点乘

两个向量的dot product(点乘)也被称为scalar product(数量积) or inner product(内积)。
定义如下:
PQ=ni=1PiQi
且: PQ=||P||||Q||cosα
推导如下:
||PQ||2=||P||2+||Q||22||P||||Q||cosα
ni=1(PiQi)2=ni=1P2i+ni=1Q2i2||P||||Q||cosα
ni=12PiQi=2||P||||Q||cosα
再同时除以-2即可得到结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值