2024年1月18日发(作者:)

//D3DXMATRIX matWorld,Rx,Ry,Rz; //D3DXMatrixIdentity(&matWorld); //D3DXMatrixRotationX(&Rx,/*::timeGetTime()/1000*/1.0f); //D3DXMatrixRotationY(&Ry,/*::timeGetTime()/1000*//*1.0f*/::timeGetTime()/1000.0f); //D3DXMatrixRotationZ(&Rz,/*::timeGetTime()/1000.0f*//*::timeGetTime()/1000*/1.0f); //matWorld=Rx*Ry*Rz*matWorld; //g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld); //取景变换矩阵 D3DXMATRIX matView; D3DXVECTOR3 vEye(0.0f,0.0f,-10.0f); D3DXVECTOR3 vAt(0.0f,0.0f,0.0f); D3DXVECTOR3 vUp(0.0f,1.0f,0.0f); D3DXMatrixLookAtLH(&matView,&vEye,&vAt,&vUp); g_pd3dDevice->SetTransform(D3DTS_VIEW,&matView); //投影变换矩阵 D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4.0f,1.0f,1.0f,1000.0f); g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj); pD3D->Release(); return S_OK;}//渲染图形VOID Render(){ g_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME); g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(150,150,255),1.0f,0); //清除后台缓冲区 g_pd3dDevice->BeginScene(); //开始绘制

::ZeroMemory(g_pKeyStateBuffer,sizeof(g_pKeyStateBuffer)); ReadDevice(g_pKeyboardDevice,g_pKeyStateBuffer,sizeof(g_pKeyStateBuffer)); 平移物体 static FLOAT fPosX=0.0f,fPosY=0.0f; if(g_pKeyStateBuffer[DIK_A]&0x80) fPosX-=0.01f; if(g_pKeyStateBuffer[DIK_D]&0x80) fPosX+=0.01f; if(g_pKeyStateBuffer[DIK_W]&0x80) fPosY+=0.01f; if(g_pKeyStateBuffer[DIK_S]&0x80) fPosY-=0.01f; D3DXMATRIX matWorld; D3DXMatrixTranslation(&matWorld,fPosX,fPosY,0.0f); //旋转物体 static float fAngleX=0.0f,fAngleY=0.0f,fAngleZ=0.0f; if(g_pKeyStateBuffer[DIK_UP]&0x80) fAngleX-=0.01f; if(g_pKeyStateBuffer[DIK_DOWN]&0x80) fAngleX+=0.01f; if(g_pKeyStateBuffer[DIK_LEFT]&0x80) fAngleY+=0.01f; if(g_pKeyStateBuffer[DIK_RIGHT]&0x80) fAngleY-=0.01f;

D3DXMATRIX Rx,Ry; D3DXMatrixRotationX(&Rx,fAngleX); D3DXMatrixRotationY(&Ry,fAngleY); matWorld=Rx*Ry*matWorld; g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld); //绘制茶壶 g_pMeshTeapot->DrawSubset(0); g_pd3dDevice->EndScene(); //结束绘制 g_pd3dDevice->Present(NULL,NULL,NULL,NULL); //从后台缓冲区复制到前台----翻转}//清除对象,内存VOID Cleanup(){

g_pKeyboardDevice->Unacquire(); ReleaseD3D(g_pMeshTeapot); ReleaseD3D(g_pKeyboardDevice); ReleaseD3D(g_pDirectInput); ReleaseD3D(g_pd3dDevice);

//if (g_pMeshTeapot!=NULL) //{ // g_pMeshTeapot->Release(); // g_pMeshTeapot=NULL; //} //if (g_pKeyboardDevice!=NULL) //{ // g_pKeyboardDevice->Release(); // g_pKeyboardDevice=NULL; //} //if (g_pDirectInput!=NULL) //{ // g_pDirectInput->Release(); // g_pDirectInput=NULL; //} //if (g_pd3dDevice!=NULL) //{ // g_pd3dDevice->Release(); // g_pd3dDevice=NULL; //}}BOOL ReadDevice(IDirectInputDevice8 *pDIDevice,void *pBuffer,long ISize){ HRESULT hr; while(true) { /*pDIDevice->Poll();*/ pDIDevice->Acquire(); if (SUCCEEDED(hr=pDIDevice->GetDeviceState(ISize,pBuffer))) break; if (hr!=DIERR_INPUTLOST||hr!=DIERR_NOTACQUIRED) return FALSE; /*if (FAILED(pDIDevice->Acquire())) return FALSE */; } return TRUE;}