游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3588|回复: 9

关于D3DXMatrixLookAtLH 的疑问

[复制链接]

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-11-2 15:36:00 | 显示全部楼层 |阅读模式
D3DXMATRIX *D3DXMatrixLookAtLH(          D3DXMATRIX *pOut,
    CONST D3DXVECTOR3 *pEye,
    CONST D3DXVECTOR3 *pAt,
    CONST D3DXVECTOR3 *pUp
);

This function uses the following formula to compute the returned matrix.


zaxis = normal(At - Eye)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)

xaxis.x           yaxis.x           zaxis.x          0
xaxis.y           yaxis.y           zaxis.y          0
xaxis.z           yaxis.z           zaxis.z          0
-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)  1

最后行中-dot(xaxis, eye)  -dot(yaxis, eye)  -dot(zaxis, eye)为什么要点乘?
xaxis yaxis zaxis 为什么要按列的形式保存呢?而在世界变换的时候3个向量都是按行的形式保存的

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2009-11-2 15:50:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

。。。刚刚想通了,这是三个向量上的投影
但是第二个问题谁能够解释下???? [em24]

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-11-2 19:58:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

那个摄影变换矩阵是由 x`=(P-Eye).xaxis  y`=(P-Eye).yaxis  z`=(P-Eye).zaxis 得到的 P在摄影坐标系中坐标为P(x`,y`,z`)。
                        xaxis.x           yaxis.x           zaxis.x          0
(x`,y`,z`,1)=(x,y,z,1)( xaxis.y           yaxis.y           zaxis.y          0)
                        xaxis.z           yaxis.z           zaxis.z          0
                        -dot(xaxis.Eye)  -dot(yaxis.Eye)  -dot(zaxis.Eye)    1   
而那个平移变换矩阵是由 P`=P-Q`得到的。
                        1    0    0    0
(x`,y`,z`,1)=(x,y,z,1)( 0    1    0    0)
                        0    0    1    0
                       -qx  -qy  -qz   1
变换矩阵的形式是由所需的运算决定的,没什么固定格式,我是这么理解的。

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-11-2 20:51:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

目的是要构造Mv矩阵的旋转部分。

而已知摄像机坐标系下有:

Right * Mv = [1, 0, 0]
Up * Mv = [0, 1, 0]
Look * Mv = [0, 0, 1]

合并起来可表示如下

Rx,Ry,Rz          1, 0, 0
[Ux,Uy,Uz] * Mv = [0, 1, 0]  -> I
Lx,Ly,Lz          0, 0, 1

又知,当Mb是Ma的逆矩阵,Ma * Mb = I 成立。
而Mv矩阵是正交矩阵,则它的转置矩阵即是逆矩阵。

                  Rx,Ux,Lx
所以可以求得Mv = [Ry,Uy,Ly]
                  Rz,Uz,Lz     

所以是这样的一个形式。

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2009-11-2 22:28:00 | 显示全部楼层

Re: Re:关于D3DXMatrixLookAtLH 的疑问

run2009: Re:关于D3DXMatrixLookAtLH 的疑问

那个摄影变换矩阵是由 x`=(P-Eye).xaxis  y`=(P-Eye).yaxis  z`=(P-Eye).zaxis 得到的 P在摄影坐标系中坐标...

                        xaxis.x           yaxis.x           zaxis.x   
(x`,y`,z`)=(x,y,z)     ( xaxis.y           yaxis.y           zaxis.y   )
                        xaxis.z           yaxis.z           zaxis.z   
这样乘的结果:是将(x,y,z) 变换到上面矩阵中的3个列向量为基的坐标系中,与变换到xaxis   yaxis  zaxis  为基向量不同了
是不是我理解错了?
---------------------------
这个是我搞错了,上面的式子的结果就是将(x,y,z)变换到xaxis   yaxis  zaxis  为基向量的坐标系中。

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2009-11-2 22:50:00 | 显示全部楼层

Re: Re:关于D3DXMatrixLookAtLH 的疑问

Enigmaya: Re:关于D3DXMatrixLookAtLH 的疑问

目的是要构造Mv矩阵的旋转部分。

而已知摄像机坐标系下有:

Right * Mv = [1, 0, 0]
Up * Mv = [0, ...

如果对于世界坐标系中的任意点p,要将p变换到Right,Up,Look为基向量的坐标系中,直接
      Right
p'=p*[Up   ]
      Look
我还是不太明白Right,Up,Look要以列向量形式存放的意义

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2009-11-2 23:06:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

谁能够提供些详细点并且容易读懂的关于坐标变换相关的资料?

很多说的不是很详细 要么就是不容易懂

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-11-3 19:44:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

你理解错了。视图变换是要把相机平移变换到世界坐标系下坐标系的原点,然后朝向Z轴的正方向。
所以这里需要一个view的逆变换,一转置当然就看起来像列形式了。这也是为什么点乘那里有个负号的原因。

资料的话,这本书不错。《3D数学基础:图形与游戏开发》

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2009-11-4 10:35:00 | 显示全部楼层

Re: Re:关于D3DXMatrixLookAtLH 的疑问

Enigmaya: Re:关于D3DXMatrixLookAtLH 的疑问

你理解错了。视图变换是要把相机平移变换到世界坐标系下坐标系的原点,然后朝向Z轴的正方向。
所以这里需要...

看完大侠的解释后,确实明朗了!

这本书前两天刚刚浏览完,确实受益非浅,数学基础部分讲得非常好。只是书上对坐标系变换和对物体变换把我搞得更糊涂了。大概意思就是对坐标系变换相当于以一个相反的量变换物体。
这个直观上讲,也是想象得通的。可是真正对应到数学上,我就迷糊了。
能不能再帮我理理思路,到底各自是如果实现的?真的感激不尽!

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-11-4 20:43:00 | 显示全部楼层

Re:关于D3DXMatrixLookAtLH 的疑问

对应到数学上?一个是另一个的逆变化,就这样理解阿。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-18 15:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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