当前位置: 首页 > news >正文

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。

相关文章:

  • Android中的尺寸单位
  • Android提高第七篇之XML解析与生成
  • [汇总I]精选微软等公司数据结构+算法面试100题[第1-60题汇总]
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • LSPCI具体解释分析
  • urb传输的代码分析
  • 32位Windows 7环境安装Pydasm和Pydbg
  • usb学习有感
  • LoadImage()的使用
  • linux下删除.svn命令
  • 嵌入式开发资料集锦
  • Cassandra的事务支持及数据一致性解决方案
  • 表变量和临时表
  • 常见排序算法时间复杂度
  • 老子《道德经》第二十五章
  • 230. Kth Smallest Element in a BST
  • bootstrap创建登录注册页面
  • Create React App 使用
  • css选择器
  • ES6之路之模块详解
  • input的行数自动增减
  • k8s 面向应用开发者的基础命令
  • Nodejs和JavaWeb协助开发
  • Protobuf3语言指南
  • ReactNative开发常用的三方模块
  • React系列之 Redux 架构模式
  • Xmanager 远程桌面 CentOS 7
  • 对JS继承的一点思考
  • 分享几个不错的工具
  • 回流、重绘及其优化
  • 基于HAProxy的高性能缓存服务器nuster
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • # 计算机视觉入门
  • # 数论-逆元
  • $L^p$ 调和函数恒为零
  • (3)(3.5) 遥测无线电区域条例
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (SpringBoot)第七章:SpringBoot日志文件
  • (多级缓存)缓存同步
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (算法)Travel Information Center
  • (转)visual stdio 书签功能介绍
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net Remoting常用部署结构
  • .Net Web窗口页属性
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)