土圭垚㙓数学课(四)空间变换

本文详细介绍了3D空间中的变换矩阵,包括平移、旋转、缩放及其组合。通过模型变换、观察矩阵和投影矩阵的阐述,解析了物体从物体空间到屏幕空间的四步变换过程。同时,讨论了透视投影和正交投影的区别,以及视口矩阵的作用。内容涵盖3D图形学的基础知识,适合学习3D图形编程的读者。
摘要由CSDN通过智能技术生成

我曾经在Shader山下(十六)坐标空间与转换矩阵中介绍过,一个物体要显示在平面上,需要经过四步空间变换(实际上是五步):
物体空间->世界空间->观察空间->裁剪空间(->归一化设备空间)->屏幕空间
这里写图片描述
(差不多就是这个意思)
实际上,在可编程渲染管线中,我们往往只需要操作从物体空间到裁剪空间的转换,可以用一个矩阵链乘M(odel)V(iew)P(rojection)表示。本文就介绍一下这三个矩阵。
索性全介绍了吧。

先简单介绍一下变换矩阵。

常用的变换矩阵有三种:平移矩阵、旋转矩阵和缩放矩阵。

平移矩阵:

如果一个物体在世界坐标系中的位置为 (px,py,pz) ,那么它的平移矩阵为:

T(p)=100001000010pxpypz1

旋转矩阵:

绕x轴旋转 θx ,旋转矩阵为:

Rx(θx)=10000cosθxsinθx00sinθxcosθx00001

绕y轴旋转 θy ,旋转矩阵为:
Ry(θy)=cosθy0sinθy00100sinθy0cosθy00001

绕z轴旋转 θz ,旋转矩阵为:
Rz(θz)=cosθzsinθz00sinθzcosθz0000100001

缩放矩阵:

一个向量沿x、y、z轴分别缩放 (qx,qy,qz) ,那么缩放矩阵为:

S(q)=qx0000qy0000qz00001

组合成变换矩阵

只需要将这些矩阵链乘即可。但是需要注意顺序。这里按照T(ranslate)R(otate)S(cale)和H(eading)P(itch)B(ank)的顺序进行链乘。
Q=T(p)Ry(θy)Rx(θx)Rz(θz)S(q)
等等!为什么是4*4的矩阵?参见百度百科齐次坐标
简单来讲,3*3的矩阵只能表示旋转和缩放矩阵,为了表示平移,便扩充为4*4的矩阵。
当然点或向量要与矩阵运算时也要扩充为4维(x,y,z,w)。其中w=1表示点,w=0表示向量。因为向量只有方向没有位置,所以w=0便不会与矩阵第4行进行运算。

模型变换矩阵

这个本身没什么,其实就是相对位置(模型空间)到绝对位置(世界坐标)的一个变换。
已知模型的位置、旋转角度和缩放值,带入之前的公式,便可以得到相应的模型变换矩阵。
当要计算模型内部某个点的世界坐标时,只需要将这个点与变换矩阵相乘即可。

观察矩阵

摄像机的方位可以由四个向量表示, p 表示位置, d 表示观察方向, u 表示上方向, r 表示右方向。
在空间变换时,我们希望将摄像机移动到世界坐标原点,并且观察方向与z轴重合,上方向与y轴重合,右方向与x轴重合。当然世界中的物体也要随之变换。
2D平面演示:
观察变换
设V为观察矩阵,那么就有:
Vp=(0,0,0)
Vr=(1,0,0)
Vu=(0,1,0)
Vd=(0,0,1)
因为摄像机没有大小,只有位置和方位,那么就表示,我们通过平移和旋转来完成这个变换。

首先是平移矩阵

没什么好说的:

T=100001000010pxpy
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值