Games101 04 - 坐标空间、MVP变换

目录

 1.Coordinate space 坐标空间

1.1 为什么有各式各样的坐标空间?

1.2 Model space 模型空间

1.3 World space 世界空间

1.4 View space 视图空间

1.5 Clip space 裁剪空间

2. DTransformations in homogeneous coordinates

2.1 Rotation

2.1.1 欧拉角与万向锁

2.2 Translation

2.3 scale

3. Model-View-Projection 变换

3.1 Model transformation 模型变换-放置物体

3.2 View(camera) transformation 视图变换-摆放相机

3.3Projection transformation 投影变换-按下快门

3.3.1 Orthographic Projection 正交投影

3.3.2 Perspective Projection 透视投影

3.3.2.1 求挤压矩阵

3.3.2.2 挤压变换后Z为什么变大(物体变远):


 1.Coordinate space 坐标空间

1.1 为什么有各式各样的坐标空间?

  1. 在研究特定问题时使用特定的坐标空间可以简化问题

  2. 变换即矩阵强调“过程”的另一种说法,本质都是改变当前坐标系的基向量,所以任意一个矩阵(变换)都会改变当前的坐标空间

1.2 Model space 模型空间

又称本地坐标系,在Unity中,模型空间和世界空间默认的是左手坐标系,原点一般是模型的几何中心,可在建模软件中修改。

1.3 World space 世界空间

又称全局坐标系,原点位于场景的某个位置并保持不变

1.4 View space 视图空间

又称相机坐标系,在Unity中是右手坐标系(相机会朝向-z方向从而造成Z值远小于近,但XY轴都是远大于近,这很别扭。OPENGL正是因为这点所以用左手系,但是又会造成X叉乘y不再等于Z而是-Z)。如果视图空间的原点需要改变的同时又不希望场景变化需要对场景中的所有物体应用同一个矩阵以实现相对运动。

1.5 Clip space 裁剪空间

希望用视锥体围成的区域对图元进行裁剪,但是如果直接用视锥体来定义裁剪空间,不同的视锥体就要定义不同的处理过程,而且对于透视状态下的视锥体,判断一个顶点是否在视锥体内很困难,所以需要一个更通用的空间进行判断。所以需要将视图空间通过正交投影矩阵 / 透视投影矩阵变换为裁剪空间,才好对图元进行裁剪和剔除


2. DTransformations in homogeneous coordinates

2.1 Rotation

笛卡尔坐标系下,绕x,y,z轴旋转 α 角度的变换矩阵分别给出如下:

已知xy能求z,给yz能求x,这叫循环对称。y是由z叉乘x得到而不是xz,所以得出绕y轴旋转的矩阵是转置的。

Y取反因为是Unity中是左手坐标系。在X轴上左比右小,y轴下比上小,Z轴却是远小于近,这是为了保证右手坐标系所以沿-Z方向看的,而OPENGL正是因为这点所以用左手系,但是会造成X叉乘y不再等于Z而是-Z,所以如果坐标相反是正常现象,因为用的不是同一个坐标系

2.1.1 欧拉角与万向锁

任意旋转能用3个旋转分量的复合矩阵表示

 

  • 绕X轴旋转,即绕pitch(俯仰角)旋转
  • 绕Y轴旋转,即绕yaw(航向角)旋转
  • 绕Z轴旋转,即绕roll(翻滚角)旋转

在Unity3D中固定使用Z->X->Y这套旋转顺序,UE4中使用左手系Z-up坐标系,按Z->Y->X的旋转顺序,两者都可以,但只要中固定的一个顺序来编码旋转或者朝向,而j就会导致GimbalLock的问题:假设我们使用𝑥-𝑦-𝑧的顺序旋转任意一个点

当前的𝑧轴与原来的𝑥轴重合,也就是说,最后𝑧轴的旋转与𝑥轴的旋转 其实操纵的是同一个轴,一旦𝑦轴上的变换角将这 两个旋转轴对齐,我们就没有任何办法对最初的𝑧轴进行旋转了.无论𝑥 轴与𝑧轴的旋转角是多少,变换都会丧失一个自由度GimbalLock问 题的核心还是在于我们采用了固定的旋转顺序

解决方案:

1.在最内部添加一个𝑥轴Gimbal,或者说在变换序列的最后再添加一个𝑥轴的旋转变换,不能从一开始的时候也可以选择采用四个Gimbal的设计,但是这仍不能完全解决问题, 因为除了𝑦轴之外其它轴的旋转仍然可能将其中的两个轴或者三个轴对 齐,只不过现在GimbalLock产生的几率可能会变小而已。

2.四元数:在另一篇博客中有详细介绍

