在上一个程序的基础上。在基类D3DBase添加一个摄像机函数
//摄像机 void D3DBase::setCamera() { //按键事件 //如果A,S,D,W,Q,E,Z,X,C键按下,移动摄像机 if(GetAsyncKeyState('W') & 0x8000) //前 vZ+=0.001f; if(GetAsyncKeyState('S') & 0x8000) //后 vZ-=0.001f; if(GetAsyncKeyState('A') & 0x8000) //左 vX-=0.001f; if(GetAsyncKeyState('D') & 0x8000) //右 vX+=0.001f; if(GetAsyncKeyState('Q') & 0x8000) //上 vY+=0.001f; if(GetAsyncKeyState('E') & 0x8000) //下 vY-=0.001f; //旋转 if(GetAsyncKeyState('Z') & 0x8000) //x轴 rX+=0.001f; if(GetAsyncKeyState('X') & 0x8000) //y轴 rY+=0.001f; if(GetAsyncKeyState('C') & 0x8000) //z轴 rZ+=0.001f; // 世界矩阵 g_World = XMMatrixIdentity(); // 观察矩阵 XMVECTOR Eye = XMVectorSet( 0.0f+vX, 1.0f+vY, -5.0f+vZ, 0.0f ); XMVECTOR At = XMVectorSet( 0.0f+vX, 1.0f+vY, 0.0f, 0.0f ); XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f ); g_View = XMMatrixLookAtLH( Eye, At, Up ); g_View*=XMMatrixRotationX(rX)*XMMatrixRotationY(rY)*XMMatrixRotationZ(rZ); // 投影矩阵 g_Projection = XMMatrixPerspectiveFovLH( XM_PIDIV2, width / (FLOAT)height, 0.01f, 100.0f ); }以下写在类声明里面public:
D3DBase():vX(0),vY(0),vZ(0),rX(0),rY(0),rZ(0){};//初始化 float vX,vY,vZ;// 观察矩阵 Eye的坐标 float rX,rY,rZ;// 旋转的角度
//渲染 void D3DProgam::Render() { setCamera();//这里 // Update our time static float t = 0.0f; if( g_driverType == D3D_DRIVER_TYPE_REFERENCE ) { t += ( float )XM_PI * 0.0125f; }