資源簡介
1、創建Win32工程,實現基本的程序框架。渲染邏輯、清除資源各占5分
2、讀取高度圖3、將高度圖數據加載到緩沖區
4、在網格中使用高度圖
5.正確渲染地形網格對象
6、計算網格法線7、設置材質
8、設置點光源。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#pragma?comment?(lib“winmm.lib“)
#pragma?comment?(lib“d3d9.lib“)
#pragma?comment?(lib“d3dx9.lib“)
LPDIRECT3D9 g_pD3D;
LPDIRECT3DDEVICE9 g_pD3DDevice;
#include?“Terrain.h“
CTerrain?*g_pTerrain;
#define?SAFE_DELETE(p)???????{?if(p)?{?delete?(p);?????(p)=NULL;?}?}
#define?SAFE_DELETE_ARRAY(p)?{?if(p)?{?delete[]?(p);???(p)=NULL;?}?}
#define?SAFE_RELEASE(p)??????{?if(p)?{?(p)->Release();?(p)=NULL;?}?}
LRESULT?CleanUp()
{
SAFE_DELETE(g_pTerrain);
SAFE_RELEASE(g_pD3DDevice);
SAFE_RELEASE(g_pD3D);
return?S_OK;
}
LRESULT?SetLight(int?nD3DVECTOR?*vDir)
{
return?D3D_OK;
}
LRESULT?Update()
{
float?fTimeNow=timeGetTime()/1000.0f;
D3DXMATRIX?matViewmatWorldmatRotXmatRotYmatRotZmatProj;
D3DXMatrixRotationX(&matRotXD3DX_PI*0.5f*fTimeNow);
D3DXMatrixRotationY(&matRotYD3DX_PI*0.5f*fTimeNow);
D3DXMatrixRotationZ(&matRotZD3DX_PI*0.5f*fTimeNow);
D3DXMatrixMultiply(&matWorld&matRotX&matRotY);
D3DXMatrixMultiply(&matWorld&matWorld&matRotY);
D3DXMatrixLookAtLH(&matView&D3DXVECTOR3(300*sinf(fTimeNow*D3DX_PI*0.1f)
200300*cosf(fTimeNow*D3DX_PI*0.1f))
&D3DXVECTOR3(0500)
&D3DXVECTOR3(010));
D3DXMatrixPerspectiveFovLH(&matProjD3DX_PI/41.333f1.0f5000);
g_pD3DDevice->SetTransform(D3DTS_VIEW&matView);
g_pD3DDevice->SetTransform(D3DTS_PROJECTION&matProj);
D3DVECTOR?vDir={cosf(fTimeNow)-0.2fsinf(fTimeNow)};
SetLight(0&vDir);
return?D3D_OK;
}
LRESULT?Render()
{ //頂點數據
g_pD3DDevice->Clear(00D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER0x001.0f0); //清除背景
g_pD3DDevice->BeginScene(); //開始繪制
//繪制原始單元
Update();?
g_pTerrain->Render();??
g_pD3DDevice->EndScene(); //結束繪制
g_pD3DDevice->Present(0000); //翻屏
return?D3D_OK;
}
//初始化函數,創建Direct3D和設備對象
LRESULT?InitD3D(HWND?hwnd)
{
g_pD3D= Direct3DCreate9(D3D_SDK_VERSION); //創建Direct3D9對象
D3DPRESENT_PARAMETERS?d3dpp; //設備翻屏參數
memset(&d3dpp0sizeof(d3dpp)); //初始化
d3dpp.BackBufferCount=1; //后備緩沖區數量
d3dpp.SwapEffect=?D3DSWAPEFFECT_DISCARD; //交換模式
d3dpp.hDeviceWindow=hwnd;
d3dpp.Windowed=TRUE; //使用窗口模式
d3dpp.EnableAutoDepthStencil=TRUE;
d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
HRESULT?ret=
g_pD3D->CreateDevice(D3DADAPTER_DEFAULT //創建默認物理設備相關的Direct3DDevice對象
D3DDEVTYPE_HAL //使用硬件抽象層
hwnd //顯示窗口
D3DCREATE_SOFTWARE_VERTEXPROCESSING //軟件處理頂點
&d3dpp //設備相關參數的描述
&g_pD3DDevice); //要保存對象地址的指針的地址
if(ret!=D3D_OK)
{ MessageBox(hwnd“創建創建Direct3DDeviece對象失敗!““創建Direct3DDeviece!“
MB_OK|MB_IConerror);
}
//采樣方式
g_pD3DDevice->SetSamplerState(0?D3DSAMP_MAGFILTER??D3DTEXF_ANISOTROPIC);
g_pD3DDevice->SetSamplerState(0?D3DSAMP_MINFILTER??D3DTEXF_ANISOTROPIC);
g_pD3DDevice->SetSamplerState(0?D3DSAMP_MIPFILTER??D3DTEXF_LINEAR);
g_pD3DDevice->SetRenderState(D3DRS_LIGHTINGTRUE);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????20941??2004-03-28?22:48??8.Normal\bin\grass.jpg
?????文件??????47734??2005-09-07?09:47??8.Normal\bin\Terrain_256.bmp
?????文件????????905??2008-04-30?10:12??8.Normal\src\D3DStart.sln
????..A..H.??????9216??2008-04-30?12:29??8.Normal\src\D3DStart.suo
?????文件???????5133??2008-04-30?11:19??8.Normal\src\D3DStart.vcproj
?????文件???????2579??2008-04-30?11:22??8.Normal\src\Debug\BuildLog.htm
?????文件???????5351??2008-04-30?11:50??8.Normal\src\Main.cpp
?????文件???????2658??2008-04-30?12:29??8.Normal\src\Terrain.cpp
?????文件???????1031??2008-04-30?11:21??8.Normal\src\Terrain.h
?????目錄??????????0??2008-05-04?14:19??8.Normal\src\Debug
?????目錄??????????0??2008-05-04?14:19??8.Normal\bin
?????目錄??????????0??2008-05-04?14:19??8.Normal\src
?????目錄??????????0??2008-05-04?14:19??8.Normal
-----------?---------??----------?-----??----
????????????????95548????????????????????13
評論
共有 條評論