核心部分的代码:
VOID SetupMatrices2()
... {
//===================定义世界变换矩阵===================
//世界变换矩阵定义了怎样转换、缩放、以及旋转 3-D 模拟空间中的几何物体。
// 16位空间矩阵
D3DXMATRIXA16 matWorld;
D3DXVECTOR3 vRotation( 1.0f, 1.0f, 1.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.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 1.0f, 1.0f, 1.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 );//告诉设备这里是映射变换矩阵
}
... {
//===================定义世界变换矩阵===================
//世界变换矩阵定义了怎样转换、缩放、以及旋转 3-D 模拟空间中的几何物体。
// 16位空间矩阵
D3DXMATRIXA16 matWorld;
D3DXVECTOR3 vRotation( 1.0f, 1.0f, 1.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.0f, 3.0f,-5.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 1.0f, 1.0f, 1.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,还有我的几篇转贴