对于更一般的情形,绕起点为原点、方向向量为 n=(nx,ny,nz) ( n 为单位向量)的轴旋转的矩阵可由罗德里格斯旋转公式给出:(如果n不经过原点则平移到原点进行旋转再将n移回原位)

ps:I是3×3单位矩阵,n是在n坐标系下各个基底的单位向量

最后的向量的叉乘的矩阵形式,表示这里运用某个叉乘。

得到旋转矩阵R后,利用公式​可将齐次坐标(x,y,z,w)绕指定轴旋转 α 角度得到 (x′,y′,z′,w) 。可以看出,齐次坐标中的 w 在旋转变换前后不变,且不影响其他坐标的值。

2.2 Translation

其中, w=0 时表示平移对象为向量,由于向量只与相对位置有关,故平移前后不发生任何变化。 w=1 时表示平移对象为点,且位移量分别为 Δx,Δy,Δz 。w 为其他值时可先化为 1 再进行平移。

2.3 scale


3. Model-View-Projection 变换

将三维空间中的显示到二维显示屏的变换:把顶点坐标从:局部坐标(局部空间) → 世界坐标 → 观察坐标 → 裁剪坐标 →屏幕坐标

3.1 Model transformation 模型变换-放置物体

顶点坐标从模型空间 → 世界空间,这个矩阵是随着物体的运动而改变的。

通过将局部空间的坐标点乘一个变换矩阵来得到他在世界空间的位置

Model矩阵可以拆分成Translate、Rotate和Scale三个矩阵的点乘

对顶点依次进行了:缩放→旋转→平移,因为矩阵乘法不具有交换律因此顺序不能改变


3.2 View(camera) transformation 视图变换-摆放相机

把camera放在世界坐标的原点,Look at -Z,up at Y世界空间 → 视觉空间(以camera为中心的空间坐标系)

1.平移:通过平移矩阵将camera移动到世界空间的原点位置(”约定俗成”的位置)

2.旋转:通过旋转矩阵将相机的朝向和头顶朝向设置为-Z,Y,两者的叉乘的方向朝向为X。但从某个向量旋转到标准的XYZ轴对应的矩阵不好写,但其逆矩阵即从XYZ旋转到对应的向量的矩阵很好写,又因为旋转矩阵是正交矩阵,其逆矩阵等于矩阵的转置

注意旋转Y轴要取反,因为是左手坐标系

  • 如果摄像机和物体同时应用改变换就可以保证照片不变

  • 可知两种变换运用的矩阵是相同的,所以合称为MVP中的MV - model view transformation,两个变换都是在给投影变换做准备

3.3Projection transformation 投影变换-按下快门

