游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9746|回复: 18

问下公告板技术中使用转置矩阵的具体细节?

[复制链接]

7

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2006-12-28 17:51:00 | 显示全部楼层 |阅读模式
想了N久都没明白!哎
创建公告板世界矩阵的一个方法是从Direct3D获取当下的观察矩阵并把它转置,然后用这个矩定位,使其在任何时刻都朝向观察点,其实应该就是旋转.
但是不明白转置后的观察矩阵应该是怎样的?而且观察矩阵的数学表现方式是怎样?是如何具体实现的?查了很多资料都没查到.有知道的麻烦说下哈!非常非常感谢:)abc

比如:
D3DXMatrixTranspose(&matWorld, &matView);
        matWorld._41 = 10.0f;
        matWorld._42 = 0.0f;
        matWorld._43 = 10.0f;
g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-12-29 11:30:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

View Matrix 是由一个3*3 的旋转矩阵和一个位移向量组成,旋转矩阵可以由视点方向(Direction),向上向量(Up),右向量(Right)组成,也就是观察坐标系的3个坐标轴 x、y、z,在D3D中由于采用左手规则,所以旋转矩阵为
[ rx, ux, dx ]
[ ry, uy, dy ]
[ rz, uz,  dz ]
位移向量则是相机的位移取反。由以上特性得知,View Matrix 的 Transpose 实际上就是反向旋转,由于 billborad 要面向相机,它的旋转正是相机旋转角度取负,也就是 view 旋转矩阵的 Transpose。

7

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2007-1-4 17:44:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

实在没看明白,汗!能不能给出4*4的矩阵,试着推理下或者会明白.
这个右向量(Right)不太理解,观察矩阵
D3DXMATRIX *D3DXMatrixLookAtLH(
 D3DXMATRIX *pOut,
    CONST D3DXVECTOR3 *pEye,
    CONST D3DXVECTOR3 *pAt,
    CONST D3DXVECTOR3 *pUp
);
中并没有右向量呀.

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-4 18:03:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

右向量那玩意儿,一叉不就出来了么

FF年代,因为固定WorldViewProjection Matrix,想要billboard就必须将camera产生的view再转回去
Programable年代,假设模型输出时是正面,如果没有俯视情况,忽略掉view matrix就可以达到效果

3

主题

113

帖子

147

积分

注册会员

Rank: 2

积分
147
发表于 2007-1-4 18:13:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

其实没必要了解具体矩阵是如何实现的,反正我们获得了矩阵的指针,并使用相应函数实现功能就好了吧.呼,既然楼主你一定要4*4矩阵旋转前后比较的话,我说些吧.
恩,从基本的来说,我们实现一个矩阵的平移的话,可以将源矩阵乘以一个1*4的行向量,获得新的矩阵,我下面举例

1:平移
一个4*4的单位矩阵乘以一个P(x,y,z,1)的行向量,则表示此矩阵向x轴移动了x的单位,向Y轴移动了y个单位,向Z轴移动了z个单位,最后获得移动后的目标矩阵是
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ x, y,  z, 1 ]
从中可以看出4*4矩阵N中的N41,N42,N43分别控制其在x轴y轴z轴上的平移单位.

2:绕z轴旋转
同理,我们将一个单位矩阵绕Z轴沿顺时针方向进行旋转A角度.则获得目标矩阵是
[ 1,    0,     0,    0 ]
[ 0, CosA, SinA,  0 ]
[ 0, -SinA, CosA, 0]
[ 0,    0,      0,   1 ]
从中可见N22,N23,N32,N33是控制矩阵围绕X轴旋转角度的

3:饶X轴正向旋转B获得目标矩阵为
[ CosB, 0, -SinB,  0 ]
[ 0,    1,     0,    0 ]
[ SinB, 0, CosB, 0]
[ 0,    0,      0,   1 ]
从中可见N11,N13,N31,N33是控制矩阵围绕X轴旋转角度的

4:绕Y轴旋转C获得目标矩阵为
[ CosC, SinC, 0 , 0]
[ -SinC, CosC, 0 ,  0 ]
[ 0,    0,     1,    0 ]
[ 0,    0,      0,   1 ]
从中可见N11,N12,N21,N22是控制矩阵围绕Y轴旋转角度的

5:缩放
我们将一单位矩阵沿X轴缩放X倍,Y轴缩放Y倍,Z轴缩放Z倍,则获得目标矩阵如下
[ x, 0, 0, 0 ]
[ 0, y, 0, 0 ]
[ 0, 0, z, 0 ]
[ 0, 0, 0, 1]
可见N11,N22,N33控制着缩放.

从这里可以推算出你变换过后的矩阵.
呼,打字真累,也不知道有用没.>_<



7

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2007-1-4 19:06:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

非常感谢谢谢楼上的!不过变换矩阵我都了解了,汗.看到公告板的世界矩阵可以用观察矩阵转置来实现觉的希奇,转置矩阵就是行列互换嘛,没看出什么关联性.所以非常想推导下数学实现过程,但不知道4*4的观察矩阵的数学表示方法是怎样的?!哎,确实是非常强烈的想知道呀!

3

主题

113

帖子

147

积分

注册会员

Rank: 2

积分
147
发表于 2007-1-4 19:25:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

哦.观察矩阵的内容啊,我也不懂,呵呵,不好意思,见笑了T T

7

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
 楼主| 发表于 2007-1-4 19:36:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

呵呵,客气.看来我们都的等人来盖楼了哈.其实当时该把标题设置成"请问观察矩阵用数学怎么表示"就很省事了,HOHO.

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-4 21:45:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

观察矩阵的旋转部分是一个正交矩阵,它的转置矩阵等于它的逆矩阵。

48

主题

142

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2007-1-4 22:24:00 | 显示全部楼层

Re:问下公告板技术中使用转置矩阵的具体细节?

发现5楼的把X轴的当作Z轴的了,把Y轴的当作X轴的了,把Z的当Y的了...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 05:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表