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
可以再根据平面和射线的定义,推导出平面与射线相交的方程。
因为推导很简单,就不写了 :)
变换包含:平移、旋转和缩放。
我们可以对坐标进行所有的三种变换操作;
而对于向量,则只能做 旋转 和 缩放,因为向量不包含位置信息,所以对他做平移变化是无意义的。
每一种变换,都有对应的变换矩阵,用向量或坐标乘以变换矩阵,即可对它们完成变换。
变换矩阵之间,也可以做乘法叠加,叠加的几何意义是把变换按叠加的先后顺序复合到一个矩阵中去,注意矩阵叠加不满足交换律。
变换矩阵是一个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
可以再根据平面和射线的定义,推导出平面与射线相交的方程。
因为推导很简单,就不写了 :)
相关文章推荐
- 3D游戏基础 空间几何(一) 向量与顶点
- 3D游戏基础 空间几何(二) 向量运算
- 制作3D游戏所需的数学基础 - 平面
- 3D游戏基础 Direct3D(三) 固定管线之变换
- 制作3D游戏所需的数学基础 - 平面
- DirectX 3D_基础之拾取 屏幕到投影窗口的变换 对射线进行变换 射线/物体相交判断
- 画法几何,工程制图基础.....多角度平面投影图推断立体空间结构,实际距离的判别等
- 3D游戏基础 变换 拾取 动画原理
- 制作3D游戏所需的数学基础 - 平面
- 3D空间中射线与轴向包围盒AABB的交叉检测算法
- 【DirectX 2D游戏编程基础】directx 精灵绘图的应用,锚点与变换
- 《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
- 游戏编程指南 -- 容纳游戏的空间(windows编程基础)
- [3D基础]3D游戏中的各种旋转与基变换(2)
- 3D空间基础概念之一:点、向量(矢量)和齐次坐标
- 三维空间几何变换原理[平移、旋转、错切]
- DirectX 游戏编程之3D空间,顶点缓存及索引缓存
- 在unity向量空间内绘制几何(4): 利用平面几何知识画像素直线。
- 推荐一本3D基础的书----《3D数学基础图形与游戏开发》
- 3D基础:3D坐标变换在OpenGL 中的实践