上的程序的的基础上。在基类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; }
版权声明:本文博主原创文章,博客,未经同意不得转载。
时间: 2024-10-09 03:58:15