游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5239|回复: 6

请教视角矩阵和投影矩阵相乘是什么意思

[复制链接]

14

主题

43

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2008-8-5 10:03:00 | 显示全部楼层 |阅读模式
如题。

我再看frustum的代码时看到的,脑袋转不过来,不知道为什么要这么做?
这样做代表了什么?

还有视角矩阵和世界矩阵相乘又意味着什么??

初学d3d,请教,谢谢。

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2008-8-5 10:29:00 | 显示全部楼层

Re:请教视角矩阵和投影矩阵相乘是什么意思

mat = 视角矩阵 * 投影矩阵
世界中的一个点 * mat 就得到这个点绘制到屏幕上的坐标了

点 * 世界矩阵 得到点在世界中的位置

14

主题

43

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2008-8-5 10:30:00 | 显示全部楼层

Re:请教视角矩阵和投影矩阵相乘是什么意思

还有第二个问题:
能否解释下视角矩阵、投影矩阵、世界矩阵各行或各列代表什么?比如
   行 1   2   3   4

1    11   12  13  14
2    21   22  23  24
3    31   32  33  34
4    41   42  43  44

这是个视角矩阵,我知道41,42,43是代表摄像头的位置,那其他代表什么呢?
初学d3d,找了好多资料都没讲这个的,请教,谢谢。

14

主题

43

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2008-8-5 10:45:00 | 显示全部楼层

Re:请教视角矩阵和投影矩阵相乘是什么意思

感谢FeiYu前辈。
“点 * 世界矩阵 得到点在世界中的位置”中的第一个“点”是指屏幕坐标?
能否多讲点,嘿嘿?谢谢。

2

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-8-5 12:44:00 | 显示全部楼层

Re: Re:请教视角矩阵和投影矩阵相乘是什么意思

sunjiahaoz: Re:请教视角矩阵和投影矩阵相乘是什么意思

还有第二个问题:
能否解释下视角矩阵、投影矩阵、世界矩阵各行或各列代表什么?比如
   行 1   2   3   ...


也不是那个意思,矩阵描述了"变换".
D3D中用的是P * M 这样的形式,得到的是变换后的P'
可以把 M 中的4个列看作是对应于x,y,z 的变换向量.
...
感觉有点说不清楚,
线性代数+<<Introduction to 3D Game Programming with DirectX 9>>
会帮助你

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-8-5 13:51:00 | 显示全部楼层

Re:请教视角矩阵和投影矩阵相乘是什么意思

空间中的点 * 视角矩阵 * 投影矩阵之后就将3d坐标转换到屏幕2d坐标.
转换出来的坐标实际上是在 (-1,-1)-(1,1)的范围,(0,0)点才是屏幕中心

那个矩阵里面的各个量是什么意思就要从构成矩阵的算法来看了.

D3DXMatrixLookAtLH 这个函数的算法如下:

D3DXMATRIX* D3DXMatrixLookAtLH( D3DXMATRIX* pout, D3DXVECTOR3* pEye, D3DXVECTOR3* pAt, D3DXVECTOR3* pUp )
{
        D3DXVECTOR3 vZ = *pAt - *pEye;
        D3DXVec3Normalize( &vZ, &vZ );

        D3DXVECTOR3 vX, vY;
        D3DXVec3Cross( &vX, pUp, &vZ );
        D3DXVec3Normalize( &vX, &vX );

        D3DXVec3Cross( &vY, &vZ, &vX );

        pout->_11 = vX.x;    pout->_12 = vY.x;    pout->_13 = vZ.x;    pout->_14 = 0;
        pout->_21 = vX.y;    pout->_22 = vY.y;    pout->_23 = vZ.y;    pout->_24 = 0;
        pout->_31 = vX.z;    pout->_32 = vY.z;    pout->_33 = vZ.z;    pout->_34 = 0;
        pout->_41 = vEye->x; pout->_42 = vEye->y; pout->_43 = vEye->z; pout->_44 = 1;

        return pout;
}

还有 D3DXMatrixPerspectiveFovLH 的算法:

D3DXMATRIX * D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pout, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf )
{
        float h = 1.f / tanf( fovy * 0.5f );
        float w = h / aspect;
        float t = zf / (zf - zn);
        pout->_11 = w; pout->_12 = 0; pout->_13 = 0;       pout->_14 = 0;
        pout->_21 = 0; pout->_22 = h; pout->_23 = 0;       pout->_24 = 0;
        pout->_31 = 0; pout->_32 = 0; pout->_33 = t;       pout->_34 = 1;
        pout->_41 = 0; pout->_42 = 0; pout->_43 = -zn * t; pout->_44 = 0;
        return pout;
}

View矩阵其实就把原来场景中的坐标平移并旋转到以眼睛的坐标开始的空间中,
Projection矩阵就是把坐标投影到2d空间中

14

主题

43

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2008-8-5 14:11:00 | 显示全部楼层

Re:请教视角矩阵和投影矩阵相乘是什么意思

谢谢free_share和Fenger前辈。

希望得到更多经验。

我很早就像学3D做游戏了,之前都是在看些理论上的东西,比如线性代数、解析几何、计算机图形学等等,但当真要用DirectX编东西的时候,感觉看的那些理论都难以运用,一方面是隔段时间都忘了,一方面是不知道怎么运用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 19:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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