游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: li574000

关于相机的局阵问题

[复制链接]

6

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2007-7-25 19:21:00 | 显示全部楼层

Re:关于相机的局阵问题

好像是一场富有哲理的讨论.
楼主虚心求教的态度令人钦佩.

我是菜鸟,我还没有搞懂哈.

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-7-25 22:36:00 | 显示全部楼层

Re:关于相机的局阵问题

虽然dx提供了视图矩阵的计算函数,自己推导一遍能很有益处,下面是我的推导过程:
从世界矩阵变换为view矩阵,首先需要先平移再旋转(平移再旋转以后相机在自身视图坐标系就是是原点)所以如果相机在px, py, pz 的位置,则平移矩阵为:
1,   0,  0, 0
0,   1,  0, 0
0,   0,  1, 0
-px,-py,-pz,1

相机的三个方向right, up, look在view其次坐标系分别对应x,y,z如果分别与view矩阵乘将是:
(right.x, right.y , right.z) * matview3x3 = (1,0,0)
(up.x , up.y  , up.z ) * matview3x3 = (0,1,0)
(look.x , look.y , look.z   ) * matview3x3 = (0,0,1)

那么
right.x, right.y , right.z              
look.x , look.y  , look.z   * matview3x3 = f3x3单位矩阵
up.x   , up.y    , up.z                  
这两个矩阵是互逆的,又由于right, up, look是直交的,所以
matview3x3是前面矩阵的转置矩阵:即

matview3x3=
right.x,  up.x, look.x
right.y,  up.y, look.y
right.z   up.z,  look.z

转换为4x4矩阵为:
right.x,  up.x, look.x, 0
right.y,  up.y, look.y, 0
right.z   up.z,  look.z, 0
0      , 0     , 0   , 1

加入之前的平移可以得到最终的视图矩阵为:

1,   0,  0, 0     right.x,  up.x, look.x, 0
0,   1,  0, 0 乘  right.y,  up.y, look.y, 0
0,   0,  1, 0     right.z   up.z, look.z, 0
-px,-py,-pz,1     0      , 0     , 0   ,  1

得到的最终结果为:
matview4x4=
right.x,      up.x,       look.x,    0
right.y,      up.y,       look.y,    0
right.z       up.z,       look.z,    0
-right·px   -up·py      -look·pz, 1






0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-7-26 10:21:00 | 显示全部楼层

Re:关于相机的局阵问题

那么我们干吗不能先按照模型变换来变换相机,最后求模型变换局阵的逆局阵,不就是视图局阵了吗,不知道我这种理解到底哪里错了
-------------------------------------------------
你这样理解是对的,楼上给出的解释已经很清楚了

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-7-26 17:00:00 | 显示全部楼层

Re:关于相机的局阵问题

谢谢各位了,谢谢楼上的证明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 17:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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