`
v5qqcom
  • 浏览: 1291913 次
文章分类
社区版块
存档分类
最新评论

Realtime Rendering 3rd笔记 9

 
阅读更多

Chapter 4 Transforms

所谓变换(transform)是指作用于点、向量、颜色等实体,以某种方式转变他们的操作。使用变换,可以移动、变形和动画物体、灯光和摄像机。变换还可以保证所有的计算处于同一个坐标系下,将物体投影到一个平面,这些都仅仅是冰山一角,总之,变换在图形学中非常重要。


线性变换满足:
f(x)+f(y)=f(x+y)和kf(x)=f(kx) 其中x,y是矢量,k是标量。
例如变换f(x)=5x是线性变换,因为对于矢量x,y, f(x)+f(y)=5x+5y=5(x+y)=f(x+y)


标量乘法被称作scaling transform。rotation transform是另一个线性变换。scaling和rotation transform实际上都是对于三维矢量的线性变换,可以用一个3X3矩阵表示。然而,这个矩阵的大小通常是不够的。下面的这个变换不是线性的: f(x)=x+(7,3,2)其中x是三维矢量。因为f(x)+f(y)=x+(7,3,2)+y+(7,3,2)=f(x+y)+(7,3,2)。多加了一次(7,3,2),因此不是线性变换。这种将一个固定矢量加到一个矢量上的变换是translation变换,即用相同的值移动位置,这也是一个很有用的变换。我们想将各种变换合并起来,例如将一个物体scale到它的一半大小,然后将它移动到一个不同的位置。如果只是用这种简单的函数形式是很难合并的。


将线性变换和translation合并可以使用仿射变换(affine transform),一般存储为一个4X4矩阵。所谓仿射变换是指执行一个线性变换然后再执行一个translation。为了表示四维向量,我们使用齐次记法(homogeneous notation),用相同的方式表示点和方向。一个方向向量表示为v=(Vx,Vy,Vz,0)T;一个点表示为v=(Vx,Vy,Vz,1)T。
所有的translation,rotation,scaling,reflection和shearing矩阵都是仿射矩阵。仿射矩阵的一个主要性质是他保留线之间的平行性,但是不保证长度和角度不会被改变。一个仿射变换也可以是任意单个仿射变换的序列的串联。

本章将会从最基础的仿射矩阵开始,然后讨论更特殊的矩阵以及四元数,然后讨论vertex blending和morphing这两个简单但是表达模型动画的强大的方式。最后会讨论投影矩阵。


以下是本章讨论的大部分的变换的列表:
T(t) translation matrix, Move a point. Affine.
Rx(p) rotation matrix, 绕x轴旋转p弧度. 正交(Orthogonal) & affine. y,z轴的类似
R rotation matrix, 任意的rotation matrix. Orthogonal & affine.
S(s) scaling matrix, 沿着x,y,z轴缩放s, Affine.
Hij(s) shear matrix, 用参数s切变分量i,相对于分量j, i,j属于{x,y,z}. Affine
E(h,p,r) Euler transform, 使用欧拉角(head or yaw, pitch, roll)定义的旋转矩阵. Orthogonal & affine.
Po(s) 正交投影, 平行投影到同一个面或体。Affine
Pp(s) 透视投影, 带透视的投影到一个面或体。
slerp(q,r,t) slerp transform, 创建一个插值的四元数相对于四元数q和t,使用参数t。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics