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.空间坐标系到齐次坐标系的转换  点的齐次坐标表示  齐次向量 ! 坐标形式(w0 )
  • 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: