3D游戏图形三维数学及变换
2020-03-01 154浏览
- 1.游戏中的三维数学
- 2.上节课程回顾 图像文件结构 ( 以 BMP ) 图像显示(例程) 典型图像操作 典型的图像特效原理 二维维 游维维 (例程) 维维维
- 3.主要内容 向量、矩阵、平面以及相应的数学操作 三维维 点、 维 维维 次坐 维 维维 和维维维 矩维 三维绘制流程 三维绘制中的变换 照相机系统和相机模型 维域 、背面剔除和裁剪
- 4.学习方法 课堂上:理解概念 课后:阅读相关资料、书籍 最好是自己去推导一遍 :
- 5.参考书 计算机游戏程序设计。电子工业出版社。 计算机图形学算法基础 科学出版社 真实感图形学算法基础 科学出版社 OpenGL,DirectX 教材
- 6.颜色 可见光的波长 400-780 nm 三色原理用三种颜色表示: R,G,B. 减法颜色系统 : Cyan, Magenta, Yellow CMY – 常用于打印 加法颜色系统 : R+G+B=White CRT 显示器的基本元素 : 普通的 CRT 显示器遮罩上涂有 RGB 萤光材料, 负责接收 RGB 电子束。在栅状遮罩的设计中, 栅状的萤光材质是以垂直条状的方式分布, 并以 RGB 三色交替排列
- 7.显示器与缓冲区 彩色 CRT 包含维维 色点 维 维维 的数 维 维维 -象素 维维 RGB 三元组 R, G, 和 B 由每个象素单独控制 每个分量 8 个比特 维冲 区存 维维将 维维示在 维 维维示器上的内容 维 维维维 维 一般在显卡内存中
- 8.绘制流程 标准 的制流程由一系列计算 绘 组成 输入是:多边形 输出是保存在缓冲区的图像 主要涉及的操作是:三维变换与光照!
- 9.
- 10.Original Rotation Uniform Scale Nonuniform Scale Shear Images from Conan The Destroyer, 1984
- 11.向量几何基础 所有点和向量都相对于某个坐标系统定义。 标量:数值、实数等 . 点:二维或者三维位置,表示了几 何点在三维坐标系统中的位置。 – 向量 : 带长度的有向线段,无物理 位置 – – V Z V P Y X
- 12.向量 向量是一列数字,表示如下:
- 13.向量几何:基本操作 加法 : v1+v2 x1 x2 x1 x2 v1 v2 y1 y 2 y1 y 2 z1 z2 z1 z 2 点与向量的加法 : x0 x x0 x q p v y0 y y0 y z0 z z 0 z v2 v1 q=p+v v p 点的减法 : x1 v p1 p2 y1 z1 向量缩放 x2 x1 x2 y y y 2 2 1 z 2 z1 z 2 x s x sv s y s y z s z p1 p2 v
- 14.向量几何的其他操作 线性混合 : 长度与距离 : w a1v1 a2 v2 ...... an vn v x2 y2 z 2 单位向量 : 向量归一化 : v w v p1 p2 ( x1 x2 ) 2 ( y1 y2 ) 2 ( z1 z 2 ) 2 v 1 i.e. w 1
- 15.向量几何:点积 定义 : 属性 : d v1 v2 x1 x2 y1 y2 z1 z2 a b b a ( a c ) b a b c b 2 a a a 向量之间的夹角 : a b d a b a b cos( ); thus : cos( ) a b a if d 0 : 90 ; if d 0 : 90 ; if d 0 : 90 垂直向量 : a (a x , a y ) then : a ( a y , a x ) a a 0; a a ; a b b a b
- 16.向量几何:投影 p v1 v2 / v2 向量投影 : v1 P>0 v1 v2 v2 P<0 投影与坐标系 k j i
- 17.向量几何:叉积 V1 和 v2 的叉维维 是一个新的向量 维 维 维 维 维 维 v, 它与 v1 和 v2 都垂直 , 其 范数为 : v1 v2 v1 v2 sin( ), where v1 , v2 or : v1 v2 ( y1 z 2 z1 y2 ) i ( z1 x2 x1 z 2 ) j ( x1 y2 y1 x2 ) k 属性 : i j k i.e. v1 v2 x1 y1 z1 x2 y2 z 2 axb b a b b a area= axb a (b c ) a b a c 2 2 2 a a b a b (a b )
- 18.叉积与点积的区别 两个向量的点积是一个数 两个向量的叉积仍然是一个向量
- 19.点与向量的坐标系统 坐标系统由三个正交的向量 i, j, k 以及原点 O 组成 . 向量的表示 : v i x, v j y, v k z x v x i y j z k y z 点的表示 : i x p O x i y j z k y z k O j
- 20.线的表示方法 二维解析表达形式 : ax by c 0 三维解析表达形式 : 参数形式 : a1 x b1 y c1 z d1 0 a2 x b2 y c2 z d 2 0 p(t ) p0 t v or p(t ) p0 t ( p1 p0 ) or : p(t ) (1 t ) p0 t p1 (linear interpolation) 线段 t [t1 , t 2 ]
- 21.平面表示 解析表达式 ax by cz d 0 参数表达式 p ( s, t ) p0 sv1 tv2 平面法向 解析形式 : 参数形式 : p0 v2 v2 v1 n (a, b, c) n v1 v2 多维 形法向 维维维 : n ( p2 p1 ) ( p3 p2 ) p3 p4 p1 p2
- 22.平面与法向 三点决定一个平面,法向是垂直平面的向量
- 23.平面方程 维定 垂直平面的法向N=(A,B,C)T ,以及平 面上任意一点 (x0,y0,z0) ,我们能够得到未 知系数 D ,并确定相应的平面方程
- 24.齐次坐标 一个统一的点与向量表示方法 向量 : 点: xy v x i y j z k (i , j , k , O) z 0 xy p O x i y j z k (i , j , k , O) z 1 统一的形式 : x x / w y y / w z z / w w 1
- 25.齐次坐标 非齐次坐标 右边的四元组称为齐次坐标 齐次坐标
- 26.点的空间坐标与齐次坐标 三维空间上的点 (x,y,z)T 可以表示为四维空间 中的一个齐次点 (x,y,z,w)T ,其中 w=1 用维维 次坐 维 维维 表示空 维 维 维维 中的点,能 维 维 维 维 维维 方便 维 维维 行各种 维维 运算。同维 的,可将矩 维维维维维维维 写作 维维维 次形式,即 维维维维 将原来的 3x3 大小的矩阵扩充为 4x4 大小的矩阵。 例如, I 的齐次形式为:
- 27.空间坐标系到齐次坐标系的转换 点的齐次坐标表示 齐次向量 ! 坐标形式(w0 )
- 28.几何求交 (p54-p57) 线段求交 平行 ? 求交点的计算 通过三个点的园 : 主要任务是计算中心点 线与线求交、线与面求交 : 参数解 可用于裁剪 线与多边形求交 边界计算 光线与多边形求交
- 29.矩阵 矩阵是 n 个向量的并列表示
- 30.矩阵的加法 将矩维维维维 的元素直接相加 维维维维维维
- 31.矩阵减法 将矩阵对应的元素直接相减
- 32.矩阵与向量的乘法 矩阵与向量相乘 注意:矩维维 的列数必 维 维 维 维维 与向量的行数相等 维维维维维维维
- 33.矩阵乘法 两个矩维维 的乘法可以分解 维 维 维 维 维 维 维维 第一个矩 维 维 维 维维 与第二 维维 个矩阵中的每一列向量的乘法
- 34.矩阵乘法 如果 A 和 B 分别为 mxp 以及 pxn 大小的 矩阵,则 AxB 维 mxn 矩阵 一般的,矩阵乘法不满足交换率,即 AxB BxA 如果 I 是单位阵,则 AxI = IxA = A I 具有如下形式:
- 35.方阵的逆和行列式的值 方阵 A 的逆记为 A-1 : A-1A=AA-1=I 如果方阵对应的行列式的值 det(A) = 0 , 则 A 不可逆 如果 A 是 3x3 的方阵,则
- 36.游戏中的矩阵 三维图形学中一般使用 4x4 矩阵 0 0 Zero matrix : 0 0 m00 m 10 m20 m30 0 0 0 0 0 0 0 0 0 0 0 0 1 0 Identity matrix : 0 0 0 0 0 1 0 0 0 1 0 0 0 1 m01 m11 m21 m31 m02 m12 m22 m32 矩阵乘法 : m00 m01 m02 m03 p00 p01 p02 m p m m m 10 11 12 13 10 p11 p12 m20 m21 m22 m23 p20 p21 p22 m m m m p31 p32 31 32 33 p30 30 qij mi 0 p0 j mi1 p1 j mi 2 p2 j mi 3 p3 j p03 q00 p13 q10 p23 q20 p33 q30 q01 q02 q11 q12 q21 q22 q31 q32 q03 q13 q23 q33 m03 m13 m23 m33
- 37.Point3 数据结构 struct Point3 { Union { struct { float x,y,z; // 分量形式 }; float v[3]; // 数维维 形式 维 }; Point3() {}; // 缺省构造函数 Point3 (float X, float Y, float Z) {x = X; y=Y; z=Z} //… 更多 }; // 带参构造函数
- 38.Plane3 数据结构 struct Plane3 { Point3 n; // 平面法向 float d; // 原点垂直法向距离 Plane3() {} // 缺省构造函数 plane3(float nX,float nY, float nZ, float D) { n(nX, nY, nZ); d=D} //… 更多 : 从三点构在一个平面,从多维维 形构造一个平面等等 维 维维维维维维维 };
- 39.Matrix4 数据结构 struct matrix4 { union { struct { float float float float _11,_12,_13,_14; _21,_22,_23,_24; _31,_32,_33,_34; _41,_42,_43,_44 }; // 分量表示 float m[4][4]; // 矩维维 表示 维 }; // 带参构造函数 matrix4 (float IN_11, float IN_12, float IN_13, float IN_14, float IN_21, float IN_22, float IN_23, float IN_24, float IN_31, float IN_32, float IN_33, float IN_34, float IN_41, float IN_42, float IN_43, float IN_44) { _11=IN_11; _12=IN_12; _13=IN_13; _14=IN_14; _21=IN_21; _22=IN_22; _23=IN_23; _24=IN_24; _31=IN_31; _32=IN_32; _33=IN_33; _34=IN_34; _41=IN_41; _42=IN_42; _43=IN_43; _44=IN_44; } };
- 40.三维变换 一个变换通常用 4x4 矩阵表示 . 对一个点或者向量进行变换等价于将一个矩阵乘以该点或向量的齐 次坐标 . 向量的嵌套 : 如矩阵乘法 m00 m 10 m20 m30 m00 m 10 m20 m30 m01 m02 m11 m21 m12 m22 m31 m32 m01 m02 m11 m21 m12 m22 m31 m32 m03 p0 m00 p0 m01 p1 m02 p2 m03 m13 p1 m10 p0 m11 p1 m12 p2 m13 m23 p2 m20 p0 m21 p1 m22 p2 m23 m33 1 m30 p0 m31 p1 m32 p2 m33 m03 p0 m00 p0 m01 p1 m02 p2 m13 p1 m10 p0 m11 p1 m12 p2 m23 p2 m20 p0 m21 p1 m22 p2 m33 0 m30 p0 m31 p1 m32 p2
- 41.为什么要使用 4x4 矩阵 很多变换不能用 3X3 矩维维 来表示:如平移、投 维维维维维维维维 影、反射。 4x4 矩阵能描述所需要的变换
- 42.为什么使用齐次坐标 点和向量是 3D 的为什么要使用齐次坐标?
- 43.如何使用齐次坐标的第四个成员? 当把点放到齐次坐标中时,第四个成员为 1 , 因为点可以进行平移 当把向量放到齐次坐标中时,第四个成员为 0 ,因为向量和位置无关,平移不被定义。
- 44.左手坐标系 - 右手坐标系 右手坐标系:当右手四指沿 x 轴至 y 轴方向握紧, 拇指所指的方向即为 +z 方向(缺省坐标系) 左手坐标系:判断方法类似,用左手
- 45.平移 利用平移矩维维 ,将点 维 维 V=(x,y,z)T 平移至 V’= (x+Tx,y+Ty,z+Tz)T 处,表示为 V’=V+T
- 46.缩放 利用缩放矩阵,将点 V=(x,y,z)T 缩放 (d1,d 2,d3) 倍 其中对角线上的元素表示对应坐标系分别放 大 (di>1) 或者缩小了 (di<1) 的量
- 47.旋转 矩阵 R 是旋转矩阵,如果 R 的转置等于 R 的逆,即 RTR=RRT=I 每个矩阵 R 对应一单位长度的旋转轴 U 和 旋转角度。该对应并不是唯一的,例如-U 也是对应R 的旋转 轴
- 48.绕 x 轴旋转 当点维 x 轴以逆时针方向(从x 轴正方向向原点看)旋转角时,旋 转矩阵为: y x z
- 49.绕 y 轴旋转 当点绕y 轴以逆时针方向旋转角时,旋转矩阵为:
- 50.绕 z 轴旋转 当点绕z 轴以逆时针方向旋转角时,旋转矩阵为:
- 51.旋转 令 c=cos() 沿 X- 轴s:'>s: