资源简介
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
评论
共有 条评论