Direct3D9 教程03

核心部分的代码:

VOID SetupMatrices2()
{
    
//===================定义世界变换矩阵===================
    
//世界变换矩阵定义了怎样转换、缩放、以及旋转 3-D 模拟空间中的几何物体。
    
// 16位空间矩阵
    D3DXMATRIXA16 matWorld;
    D3DXVECTOR3 vRotation( 
1.0f1.0f1.0f );
    
//设置每1000毫秒完成一次旋转
    UINT  iTime  = timeGetTime() % 1000;
    FLOAT fAngle 
= iTime * (2.0f * D3DX_PI) / 1000.0f;
    
//D3DXMatrixRotationY( &matWorld, fAngle );//绕Y抽旋转
    D3DXMatrixRotationAxis(&matWorld,&vRotation ,fAngle);//按自定义的轴旋转
    g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );//告诉设备这里是世界变换矩阵


    D3DXVECTOR3 vEyePt( 
0.0f3.0f,-5.0f );
    D3DXVECTOR3 vLookatPt( 
0.0f0.0f0.0f );
    D3DXVECTOR3 vUpVec( 
1.0f1.0f1.0f );
    D3DXMATRIXA16 matView;
    
//===================定义观察变换矩阵===================
    
//观察变换矩阵定义了观察的位置和旋转角度。此观察矩阵就相当于场景的摄影机。
    D3DXMatrixLookAtLH( &matView,
                        
&vEyePt,                //pEye眼睛的位置,观察的方向。
                        &vLookatPt,                //是摄影机的前进和后退,向左或向右。向上或向下
                        &vUpVec                    //是向上的方向
                        );
    g_pd3dDevice
->SetTransform( D3DTS_VIEW, &matView );//告诉设备这里是观察变换矩阵

    
//===================定义映射变换矩阵===================
    
//映射变换矩阵定义了将 3-D 观察空间转换为 2-D 视口空间的几何学方法。
    D3DXMATRIXA16 matProj;
    D3DXMatrixPerspectiveFovLH( 
&matProj,                //返回的矩阵
                                D3DX_PI/4,                //物体如何随着距离而缩小
                                1.0f,                    //屏幕纵横比
                                1.0f,                    //最近剪切平面
                                100.0f                    //最远剪切平面
                                );
    g_pd3dDevice
->SetTransform( D3DTS_PROJECTION, &matProj );//告诉设备这里是映射变换矩阵
}

 主要还是一个流程的问题~函数的调用部分~不难~不过还是要多多理解:

·第一步:定义世界变换矩阵
·第二步:定义观察变换矩阵
·第三步:定义映射变换矩阵
其他部分请参见Direct3D9 教程01~02,还有我的几篇转贴

你可能感兴趣的:(Direct3D9 教程03)