Matrix structure in XNA

The Matrix structure in XNA is a 4x4 matrix, which looks something like this:

P1x   P1y   P1z   w1 
P2x   P2y   P2z   w2 
P3x   P3y   P3z   w3 
vx     vy      vz     w4 
        While the 16 elements can really be any information you like, matrices are generally used for transformations (and most - but not all - of those transformations are "affine" transformations). In the matrix above, P1, P2, and P3 would be points, and v would be a vector. For an affine transformation,the 3x3 matrix of points (P1, P2, and P3) would indicate transformations like scaling and rotation, while the vector v would represent translation. In an affine transformation, w1, w2, and w3 would be 0, while w4 would be 1.

       For example, a matrix representing doubling the scale of an object (uniform scaling of 2.0) and moving it 10 units along the Z axis would look like this:

2.0   0.0   0.0   0.0 
0.0   2.0   0.0   0.0 
0.0   0.0   2.0   0.0 
0.0   0.0   10.0  1.0 



在XNA中使用的坐标系是右手坐标系

      4X4矩阵在第一行的前三个值,即11,12,13值是在X轴上的分量,第二行前三个值即21,22,23为Y轴方向上的值,第三行前三个值31,32,33为Z轴方向上的值。

下面的代码,是一些属性,得到和设置矩阵在前后左右上下方向的分向量。

        public Vector3 Backward { get; set; }

        public Vector3 Down { get; set; }

        public Vector3 Forward { get; set; }

        public Vector3 Left { get; set; }

        public Vector3 Right { get; set; }

        public Vector3 Translation { get; set; }

        public Vector3 Up { get; set; } 


Vector3.Forward=(0,0,-1)    Vector3.Backward=(0,0,1)

Vector3.Left=(-1,0,0)           Vector3.Right=(1,0,0)

Vector3.Up=(0,1,0)               Vector3.Down=(0,-1,0)


旋转

Matrix myMatrix = Matrix.CreateFromAxisAngle(Vector3.Right,MathHelper .Pi/6);

上面代码的意思是围绕X正轴旋转30°,系统运行,让我们看一下得到的矩阵值,如下:

1

0

0

0

0

0.866

0.5

0

0

-0.5

0.866

0

0

0

0

1

下面是绕Y轴的例子:

Matrix myMatrix = Matrix.CreateFromAxisAngle(Vector3.Up,MathHelper .Pi/6);

0.866

0

-0.5

0

0.5

1

0

0

0.5

0

0.866

0

0

0

0

1

下面是绕Z轴的例子

Matrix myMatrix = Matrix.CreateFromAxisAngle(Vector3.Backward,MathHelper .Pi/6);

0.866

0.5

0

0

-0.5

0.866

0

0

0.5

0

1

0

0

0

0

1

缩放:

Matrix myMatrix = Matrix.CreateScale(2, 3, 4);

分别沿x,y,z轴扩大2,3,4倍。

2

0

0

0

0

3

0

0

0

0

4

0

0

0

0

1

平移

Matrix myMatrix = Matrix.CreateTranslation(2, 3, 4);

1

0

0

0

0

1

0

0

0

0

1

0

2

3

4

1

可见平移主要用到了第四组向量。


http://www.cnblogs.com/mytudousi/archive/2011/10/27/2227042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值