[转]图形学原理 矩阵变换

[ 2007-05-13 13:45:11 | 作者: Conanlwl ]
字体大小: | |

空间中的某个点(x,y,z)的任何移动,旋转,缩放的变换,都是用这个点乘以某个一个矩阵而得到。那么模型是由一个个(x,y,z)的点组成,模型整个要变换,就是让每个点乘以某个矩阵。
这是三维引擎开发,和引擎代码阅读的必备的基础常识。
由于(x,y,z)乘以3*3矩阵可以达到旋转和缩放的目的,但是无法表示移动,所以为了统一,我们通常是采用乘以一个4行4列的矩阵。也就是说所有变换方法,都是用如下公式:
变换后点的(x’,y’,z’)=原来的(x,y,z) 乘以 4*4矩阵M
如果使用pv3d的数学类,写法如下:

var 点:number3D=new Number3D(x的值,y的值,z的值); //原来的点
var 数组:Array=[n11,n12,n13, 0,
                  n21,n22,n23, 0,
                  n31,n32,n33, 0,
                  nx , ny, nz, 1]; //构造矩阵内每个值,需要一个数组,我们通常都是以这种格式书写
var 矩阵: Matrix3D=new Matrix3D(数组); //构造矩阵
Matrix3D.multiplyVector4x4(矩阵,点); //点的x,y,z数据直接就更新为相乘后的数据了。

那么具体是用哪个矩阵M呢?下面我们就列出来:

旋转
旋转在三维里应该是最麻烦的东西,因为人类对旋转的描述是很有限。光靠矩阵控制旋转很多情况是非常复杂和不形象的,所以我们还发明了优拉角和四元数这些对旋转的控制更优良的办法,这些我们以后会讲到。

角度θ表示的是延某轴旋转的角度。
下面三个矩阵分别表示了点绕x轴,y轴,z轴的旋转矩阵。

移动
从公式我们很容易能看出,第4行1,2,3列的数,分别控制着点在x,y,z方向上的移动。

缩放
从公式我们很容易能看出,对角线上的n11,n22,n33,分别控制着点在x,y,z方向上的缩放。

这些就是最简单的变换矩阵,熟悉了这些,我们就又向前迈进了一步。
图形学应该是一个很有趣的东西,并非像很多学校和学生教授的的那种痛苦不堪的东西。其实道理非常简单,如果自己再具备一点编程知识,很容易就能做出自己的成像程序。

From:Flab3D.com

标签: pv3d  矩阵变换 
评论Feed 评论Feed: http://www.conanlwl.net/Feed/Comment/167.aspx
UTF-8 Encoding 引用链接: http://www.conanlwl.net/TrackBack/Save/167.aspx

浏览模式: 显示全部 | 评论: 0 | 引用: 0 | 排序 | 浏览: 687
Loading加载评论中...
Loading加载引用中...

发表评论
相关文章
Loading加载相关文章中...