您的位置:首页 > 其它

3D游戏基础 空间几何(三) 变换、平面、射线

2007-08-13 14:44 399 查看
因为内容都不多,所以把变换 与平面、射线 合在一起说。
变换包含:平移、旋转和缩放。
我们可以对坐标进行所有的三种变换操作;
而对于向量,则只能做 旋转 和 缩放,因为向量不包含位置信息,所以对他做平移变化是无意义的。

每一种变换,都有对应的变换矩阵,用向量或坐标乘以变换矩阵,即可对它们完成变换。
变换矩阵之间,也可以做乘法叠加,叠加的几何意义是把变换按叠加的先后顺序复合到一个矩阵中去,注意矩阵叠加不满足交换律。
变换矩阵是一个4 x 4的矩阵,所以向量和坐标需要扩展到齐次空间中。

向量:(x, y, z, 0)
坐标:(x, y, z, 1)
他们的区别在于第四项,向量的第4项取0,可以使矩阵的平移变换失效,而不影响旋转和缩放运算。
坐标第4项取1,使平移有效,并且平移变换的比例不会被变化。如果取2,则其平移的距离则是矩阵中定义的2倍。以此类推。
注意,在变换后,有可能出现第4项非0/1 的情况,这个时候,我们必须要做一个映射动作,将它从齐次空间映射回3维空间,方法很简单:
(x, y, z, w) --> (x/w, y/w, z/w, w/w) --> (x/w, y/w, z/w, 1) --> (x/w, y/w, z/w)

具体的变换矩阵就不写出来了,很容易找到。矩阵运算,请参考《线性代数》。

-------------------------------------------------------------------------------------------------------------

平面:
设空间中有向量 P0,则 (P - P0) 就形成了一条属于某个平面的新的向量。即定义了以(P - P0)为轴,穿过这个轴的所有平面。那么,要确定在这众多平面中某一个特定平面,则需要再确定一个垂直于这个平面的向量 (法向量) n,即有n Dot (P - P0) = 0,这样就定义出了一个平面。
其中,法线向量通常要做规范化运算。且,n 和 P0都是确定的,所以,平面可定义为:
n Dot P - n Dot P0 = 0, 令 d = - n Dot P0,则有:
n Dot P + d = 0
相关的判断:
n Dot P + d = X;
若 X<0, 点P位于平面的背面,|X| 即点P到平面的距离
若 X>0, 点P位于平面的正面,|X| 为点P到平面的距离
这两点,很容易证明,就不再详细写了。

------------------------------------------------------------------------------------------------------------

射线:
设起点为 P0, 方向为 u, t 为参数,t 属于 [0, 无穷大),当t 属于(-无穷大, +无穷大)时就表示直线。
p(t) = p0 + t * u

可以再根据平面和射线的定义,推导出平面与射线相交的方程。
因为推导很简单,就不写了 :)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: