DirectX9 示例:绘制茶壶

来源:互联网 发布:黑马程序员web前端视频 编辑:程序博客网 时间:2024/05/17 02:46
//////////////////////////////////////////////////////////////////////////////////////////////////// // File: teapot.cpp// // Author: Frank Luna (C) All Rights Reserved//// System: AMD Athlon 1800+ XP, 512 DDR, Geforce 3, Windows XP, MSVC++ 7.0 //// Desc: Renders a teapot in wireframe mode.  Shows how to create a teapot //       using the D3DXCreateTeapot function and how to render the teapot//       using the ID3DXMesh::DrawSubset method.//          //////////////////////////////////////////////////////////////////////////////////////////////////#include "d3dUtility.h"//// Globals//IDirect3DDevice9* Device = 0; const int Width  = 640;const int Height = 480;// Mesh interface that will store the teapot data and contains// ma method to render the teapot data.ID3DXMesh* Teapot = 0;//// Framework Functions//bool Setup(){//// Create the teapot geometry.//D3DXCreateTeapot(Device, &Teapot, 0);//// Position and aim the camera.//D3DXVECTOR3 position(0.0f, 0.0f, -3.0f);D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);    D3DXMATRIX V;D3DXMatrixLookAtLH(&V, &position, &target, &up);Device->SetTransform(D3DTS_VIEW, &V);//// Set projection matrix.//D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj,D3DX_PI * 0.5f, // 90 - degree(float)Width / (float)Height,1.0f,1000.0f);Device->SetTransform(D3DTS_PROJECTION, &proj);//// Switch to wireframe mode.//Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);return true;}void Cleanup(){d3d::Release<ID3DXMesh*>(Teapot);}bool Display(float timeDelta){if( Device ){//// Spin the teapot://D3DXMATRIX Ry;static float y = 0.0f;D3DXMatrixRotationY(&Ry, y);y += timeDelta;if(y >= 6.28f)y = 0.0f;Device->SetTransform(D3DTS_WORLD, &Ry);//// Draw the Scene://Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);Device->BeginScene();// Draw teapot using DrawSubset method with 0 as the argument.Teapot->DrawSubset(0);Device->EndScene();Device->Present(0, 0, 0, 0);}return true;}//// WndProc//LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){switch( msg ){case WM_DESTROY:::PostQuitMessage(0);break;case WM_KEYDOWN:if( wParam == VK_ESCAPE )::DestroyWindow(hwnd);break;}return ::DefWindowProc(hwnd, msg, wParam, lParam);}//// WinMain//int WINAPI WinMain(HINSTANCE hinstance,   HINSTANCE prevInstance,    PSTR cmdLine,   int showCmd){if(!d3d::InitD3D(hinstance,Width, Height, true, D3DDEVTYPE_HAL, &Device)){::MessageBox(0, "InitD3D() - FAILED", 0, 0);return 0;}if(!Setup()){::MessageBox(0, "Setup() - FAILED", 0, 0);return 0;}d3d::EnterMsgLoop( Display );Cleanup();Device->Release();return 0;}

0 0
原创粉丝点击