#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <mmsystem.h>
#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 n,D3DVECTOR *vDir)
{
return D3D_OK;
}
LRESULT Update()
{
float fTimeNow=timeGetTime()/1000.0f;
D3DXMATRIX matView,matWorld,matRotX,matRotY,matRotZ,matProj;
D3DXMatrixRotationX(&matRotX,D3DX_PI*0.5f*fTimeNow);
D3DXMatrixRotationY(&matRotY,D3DX_PI*0.5f*fTimeNow);
D3DXMatrixRotationZ(&matRotZ,D3DX_PI*0.5f*fTimeNow);
D3DXMatrixMultiply(&matWorld,&matRotX,&matRotY);
D3DXMatrixMultiply(&matWorld,&matWorld,&matRotY);
D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(300*sinf(fTimeNow*D3DX_PI*0.1f),
200,300*cosf(fTimeNow*D3DX_PI*0.1f)),
&D3DXVECTOR3(0,50,0),
&D3DXVECTOR3(0,1,0));
D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4,1.333f,1.0f,5000);
g_pD3DDevice->SetTransform(D3DTS_VIEW,&matView);
g_pD3DDevice->SetTransform(D3DTS_PROJECTION,&matProj);
D3DVECTOR vDir={cosf(fTimeNow),-0.2f,sinf(fTimeNow)};
SetLight(0,&vDir);
return D3D_OK;
}
LRESULT Render()
{ //顶点数据
g_pD3DDevice->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,0x00,1.0f,0); //清除背景
g_pD3DDevice->BeginScene(); //开始绘制
//绘制原始单元
Update();
g_pTerrain->Render();
g_pD3DDevice->EndScene(); //结束绘制
g_pD3DDevice->Present(0,0,0,0); //翻屏
return D3D_OK;
}
//初始化函数,创建Direct3D和设备对象
LRESULT InitD3D(HWND hwnd)
{
g_pD3D= Direct3DCreate9(D3D_SDK_VERSION); //创建Direct3D9对象
D3DPRESENT_PARAMETERS d3dpp; //设备翻屏参数
memset(&d3dpp,0,sizeof(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_LIGHTING,TRUE);
g_pTerrain=new CTerrain(g_pD3DDevice,"Terrain_256.bmp","grass.jpg",5.0f);
return D3D_OK;
}
//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
return 0;
case 'W':
g_pD3DDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
return 0;
case 'S':
g_pD3DDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);
return 0;
}
break;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
// Register the window class
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL };
RegisterClassEx( &wc );
// Create the application's window
HWND hWnd = CreateWindow( "D3D Tutorial", "D3D DEMOS",
WS_OVERLAPPED|WS_SYSMENU|WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
// Initialize Direct3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// Show the window
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
// Enter the message loop
MSG msg;
memset(&msg,0,sizeof(msg));
while(msg.message!=WM_QUIT)
{
if( PeekMessage( &msg, NULL, 0, 0,PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
Sleep(1);
Render();
}
}
}
CleanUp();
UnregisterClass(wc.lpszClassName, wc.hInstance );
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
实现读取高度图,设置点光源设置材质
共9个文件
cpp:2个
sln:1个
vcproj:1个
需积分: 38 22 下载量 90 浏览量
2009-10-18
14:00:02
上传
评论
收藏 46KB RAR 举报
温馨提示
1、创建Win32工程,实现基本的程序框架。渲染逻辑、清除资源各占5分 2、读取高度图3、将高度图数据加载到缓冲区 4、在网格中使用高度图 5.正确渲染地形网格对象 6、计算网格法线7、设置材质 8、设置点光源。
资源推荐
资源详情
资源评论
收起资源包目录
.rar (9个子文件)
8.Normal
bin
grass.jpg 20KB
Terrain_256.bmp 47KB
src
Main.cpp 5KB
Terrain.h 1KB
Debug
BuildLog.htm 3KB
D3DStart.suo 9KB
Terrain.cpp 3KB
D3DStart.sln 905B
D3DStart.vcproj 5KB
共 9 条
- 1
资源评论
ddd5873
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 什么是移动应用开发-关于移动应用开发的相关介绍
- 第二组汇报 PPT.pptx
- 什么是大数据开发-相关介绍-关于大数据开发的相关介绍
- 什么是软件测试-相关介绍-关于软件测试的相关介绍
- 前端开发-什么是前端开发-关于前端开发的一些相关介绍
- Sora AI-关于文生视频的使用场景说明
- suno AI文生视频的相关教程和介绍使用
- 什么是后端开发-关于后端开发的一些小介绍分享
- Jurassic Pack Vol. II Dinosaurs 侏罗纪包卷恐龙二号Unity游戏模型资源unitypackage
- Jurassic Pack Vol. III Dinosaurs 侏罗纪包卷恐龙三号Unity游戏模型资源unitypackag
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功