620 likes | 819 Views
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
E N D
Chapter 3. Transforms变换 金小刚 Email: jin@cad.zju.edu.cn 浙江大学CAD&CG国家重点实验室,教I 三楼
变换可以用来改变物体的位置、形状;对物体、光源和摄像机设置动画等变换可以用来改变物体的位置、形状;对物体、光源和摄像机设置动画等 • 用齐次坐标,4X4矩阵来表示 • 大部分图形API (Application Programming Interface)包含矩阵操作
Affine transform: 平行线变换到平行线,但不保持长度和角度 基本变换 • Translation transform • Rotation transform • Scaling transform • Shearing transform • Transform concatenation • Rigid body transform • Normal transform
平移变换 y y x x
性质1:迹与旋转轴无关,都为 • 性质2:所有旋转矩阵为正交阵,多个旋转矩阵相乘仍为正交阵。
比例缩放变换 Example:Scaling in a certain direction 假设沿正交、右手系的矢量fx ,fy ,fz进行比例变换,则首先构造矩阵 最后的变换为
错切变换 • 六个基本错切矩阵:Hxy(s), Hxz(s), Hyx(s), Hyz(s), Hzx(s), Hzy(s)。第一个下标表示改变的坐标第二个下标表示实施错切的坐标
z z s Hxz(s) 1 1 x x 1 1 由于|H|=1, 故错切变换是一个保体积的变换
Concatenation of Transforms • 因矩阵相乘是不可交换的,所以矩阵的串连是与次序有关的 • 矩阵串连的好处:节约计算量,提高效率 • 复合矩阵为:C=TRS (对于column-major) 注:对于row-major,复合矩阵为C=SRT
刚体变换 • 只有物体的位置(平移变换)和朝向(旋转变换)发生改变,而形状不变,得到的变换称为刚体变换 • 特点:保持长度和角度
Normal Transform(法向变换) • 几何变换矩阵不能直接用于变换法向! • 假设变换几何的矩阵为M,则用于变换法向的矩阵为N=(M-1)T y y y incorrect correct polygon normal x x x 沿x方向比例缩放0.5
如果已知矩阵是正交的(只有旋转),则不需要计算机矩阵的逆:N=(M-1)T=M如果已知矩阵是正交的(只有旋转),则不需要计算机矩阵的逆:N=(M-1)T=M • 平移不影响法向 • 若是刚体变换(保长的),采用法向变换的优点是可以避免法向的重新单位化 • 什么时候应用?> 如果三角形的顶点包含法向信息,则必须应用法向变换。> 若法向是通过计算三角形边的叉积得到,则不需要。
逆矩阵的计算 • 如果矩阵由一个或多个简单变换复合而成,而且已知参数,则逆矩阵可通过“逆参数”和矩阵相乘次序来得到。例子:M=T(t)R(Ø),则M-1= R(-Ø)T(-t) • 如果矩阵已知是正交的,则M-1 =MT • 如果未知任何信息:伴随矩阵法、Cramer法、LU分解法、Gauss消去法 • Cramer法和伴随矩阵法具有较少的“if”分叉,应优先选用。在现代的体系结构中, “if”测试最好避免
特殊矩阵变换和操作 • 实时图形中非常重要的矩阵变换和操作1。Euler变换2。从一矩阵中抽取基本变换3。绕任意轴的旋转
Euler变换 • Euler变换是一种直观的使一个物体(或摄像机)朝向一指定方向的有效方法。 • 其来源:瑞士大数学家Leonard Euler • 缺省视域方向:视线为-z轴,头朝+y轴 • Euler变换是三个矩阵的相乘 • E为一正交阵,其逆矩阵
摇头 “No” y head 左右摇晃身体 roll 点头 pitch -z x Euler变换:Head,Pitch and Roll 其它命名方式:x-roll, y-roll, z-roll。在飞行仿真中,采用yaw而非head
Gimbal lock现象:当一个自由度丧失时。 • 当 时,矩阵只依赖一个角(r+h)
从Euler变换获取参数 • 从一正交矩阵反求Euler参数 • 把上式展开,得到
由于sin p= f21 , f01/f11= - tan r, f20/f22= -tan h • 故三个欧拉参数的值为 • h = atan2 (-f20, f22) • p = arsin(f21) • r = atan2(-f01,f11)
特殊情况处理 • 当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不是唯一的。
矩阵分解 应用需求: • 获取比例缩放因子 • 对于特殊系统,获取基本变换(如VRML采用Transform节点,不支持任意4X4矩阵) • 决定一个变换是否刚体变换 • 当只有矩阵信息时,动画中关键帧插值问题 • 从一矩阵中剔除错切部分 平移获取很容易,rotation, scaling, shears获取较复杂
绕任意轴旋转 • 绕任意单位轴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
正交坐标系的构造 • 数值稳定的方法:先找到r中绝对值最小的坐标分量,然后把其设置为0,然后设置
由(r, s, t)构造矩阵M,该矩阵M把r变换为x轴, s变换为y轴, t变换为z轴。 • 故最后的变换为 • 含义:先把r变换为x轴,然后绕x轴旋转,最后用M的逆矩阵变换回去。注:这里M-1=MT
Goldman提出的方法 • 参考:Goldman, Ronald, “Matrices and Transformations ”, in Graphics Gems, 1990, pp.472-475
四元数(Quaternion) • 最早由Sir William Rowan Hamilton于1843年提出,从复数推广到四维空间 • 1985年,Shoemake把四元数引入计算机图形学 • 在表示旋转和朝向方面,优于Euler角。具有表示紧凑,朝向插值稳定的优点
数学背景 • 定义: 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称为虚轴
四元数乘: 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)
四元数共轭: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)
线性性: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)
四元数变换 • 单位四元数的最重要性质:能表示任意旋转,而且表示简单、紧凑 • 给定矢量p=(px, py , pz , pw)T和单位四元数 q= (sinøuq, cosø),qpq-1把p绕单位轴uq旋转2ø角度 • q和-q表示相同的旋转 • q和r的复合旋转为rq uq ø ø
矩阵转换 • 把q转化为旋转矩阵,可得到( 设s=2/n(q) ): 对于单位四元数,上式简化为
旋转矩阵到四元数的转换 • 由Mq可得到 故若得到qw,则qx、qy、qz便可得。因为
单位四元数的球面线性插值 • 给定两个单位四元数q和r,计算其插值四元数 • 代数形式 • 更有用的形式Spherical Linear intERPolation (Slerp)
多个单位四元数的插值 • 目标:给定单位四元数q0, q1, … qn-1,计算其插值四元数 • 用Slerp直接推广,会导致关键帧处朝向的变化不连续 • 三次样条法: (1) 首先计算辅助四元数 (2) 然后用三次样条进行插值
从一个矢量旋转到另一矢量 • 给定两个单位矢量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Ø),简化后可得
通过巧妙的技巧,对应的旋转矩阵简化为 由于没有开方和三角运算,计算效率高
顶点混合(Vertex Blending) • 假设一个数字角色的手臂用前臂和后臂来模拟,我们要对手臂设置动画。 • 若采用刚体变换设置动画,则关节处(肘)不像真实手臂。因为我们采用了两个分离的物体来模拟手臂,在关节处有重叠部分。 • 解决方法:Vertex Blending (其它称呼:Skinning, Enveloping, Skeleton-subspace Deformation) 采用一个物体模拟,关节处应是柔性的。
前臂2/3, 后臂1/3 folding (2/3,1/3) bones + + + + (1/3,2/3) 刚 体 simple skin 顶点混合
最简单方法:前臂和后臂仍单独设置动画,但关节处用一柔性的“skin”来连接。最简单方法:前臂和后臂仍单独设置动画,但关节处用一柔性的“skin”来连接。 • 柔性部分的一部分顶点由前臂的矩阵来变换,另一部分由后臂的矩阵来变换。即:一个三角形的顶点可以由不同的矩阵来变换,而不是一个矩阵。这种基本技术有时也称为“Stitching”。 • 进一步推广:一个顶点可以由几个不同的矩阵进行加权变换 • 实施方法:在物体上放置关节骨架,每个骨架按用户给定的权因子影响顶点。
整只手臂可以是 “柔性”的。所有的顶点可以由多个矩阵影响。整个多边形网格常称为骨架上的“skin”(外皮) vertex blending 例子
顶点混合的数学表示 • p为原始顶点,u(t)为变换后的顶点,n为影响p的关节数目 • Mi:把第i个关节骨架的初始坐标系变换到世界坐标系 • Bi(t):第i个关节随时间变化的世界变换,通常是一系列矩阵的连乘 • wi:第i个关节骨架作用于p的权因子 vertex blending 例子
顶点混合可在CPU上实现。如果是瓶颈,则该操作应在图形硬件上实现,顶点混合可在CPU上实现。如果是瓶颈,则该操作应在图形硬件上实现, • 有些图形硬件支持顶点混合。也可以用可编程图形硬件(Vertex Shader)实现。 • DirectX 8 允许两种流水线来实现Skinning: (1) Fixed function path (2) Vertex shader
Fixed function path: 最多允许256个矩阵,每个顶点可最多用其中4个矩阵(在实用中已足够)。该系统称为“indexed vertex blending”。 • 缺点:Fixed function path 不能与Vertex shader联合使用,因为 Vertex shader 是另一个流水线的一部分。 • 采用Vertex shader实现vertex blending 的好处: (1). 硬件加速 (2). 可与per-pixel lighting 结合
Vertex Blending的一些其它问题 • 如果需要对皮肤模型进行精确的碰撞检测,则为了获取变换后的顶点,顶点混合不得不在CPU内进行(否则需要在GPU和CPU之间进行顶点传输)。 • 顶点混合可能出现的问题:不应该的折叠、扭曲,自交
投影(Projections) • 到目前为止,齐次变换中的w分量还没有用到 • 透视投影矩阵(Perspective projection matrices)将用到该分量 • 我们采用右手坐标系,视线方向为-z注:DirectX 采用的是左手系
正交投影(Orthographic Projection) • 特征:平行线投影后仍为平行线 • 正投影到平面z=0的投影矩阵为
实现正交投影更常用的矩阵:通过六元组来表达。(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