3D游戏从入门到精通-8

时间:2022-04-05 22:45:12
 
 
1、             视图变换矩阵
视图变换矩阵是做什么用的呢?为什么需要视图变换矩阵呢?其实这个问题很好回答和理解的。在3D世界里,所有东西都是跟现实中的实物一样的,当用人的眼睛去观看现实中的实物时,总是从某一方向去观察的,这样就看到实物组成的图像。就像你拿着照相去照相是一样的,首先要调好焦距,对准物体。在D3D里也需要调好焦距,对准物体,否则什么也看不到。因此在D3D里,就需要设置好视图变换矩阵。也就是相机的位置和焦距。在视图变换矩阵里,是使用两个点来表达相机位置和焦距,如下图所示:
在D3D里使用向量来表示相机位置,如下:
D3DXVECTOR3 vFromPt   = D3DXVECTOR3( 0.0f, 0.0f, -5.0f );
这里指明了相机所在位置是Z轴上-5的位置。
 
接着又需要指明焦点所有位置,如下:
D3DXVECTOR3 vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
这里指明了相机焦点所在位置是在世界坐标系的原点。
 
但还有一个因素没有考虑进去,那就是相机放置的方向。比如人站在地球上,头顶着天去观察实物是一种方向,是一种正常的方向,侧着头去看实物又是一种方向,人倒立着看实物又是一个方向。“横看成岭侧成峰,远近高低各不同。”就表达了这种不同方向看东西的不同,因此在D3D里也需要设置方向,用如下向量表示:
 
//设置向上方向为Y轴正方向.
D3DXVECTOR3 vUp(0,1,0);
 
有了这三个向量,就决定了相机需要经过的变换矩阵,也就是看到D3D里的物体是什么样子了。在D3D里,就是构造一个视图变换矩阵,它是使用下面函数来计算的:
D3DXMatrixLookAtLH( &m_mView, &m_vEyePosition, &m_vLookAtPosition, &vUp );
第一个参数,就是返回来的视图变换矩阵,第二个参数是相机位置,第三个参数是焦点位置,第四个参数是相机朝向。
 
构造好视图变换矩阵后,就可以把它设置D3D里,通过下面的函数来实现:
 
//设置视变换矩阵。
 const D3DXMATRIX& mView = CCameraFirstPerson::Instance()->GetViewMatrix();
 m_pd3dDevice->SetTransform( D3DTS_VIEW, &mView);
 
这样就把D3D的设备视图变换矩阵设置好了。
 
 
 
电子书 MM3D 引擎源程序 例子源程序 49 元一套
联系人:蔡军生  
联系方式:
QQ: 9073204
EMAIL: caimouse1976 at sina.com