DirectX基本框架

DirectX环境配置:

当前环境配置:项目->属性->VC++目录->1)包含目录(编辑新建添加,找到DXsdk文件夹下的include文件夹完成添加DX有关的头文件)->2)库目录(编辑新建添加,找到DXsdk文件夹下的Lib文件夹中的x86完成添加DX有关的库的添加)

工程环境配置:属性管理器->Debug|Win32->双击“Microsoft.Cpp.Win32.user”->VC++目录->1)包含目录(编辑新建添加,找到DXsdk文件夹下的include文件夹完成添加DX有关的头文件)->2)库目录(编辑新建添加,找到DXsdk文件夹下的Lib文件夹中的x86完成添加DX有关的库的添加)

DirectX基本框架:

//-----------------------------------------------------------------------------
// File: main.cpp
//-----------------------------------------------------------------------------
#include <d3d9.h>
#include <d3dx9.h>
#pragma warning( disable : 4996 ) //屏蔽一些警告
#include <strsafe.h>
#pragma warning( default : 4996 )

#pragma comment(lib,"d3d9.lib")//引入dx的静态库




//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
LPDIRECT3D9         g_pD3D = NULL; // 引擎指针,用来创建设备指针
LPDIRECT3DDEVICE9   g_pd3dDevice = NULL; // 设备指针,所有渲染相关的操作全部是用设备指针来完成




//-----------------------------------------------------------------------------
// Name: InitD3D()
// Desc: 初始化D3D
//-----------------------------------------------------------------------------
HRESULT InitD3D(HWND hWnd)
{
	// 创建D3D引擎指针
	if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
		return E_FAIL;

	//设备参数结构体
	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));//让一段内存归零
	d3dpp.Windowed = TRUE;//是否窗口化
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//交换方式(前后台的)
	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//后台缓冲区的格式

	//创建设备指针
	if (FAILED(g_pD3D->CreateDevice(
		D3DADAPTER_DEFAULT, //显示设备的编号
		D3DDEVTYPE_HAL,//设备类型
		hWnd,//窗口句柄
		D3DCREATE_SOFTWARE_VERTEXPROCESSING,//顶点处理方式
		&d3dpp,//设备参数结构体
		&g_pd3dDevice)))//设备指针的地址
	{
		return E_FAIL;
	}

	return S_OK;
}




//-----------------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects
//-----------------------------------------------------------------------------
VOID Cleanup()
{
	if (g_pd3dDevice != NULL)
		g_pd3dDevice->Release();

	if (g_pD3D != NULL)
		g_pD3D->Release();
}




//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-----------------------------------------------------------------------------
VOID Render()
{
	if (NULL == g_pd3dDevice)
		return;

	//1.清空后台缓冲(其中包括颜色,深度,模板)
	g_pd3dDevice->Clear(0, //要清空的矩形区域的个数
		NULL,//要清空的矩形数组的首地址
		D3DCLEAR_TARGET /*| D3DCLEAR_ZBUFFER*/, //要清空的内容
		D3DCOLOR_XRGB(0, 0, 255), //要清空成的颜色
		1.0f, //要清空成的深度
		0);//要清空成的模板

	//2. 开始渲染
	if (SUCCEEDED(g_pd3dDevice->BeginScene()))
	{
		// 3.自己的渲染代码

		// 4.结束渲染
		g_pd3dDevice->EndScene();
	}

	// 5.前后台翻转
	g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}




//-----------------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-----------------------------------------------------------------------------
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_DESTROY:
		Cleanup();
		PostQuitMessage(0);
		return 0;

	case WM_PAINT:
		Render();
		ValidateRect(hWnd, NULL);//清空绘制区
		return 0;
	}

	return DefWindowProc(hWnd, msg, wParam, lParam);
}




//-----------------------------------------------------------------------------
// Name: wWinMain()
// Desc: The application's entry point
//-----------------------------------------------------------------------------
INT WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, INT)
{
	//注册窗口类
	WNDCLASSEX wc =
	{
		sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
		GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
		L"D3D Tutorial", NULL
	};
	RegisterClassEx(&wc);

	//创建窗口
	HWND hWnd = CreateWindow(L"D3D Tutorial", L"D3D Tutorial 01: CreateDevice",
		WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
		NULL, NULL, wc.hInstance, NULL);

	// 初始化D3D环境
	if (SUCCEEDED(InitD3D(hWnd)))
	{
		// 显示更新窗口
		ShowWindow(hWnd, SW_SHOWDEFAULT);
		UpdateWindow(hWnd);

		// 进入主消息循环
		MSG msg;
		while (GetMessage(&msg, NULL, 0, 0))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
 
	//注销窗口
	UnregisterClass(L"D3D Tutorial", wc.hInstance);
	return 0;
}



纯手打 如有错 请指教!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值