最近在看龙书,写一下自己的学习理解,主要是物体运动的合成。

物体于局部坐标系内构建,每个物体拥有自己的局部坐标系以及相应的顶点矩阵A,并通过世界矩阵变换到唯一的世界坐标系

物体在某时刻发生了位移和旋转,以小车运动举个例子,车在 dt 时间内沿着朝向 r 产生了位移 s ,并改变了朝向,旋转了 θ 度

这里有两种方式合成物体的最终状态:

(1)先位移 r ,在终点位置上,旋转 θ 角度,故当前时刻渲染的图像 Ar = T * R,其中T是位移矩阵,R是在终点位置的绕轴旋转矩阵。

考虑时间上的累积,Ar = A * (T1*R1)*(T2*R2)*...*(Tk*Rk)*...*(Tn*Rn),其中 k = 1, 2, ..., n 表示每个时间片,Rk是在当前位置上的绕Y轴的旋转矩阵(转向嘛,我们认为极短的时间内上一时刻的转向后的方向就是下一时刻位移的方向)。

(2)先绕原点旋转 θ 角度,再位移到目标位置处,故当前时刻渲染的图像 Ar = R' * T,其中T是位移矩阵,R'是在局部坐标系内的旋转矩阵,也就是绕原点。

考虑时间上的累积,Ar = A * (R1*R2*...*Rk*...*Rn)*(T1*T2*...Tk*...*Tn),其中 k = 1, 2, ..., n 表示每个时间片,Rk是在原点绕Y轴的旋转矩阵。

* 解释一下为什么是绕原点旋转:

(1)A是在局部坐标系内构建的,一旦构建之后,位置关系就确定了(刚体),推入到GPU显存中的顶点坐标就确定了,在显存中自始至终都没有变过;

(2)在没有进行任何旋转和位移操作时,局部坐标系实际是和世界坐标系是重合的,此时的A在局部坐标系内的位置,其实也是在世界坐标系内的位置,A*W之后,物体发生了运动,也就是局部坐标系相对相对世界坐标系发生了运动(缩放、旋转、位移);

(3)物体的最终状态都可以认为是初始状态A经过一系列时间上的累积变化而形成的,物体最终的缩放、旋转、位移状态,都可以是在原点(也就是位移没有发生)发生缩放和旋转,再移动到相应的位置(产生位移)。这和先产生位移,在位移后的位置上再缩放和旋转是一样的。

由于DirectXMath库中提供的XMMatrixRotation系列函数所绕轴均为过原点的轴,但是(1)过程需要过当前位置处的轴,第一种方式在构建旋转矩阵并不容易。

第二种方式,令R = R1*R2*...*Rk*...*Rn,T = T1*T2*...Tk*...*Tn,W = R * T,则有 Ar = A * W,形式上更简单,实现也更简单。只需要计算当前时刻上要发生的旋转和位移,并将初始至当前时刻上的旋转、位移累积:R *= Rk,T *= Tk,就可以得到当前时刻的世界矩阵。

【DirectX 11学习笔记】世界矩阵的理解-运动合成的更多相关文章

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十三章:角色动画 学习目标 熟悉蒙皮动画的术语: 学习网格层级变换 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十一章:模板测试 代码工程地址: https://github.co ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第八章:光照 代码工程地址: https://github.com/j ...

  4. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https:/ ...

  5. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...

  6. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线 学习目标 了解几个用以表达真实场景的标志和2D图像 ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十章:阴影贴图 本章介绍一种在游戏和应用中,模拟动态阴影的基本阴影 ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 代码工程 ...

随机推荐

  1. 36)PHP,搜寻数据库信息在html中显示(晋级1)

    首先是数据库的样子展示: 然后就是我的PHP主文件了: <?php class db { public $host="localhost" ;//这个是主机的地址 publi ...

  2. 吴裕雄--天生自然 JAVA开发学习:序列化

    public final void writeObject(Object x) throws IOException public final Object readObject() throws I ...

  3. Docker系列一: docker简介及基本环境安装

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  4. left join on注意点

    右侧表的条件参数需要放在on后面 where 后面进放置左表的条件参数 比如消息表和用户消息表 消息表里存在类型为<系统消息>的消息是发送给全部用户 我们发送给系统消息时,不直接插入用户消 ...

  5. @echo off 批处理

    一个批处理文件 @echo off ipconfig /all @pause -------------------------------- @echo off 是什么意思 就是说关闭回显@echo ...

  6. tmux的基本用法

    tmux的基本用法: tmux #启动 C-b d #挂起,效果如同screen中的C-a d tmux attach #恢复会话,效果如同screen中的screen -r 更多功能(需要在tmux ...

  7. 羽翼sqlmap视频笔记

    access 注入 ./sqlmap.py -u "url"          注入判断./sqlmap.py -u "url" --tables  跑表./s ...

  8. smtp 邮件传输协议 qq版实现

    qq: telnet smtp.qq.com 587 (qq邮箱说明:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28& ...

  9. Python-删除多级目录

    def rmdirs(top): for root, dirs, files in os.walk(top, topdown=False): # 先删除文件 for name in files: os ...

  10. Spring 插件安装

    文件下载:https://pan.baidu.com/s/1jIBOggm 网站下载:http://dist.springsource.com/release/TOOLS/update/e4.5/