视觉空间→裁剪空间(判断顶点是否在可见范围内,(看不到的没必要处理)

注意:p矩阵并不是真正的做投影,而是为投影做准备。

视锥体分为两种投影,一种是正交投影(orthographic projection),一般在2D游戏或渲染小地图中使用。第二种是透视投影(perspective projection),一般在3D中广泛使用,而他们所对应的投影矩阵也不相同。

3.3.1 Orthographic Projection 正交投影

正交投影没有”近大远小“(将摄像机拉的无限远,这样两个clip的大小就近乎没有区别)

1.把长方形视锥体的中心坐标平移到原点。右+左 / 2,-是因为要移动到原点

2.再应用缩放矩阵缩放到(-1,1),也就是映射到(-1,1)的三次方。移动到长宽为1是为了在适配各种分辨率屏幕时方便计算,比如1280×720。对应边与分母消后剩下的2即为缩放后的长度,左右各占一半。

3.3.2 Perspective Projection 透视投影

1.(要求远平面的中心不变化,内平面没有任何变化)应用Mpersp ->ortho矩阵将Frustum挤压为Cubiod,将远平面向内挤压至与内面大小一致。

2.再做一次正交投影

计算结果如下:

3.3.2.1 求挤压矩阵

推导过程,可选择跳过

将y’和y、x‘和x的关系代入挤压变换后的点坐标中,再利用齐次坐标(x,y,z,1)与(x/w,y/w,z/w,w)表示同一个点的特征将前两行的未知量Z消去,Z表示远视面和近视面之间某点到相机位置的Z坐标差。是对于每一个平面的,而Z和Z’的关系我们现在还不清楚,只有远近两个平面上的点保持不变,之间的点并非不变而会变远(离远视面更近,Z变的更大),关于这点后面会从2点给予证明。

根据相似关系找到的变换前后的XY坐标关系可以完成挤压矩阵的一部分

再根据1.任何近视面的点的坐标在挤压变换前后不变,2.任何远视面的点Z坐标不会变,即可推出第三行

  • 为什么代入n而不是其他数?

本质上只要求z按顺序重新映射即可,不存在精确值,因为投到2d平面了,只要确保远近顺序不变即可。所以只需凑一个好算的特殊值,你要n的5次6次都可以,但是不好算。简单来讲就是根据透视投影中观测到的性质,通过 z(近n 远f) 先得到 x,y 的映射关系,填充到矩阵里,然后取两个特殊点填充完矩阵。这是凑合理性,不是证明唯一合理性

  • 为什么齐次坐标最后一行的第3个数是1而不是最后1个,就像之前的仿射变换一样?

虎书:

这个向内挤压的操作无法通过仿射变换实现,因为输入向量的坐标出现在分母中

之前通过使用0001作为仿射变换(平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)矩阵第四行

如果我们允许变换矩阵的底行有任何值,则可以实现更大范围的变换,从而使w取1以外的值

2.经验角度:

假设图中的铁轨可能有100m长,但实际你能感觉到图片的后半部分占据了大约80米的长度,这说明在投影变换到屏幕的过程中,点都在向远处移动。


Quote:

Games101课程

3B1B的线性代数课程

计算机图形学 5:齐次坐标与 MVP 矩阵变换 - 知乎 (zhihu.com)

https://krasjet.github.io/quaternion/bonus_gimbal_lock.pdf

3D数学:欧拉角、万向锁、四元数 - HighDefinition - 博客园

透视投影 中间 Z 变大还是变小_透视投影不变z值-优快云博客

尾言:

还有许多很久以前记的笔记但不确定出处如有知道出处的朋友可以告诉我,仅供学习如有侵权我会及时删除

都看到这里啦,欢迎加群一起进一步交流游戏制作相关的技术哦!群:1005869797

内容概要:《2024年中国城市低空经济发展指数报告》由36氪研究院发布,指出低空经济作为新质生产力的代表,已成为中国经济新的增长点。报告从发展环境、资金投入、创新能力、基础支撑和发展成效五个维度构建了综合指数评价体系,评估了全国重点城市的低空经济发展状况。北京和深圳在总指数中名列前茅,分别以91.26和84.53的得分领先,展现出强大的资金投入、创新能力和基础支撑。低空经济主要涉及无人机、eVTOL(电动垂直起降飞行器)和直升机等产品,广泛应用于农业、物流、交通、应急救援等领域。政策支持、市场需求和技术进步共同推动了低空经济的快速发展,预计到2026年市场规模将突破万亿元。 适用人群:对低空经济发展感兴趣的政策制定者、投资者、企业和研究人员。 使用场景及目标:①了解低空经济的定义、分类和发展驱动力;②掌握低空经济的主要应用场景和市场规模预测;③评估各城市在低空经济发展中的表现和潜力;④为政策制定、投资决策和企业发展提供参考依据。 其他说明:报告强调了政策监管、产业生态建设和区域融合错位的重要性,提出了加强法律法规建设、人才储备和基础设施建设等建议。低空经济正加速向网络化、智能化、规模化和集聚化方向发展,各地应找准自身比较优势,实现差异化发展。
数据集一个高质量的医学图像数据集,专门用于脑肿瘤的检测和分类研究以下是关于这个数据集的详细介绍:该数据集包含5249张脑部MRI图像,分为训练集和验证集。每张图像都标注了边界框(Bounding Boxes),并按照脑肿瘤的类型分为四个类别:胶质瘤(Glioma)、脑膜瘤(Meningioma)、无肿瘤(No Tumor)和垂体瘤(Pituitary)。这些图像涵盖了不同的MRI扫描角度,包括矢状面、轴面和冠状面,能够全面覆盖脑部解剖结构,为模型训练提供了丰富多样的数据基础。高质量标注:边界框是通过LabelImg工具手动标注的,标注过程严谨,确保了标注的准确性和可靠性。多角度覆盖:图像从不同的MRI扫描角度拍摄,包括矢状面、轴面和冠状面,能够全面覆盖脑部解剖结构。数据清洗与筛选:数据集在创建过程中经过了彻底的清洗,去除了噪声、错误标注和质量不佳的图像,保证了数据的高质量。该数据集非常适合用于训练和验证深度学习模型,以实现脑肿瘤的检测和分类。它为开发医学图像处理中的计算机视觉应用提供了坚实的基础,能够帮助研究人员和开发人员构建更准确、更可靠的脑肿瘤诊断系统。这个数据集为脑肿瘤检测和分类的研究提供了宝贵的资源,能够帮助研究人员开发出更准确、更高效的诊断工具,从而为脑肿瘤患者的早期诊断和治疗规划提供支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值