3D数学

2017-09-12  本文已影响30人  rogerwu1228

1, 向量

2, 矩阵

3, 欧拉角

4, 四元数

5, 坐标系变换

6, 齐次坐标与透视变换的推导

向量和点在同一个基下就有不同的表达:3D向量的第4个代数分量是0,而3D点的第4个代数分量是1。像这种这种用4个代数分量表示3D几何概念的方式是一种齐次坐标表示。
"齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。"-- F.S. Hill, JR

透视投影变换由两步组成:
1) 裁剪: 用透视变换矩阵把顶点从视锥体中变换到裁剪空间的CVV中
2) 透视除法: CVV裁剪完成后进行透视除法

http://blog.sina.com.cn/s/blog_74eb759d0100odej.html
http://blog.sina.com.cn/s/blog_74eb759d0100ogsd.html

7,仿射变换矩阵

计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种

在三维场景中,当一个点P(x,y,z)绕x轴旋转θ角得到点P’(x’,y’,z’)。由于是绕x轴进行的旋转,因此x坐标保持不变,y和z组成的yoz(o是坐标原点)平面上进行的是一个二维的旋转,可以参考上图(y轴类似于二维旋转中的x轴,z轴类似于二维旋转中的y轴),于是有:
x′=x
y′=ycosθ−zsinθ
z′=ysinθ+zcosθ
写成(4x4)矩阵的形式 :


Snip20170914_5.png

绕Y轴的旋转和绕X轴的旋转类似,Y坐标保持不变,除Y轴之外,ZOX组成的平面进行一次二维的旋转(Z轴类似于二维旋转的X轴,X轴类似于二维旋转中的Y轴,注意这里是ZOX,而不是XOZ,观察上图中右手系的图片可以很容易了解到这一点),同样有:
x′=zsinθ+xcosθ
y′=y
z′=zcosθ−xsinθ
写成(4x4)矩阵的形式 :


Snip20170914_6.png

与上面类似,绕Z轴旋转,Z坐标保持不变,xoy组成的平面内正好进行一次二维旋转(和上面讨论二维旋转的情况完全一样)

Snip20170914_8.png

http://blog.csdn.net/csxiaoshui/article/details/65446125

7,世界坐标变换要先缩放、后旋转、再平移的原因

一个三维场景中的各个模型一般需要各自建模,再通过坐标变换放到一个统一的世界空间的指定位置上。 这个过程在 3D 图形学中称作“世界变换” 。 世界变换有三种,平移、旋转和缩放 (实际还有不常用的扭曲和镜像,它们不是affine变换)。 这三种变换按各种顺序执行,结果是不同的。 可是实际的应用中一般按照 缩放 -> 旋转 -> 平移的顺序进行。 这样做的原因是可以获得最符合常理的变换结果。
比方说,通过世界变换希望获得的结果可能是:
将一个放在原点的物体(比方说可乐罐)移动到(30,50),让它自身倾斜 45 度,再放大 2 倍。
而不希望的结果是:
和本地坐标轴成角度的缩放(会导致扭曲,像踩扁的可乐罐)。
绕自己几何中心以外位置的原点的旋转 (地球公转式) 和缩放。
而颠倒了上述变换顺序就会得到这样不自然的结果。
具体的说:
当缩放在旋转之后进行时,会发生现象1。
当缩放和旋转在平移之后进行时会发生现象2。
这时因为:
在物体刚刚放入世界坐标系的时候使用的是本地坐标,也就是本地和全局坐标系的原点和坐标轴都是重合的(当然两者分别使用了左右手坐标系时除外 - 那是BUG),此时所有物体都“把世界坐标系当做自己的本地坐标系”。
而经过了坐标变换之后:
缩放变换不改变坐标轴的走向,也不改变原点的位置,所以两个坐标系仍然重合。
旋转变换改变坐标轴的走向,但不改变原点的位置,所以两个坐标系坐标轴不再处于相同走向。
平移变换不改变坐标轴走向,但改变原点位置,两个坐标系原点不再重合。
这样就可以解释问什么缩放不能在旋转之后,而缩放和旋转都不能在平移之后了。 于是没有问题的顺序只能是 缩放 -> 旋转 -> 平移 。

上一篇下一篇

猜你喜欢

热点阅读