游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3852|回复: 3

D3D中摄像机(视点)平移的矩阵如何变换的问题---大哥们,来

[复制链接]

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2005-4-26 16:14:00 | 显示全部楼层 |阅读模式
在网上看了D3D中很多定义的摄像机的类
class cCamera
{
        D3DXVECTOR3 m_vEyePt;       // 眼睛点
        D3DXVECTOR3 m_vLookatPt;        // 看的目标点
        D3DXVECTOR3 m_vUpVec;                // 向上

        D3DXVECTOR3 m_vView;                // 观察方向
        D3DXMATRIX  m_matView;                // 观察矩阵
        D3DXMATRIX  m_matPosition;

        FLOAT       m_fFOV;         // 视野(弧度)
        FLOAT       m_fAspect;                // 纵横比
        FLOAT       m_fNearPlane;        // 最近的点
        FLOAT       m_fFarPlane;        // 最远的点
        D3DXMATRIX  m_matProj;                // 放射矩阵

public:
        void Move(LPDIRECT3DDEVICE8 pd3dDevice, float x=0.f, float y=0.f, float z=0.f);        // 平移
};
其中camera平移是下面这样实现的
//平移
////////////////////////////////////////////////////////////////////////////就是下面的如何变换
void cCamera::Move(LPDIRECT3DDEVICE8 pd3dDevice,float x,float y,float z)
{
        D3DXMATRIX matT;
        D3DXMatrixIdentity(&matT);                         //定义单位矩阵
        D3DXMatrixTanslation(&matT,x,y,z);                  //建立平移矩阵
        D3DXMatrixMultiply(&m_matPosition,&matT,&m_matPosition);
        D3DXMatrixInverse(&m_matView,NULL,&m_matPosition);   //为什么要进行逆矩阵变换
        pd3dDevice->SetTransform(&D3DTS_VIEW,&m_matView);
}

我线性代数学得糟,一时看不懂平移里矩阵是怎么变换的,哪位大哥指点一下.

2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2005-4-26 16:19:00 | 显示全部楼层

Re:D3D中摄像机(视点)平移的矩阵如何变换的问题---大哥们,

一个物体向z方向平移10个单位只要如下,对物体的世界坐标系改变就好了:
D3DXMATRIX matWorld;
D3DXMatrixTranslation(&matWorld,0,0,10);
g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld);

上面那个摄像机(视点)的平移是什么意思啊??????哪位大哥能否用矩阵知识稍微说详细点

2

主题

85

帖子

85

积分

注册会员

Rank: 2

积分
85
发表于 2005-4-26 16:58:00 | 显示全部楼层

Re:D3D中摄像机(视点)平移的矩阵如何变换的问题---大哥们,

假如摄像机位置在(x,y,z),那么世界坐标必须减去(x,y,z)再进行旋转变换。

因为m_matPosition是对坐标加(x,y,z)的变换,那么m_matPosition的逆刚好就是对坐标进行减(x,y,z)的变换。

感觉这个代码有点拐弯抹角,不知道是作者故弄玄虚,还是对矩阵把握不够好,总之不建议作为参考。


2

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2005-4-28 17:01:00 | 显示全部楼层

Re:D3D中摄像机(视点)平移的矩阵如何变换的问题---大哥们,

void cCamera::Move(LPDIRECT3DDEVICE8 pd3dDevice,float x,float y,float z)
{
D3DXMATRIX matT;
D3DXMatrixIdentity(&matT);                         //定义单位矩阵
D3DXMatrixTanslation(&matT,x,y,z);                  //建立平移矩阵
D3DXMatrixMultiply(&m_matPosition,&matT,&m_matPosition);
D3DXMatrixInverse(&m_matView,NULL,&m_matPosition);   //为什么要进行逆矩阵变换
pd3dDevice->SetTransform(&D3DTS_VIEW,&m_matView);
}
它这里是说:  (mat * ma_matPosition)再求其逆矩阵      吧?  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 12:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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