void Render() { if(g_pD3DDevice==NULL) return; //Clear the back buffer to a black color g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); //Begin the scene g_pD3DDevice->BeginScene(); SetupRotation(); SetupCamera(); SetupPerspective(); //Rendering triangles int triCount=0; g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(CUSTOMVERTEX)); g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); triCount+=g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); char msg[256]; sprintf(msg, "每桢渲染的三角形数:%d", triCount); g_pFont->DrawText(msg, 5, 5, D3DCOLOR_XRGB(0, 255, 0)); //End the scene g_pD3DDevice->EndScene(); //Flip g_pD3DDevice->Present(NULL, NULL, NULL, NULL); }
HRESULT GameLoader::InitialiseD3D(HWND hWnd) { m_pD3D = Direct3DCreate9(D3D_SDK_VERSION); if(m_pD3D == NULL) { return E_FAIL; } D3DDISPLAYMODE d3ddm; if( FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm))) { return E_FAIL; } D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = TRUE; d3dpp.BackBufferCount = 1; d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.hDeviceWindow = hWnd; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; if(m_pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D32) == D3D_OK) { d3dpp.AutoDepthStencilFormat = D3DFMT_D32; d3dpp.EnableAutoDepthStencil = TRUE; } else if(m_pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D24X8) == D3D_OK) { d3dpp.AutoDepthStencilFormat = D3DFMT_D24X8; d3dpp.EnableAutoDepthStencil = TRUE; } else if(m_pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3ddm.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16) == D3D_OK) { d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.EnableAutoDepthStencil = TRUE; } else { d3dpp.EnableAutoDepthStencil = FALSE; } if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &m_pD3DDevice))) { return E_FAIL; } m_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); m_pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); SetupPerspective(); SetupFont(); return S_OK; }
void FlyCamera::Update( real64_t dt ) { Cvar *r_zRange = Cvar::Get( "r_zRange" ); real32_t zNear = r_zRange->GetReal32( 0 ); real32_t zFar = r_zRange->GetReal32( 1 ); SetupPerspective( glm::radians( cg_fov->GetReal32() ), Renderer::rdState.window.aspectRatio, zNear, zFar ); HandleKeyboardInput( dt ); HandleMouseInput( dt ); }