1 / 61

Chapter 3. Transforms 变换

Chapter 3. Transforms 变换. 金小刚 Email: jin@cad.zju.edu.cn 浙江大学 CAD&CG 国家重点实验室,教 I 三楼. 变换可以用来改变物体的位置、形状;对物体、光源和摄像机设置动画等 用齐次坐标, 4X4 矩阵来表示 大部分图形 API ( A pplication P rogramming I nterface) 包含矩阵操作. Affine transform : 平行线变换到平行线,但不保持长度和角度. 基本变换. Translation transform Rotation transform

moral
Télécharger la présentation

Chapter 3. Transforms 变换

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3. Transforms变换 金小刚 Email: jin@cad.zju.edu.cn 浙江大学CAD&CG国家重点实验室,教I 三楼

  2. 变换可以用来改变物体的位置、形状;对物体、光源和摄像机设置动画等变换可以用来改变物体的位置、形状;对物体、光源和摄像机设置动画等 • 用齐次坐标,4X4矩阵来表示 • 大部分图形API (Application Programming Interface)包含矩阵操作

  3. Affine transform: 平行线变换到平行线,但不保持长度和角度 基本变换 • Translation transform • Rotation transform • Scaling transform • Shearing transform • Transform concatenation • Rigid body transform • Normal transform

  4. 平移变换 y y x x

  5. 旋转变换

  6. 性质1:迹与旋转轴无关,都为 • 性质2:所有旋转矩阵为正交阵,多个旋转矩阵相乘仍为正交阵。

  7. 比例缩放变换 Example:Scaling in a certain direction 假设沿正交、右手系的矢量fx ,fy ,fz进行比例变换,则首先构造矩阵 最后的变换为

  8. 错切变换 • 六个基本错切矩阵:Hxy(s), Hxz(s), Hyx(s), Hyz(s), Hzx(s), Hzy(s)。第一个下标表示改变的坐标第二个下标表示实施错切的坐标

  9. z z s Hxz(s) 1 1 x x 1 1 由于|H|=1, 故错切变换是一个保体积的变换

  10. Concatenation of Transforms • 因矩阵相乘是不可交换的,所以矩阵的串连是与次序有关的 • 矩阵串连的好处:节约计算量,提高效率 • 复合矩阵为:C=TRS (对于column-major) 注:对于row-major,复合矩阵为C=SRT

  11. 刚体变换 • 只有物体的位置(平移变换)和朝向(旋转变换)发生改变,而形状不变,得到的变换称为刚体变换 • 特点:保持长度和角度

  12. Normal Transform(法向变换) • 几何变换矩阵不能直接用于变换法向! • 假设变换几何的矩阵为M,则用于变换法向的矩阵为N=(M-1)T y y y incorrect correct polygon normal x x x 沿x方向比例缩放0.5

  13. 如果已知矩阵是正交的(只有旋转),则不需要计算机矩阵的逆:N=(M-1)T=M如果已知矩阵是正交的(只有旋转),则不需要计算机矩阵的逆:N=(M-1)T=M • 平移不影响法向 • 若是刚体变换(保长的),采用法向变换的优点是可以避免法向的重新单位化 • 什么时候应用?> 如果三角形的顶点包含法向信息,则必须应用法向变换。> 若法向是通过计算三角形边的叉积得到,则不需要。

  14. 逆矩阵的计算 • 如果矩阵由一个或多个简单变换复合而成,而且已知参数,则逆矩阵可通过“逆参数”和矩阵相乘次序来得到。例子:M=T(t)R(Ø),则M-1= R(-Ø)T(-t) • 如果矩阵已知是正交的,则M-1 =MT • 如果未知任何信息:伴随矩阵法、Cramer法、LU分解法、Gauss消去法 • Cramer法和伴随矩阵法具有较少的“if”分叉,应优先选用。在现代的体系结构中, “if”测试最好避免

  15. 特殊矩阵变换和操作 • 实时图形中非常重要的矩阵变换和操作1。Euler变换2。从一矩阵中抽取基本变换3。绕任意轴的旋转

  16. Euler变换 • Euler变换是一种直观的使一个物体(或摄像机)朝向一指定方向的有效方法。 • 其来源:瑞士大数学家Leonard Euler • 缺省视域方向:视线为-z轴,头朝+y轴 • Euler变换是三个矩阵的相乘 • E为一正交阵,其逆矩阵

  17. 摇头 “No” y head 左右摇晃身体 roll 点头 pitch -z x Euler变换:Head,Pitch and Roll 其它命名方式:x-roll, y-roll, z-roll。在飞行仿真中,采用yaw而非head

  18. Gimbal lock现象:当一个自由度丧失时。 • 当 时,矩阵只依赖一个角(r+h)

  19. 从Euler变换获取参数 • 从一正交矩阵反求Euler参数 • 把上式展开,得到

  20. 由于sin p= f21 , f01/f11= - tan r, f20/f22= -tan h • 故三个欧拉参数的值为 • h = atan2 (-f20, f22) • p = arsin(f21) • r = atan2(-f01,f11)

  21. 特殊情况处理 • 当cos p = 0时,f01=f11=0,此时r = atan2(-f01,f11)无解。因cos p = 0时,故sin p = ±1, 可任意设定 h=0, 再得到r = atan2(f10, f00) • 由于p的值域为[-900,900],如果p的值不在这个范围,原始参数无法求得。故求得的h、p、r不是唯一的。

  22. 矩阵分解 应用需求: • 获取比例缩放因子 • 对于特殊系统,获取基本变换(如VRML采用Transform节点,不支持任意4X4矩阵) • 决定一个变换是否刚体变换 • 当只有矩阵信息时,动画中关键帧插值问题 • 从一矩阵中剔除错切部分 平移获取很容易,rotation, scaling, shears获取较复杂

  23. 绕任意轴旋转 • 绕任意单位轴r旋转角度α是一个很有用的操作 • 思想: (1).由r构造一正交坐标系 (2).变换坐标系,使得r与x轴重合 (3).绕x轴旋转 (4).变换回去 y y y r r s M MT s s r x x x t Rx(α) z z z t t

  24. 正交坐标系的构造 • 数值稳定的方法:先找到r中绝对值最小的坐标分量,然后把其设置为0,然后设置

  25. 由(r, s, t)构造矩阵M,该矩阵M把r变换为x轴, s变换为y轴, t变换为z轴。 • 故最后的变换为 • 含义:先把r变换为x轴,然后绕x轴旋转,最后用M的逆矩阵变换回去。注:这里M-1=MT

  26. Goldman提出的方法 • 参考:Goldman, Ronald, “Matrices and Transformations ”, in Graphics Gems, 1990, pp.472-475

  27. 四元数(Quaternion) • 最早由Sir William Rowan Hamilton于1843年提出,从复数推广到四维空间 • 1985年,Shoemake把四元数引入计算机图形学 • 在表示旋转和朝向方面,优于Euler角。具有表示紧凑,朝向插值稳定的优点

  28. 数学背景 • 定义: q=(qv, qw)=(iqx+jqy+kqz+qw)= qv+qw , qv= (iqx+jqy+kqz)=(qx, qy, qz) , i2 = j2 = k2 =-1, jk=-kj=i, ki=-ik=j, ij=-ji=k qw为实部, qv称为虚部,i, j, k称为虚轴

  29. 四元数乘: qr =(iqx+jqy+kqz+qw) (irx+jry+krz+rw) = i (qyrz-qzry+rwqx+qwrx) + j (qzrx-qxrz+rwqy+qwry) + k (qxry-qyrx+rwqz+qwrz) + qwrw-qxrx-qyry-qzrz =(qv× rv+rw qv+ qw rv, qw rw- qv. rv) • 四元数加: q + r = (qv, qw) + (rv, rw) = (qv+rv , qw+rw)

  30. 四元数共轭:q*= (qv, qw)*= (-qv, qw) • 四元数范数: n(q)= ||q2|| =q q*=q* q = qv .qv+q2w=q2x+q2y+q2z+q2w • 四元数的逆:q-1= q* / ||q2|| • 共轭法则: (q*)*= q; (q+r)*= q*+ r* ; (qr)*= r*q* • 范数法则: n(q) = n(q*); n(qr) = n(q) n(r)

  31. 线性性:p(sq+tr) = s pq+ tpr (sp+tq)r = s pr+ tqr • 交换率:p(qr)=(pq)r • 单位四元数: n(q) =1, 可写成 q= (sinøuq, cosø)=sinøuq+cosø; 其中||uq||=1 • 对于单位复数,有 cosø+ isinø = eiø 对于单位四元数有:q= sinøuq+ cosø= eøuq • 对数运算:log(q)=log(eøuq)=øuq • 指数运算:qt=(sinøuq, cosø)t=eøtuq =sin(øt)uq+ cos(øt)

  32. 四元数变换 • 单位四元数的最重要性质:能表示任意旋转,而且表示简单、紧凑 • 给定矢量p=(px, py , pz , pw)T和单位四元数 q= (sinøuq, cosø),qpq-1把p绕单位轴uq旋转2ø角度 • q和-q表示相同的旋转 • q和r的复合旋转为rq uq ø ø

  33. 矩阵转换 • 把q转化为旋转矩阵,可得到( 设s=2/n(q) ): 对于单位四元数,上式简化为

  34. 旋转矩阵到四元数的转换 • 由Mq可得到 故若得到qw,则qx、qy、qz便可得。因为

  35. 故单位四元数为

  36. 单位四元数的球面线性插值 • 给定两个单位四元数q和r,计算其插值四元数 • 代数形式 • 更有用的形式Spherical Linear intERPolation (Slerp)

  37. 多个单位四元数的插值 • 目标:给定单位四元数q0, q1, … qn-1,计算其插值四元数 • 用Slerp直接推广,会导致关键帧处朝向的变化不连续 • 三次样条法: (1) 首先计算辅助四元数 (2) 然后用三次样条进行插值

  38. 从一个矢量旋转到另一矢量 • 给定两个单位矢量s和t,要把s变换到t • 该问题可很容易采用四元数来解决。 (1) 首先计算单位旋转轴u=(s×t)/|| s×t || (2) e=s.t=cos(2Ø), ||s×t||=sin(2Ø), 2Ø为s和t之间的夹角,则所对应的旋转四元数为q=(sinØu,cosØ),简化后可得

  39. 通过巧妙的技巧,对应的旋转矩阵简化为 由于没有开方和三角运算,计算效率高

  40. 顶点混合(Vertex Blending) • 假设一个数字角色的手臂用前臂和后臂来模拟,我们要对手臂设置动画。 • 若采用刚体变换设置动画,则关节处(肘)不像真实手臂。因为我们采用了两个分离的物体来模拟手臂,在关节处有重叠部分。 • 解决方法:Vertex Blending (其它称呼:Skinning, Enveloping, Skeleton-subspace Deformation) 采用一个物体模拟,关节处应是柔性的。

  41. 前臂2/3, 后臂1/3 folding (2/3,1/3) bones + + + + (1/3,2/3) 刚 体 simple skin 顶点混合

  42. 最简单方法:前臂和后臂仍单独设置动画,但关节处用一柔性的“skin”来连接。最简单方法:前臂和后臂仍单独设置动画,但关节处用一柔性的“skin”来连接。 • 柔性部分的一部分顶点由前臂的矩阵来变换,另一部分由后臂的矩阵来变换。即:一个三角形的顶点可以由不同的矩阵来变换,而不是一个矩阵。这种基本技术有时也称为“Stitching”。 • 进一步推广:一个顶点可以由几个不同的矩阵进行加权变换 • 实施方法:在物体上放置关节骨架,每个骨架按用户给定的权因子影响顶点。

  43. 整只手臂可以是 “柔性”的。所有的顶点可以由多个矩阵影响。整个多边形网格常称为骨架上的“skin”(外皮) vertex blending 例子

  44. 顶点混合的数学表示 • p为原始顶点,u(t)为变换后的顶点,n为影响p的关节数目 • Mi:把第i个关节骨架的初始坐标系变换到世界坐标系 • Bi(t):第i个关节随时间变化的世界变换,通常是一系列矩阵的连乘 • wi:第i个关节骨架作用于p的权因子 vertex blending 例子

  45. 顶点混合可在CPU上实现。如果是瓶颈,则该操作应在图形硬件上实现,顶点混合可在CPU上实现。如果是瓶颈,则该操作应在图形硬件上实现, • 有些图形硬件支持顶点混合。也可以用可编程图形硬件(Vertex Shader)实现。 • DirectX 8 允许两种流水线来实现Skinning: (1) Fixed function path (2) Vertex shader

  46. Fixed function path: 最多允许256个矩阵,每个顶点可最多用其中4个矩阵(在实用中已足够)。该系统称为“indexed vertex blending”。 • 缺点:Fixed function path 不能与Vertex shader联合使用,因为 Vertex shader 是另一个流水线的一部分。 • 采用Vertex shader实现vertex blending 的好处: (1). 硬件加速 (2). 可与per-pixel lighting 结合

  47. Vertex Blending的一些其它问题 • 如果需要对皮肤模型进行精确的碰撞检测,则为了获取变换后的顶点,顶点混合不得不在CPU内进行(否则需要在GPU和CPU之间进行顶点传输)。 • 顶点混合可能出现的问题:不应该的折叠、扭曲,自交

  48. 投影(Projections) • 到目前为止,齐次变换中的w分量还没有用到 • 透视投影矩阵(Perspective projection matrices)将用到该分量 • 我们采用右手坐标系,视线方向为-z注:DirectX 采用的是左手系

  49. 正交投影(Orthographic Projection) • 特征:平行线投影后仍为平行线 • 正投影到平面z=0的投影矩阵为

  50. 实现正交投影更常用的矩阵:通过六元组来表达。(l, r, b, t, n, f):Left, Right, Bottom, Top, Near, Far planes. • 该矩阵把由这些平面构成的Axis-Aligned Bounding Box (AABB)变换为与轴对齐的立方体 t y y y l r n T(t) S(s) b x x x z z z

More Related