码迷,mamicode.com
首页 > 其他好文 > 详细

DirectX3D开发之开发第一个DirectX3D项目

时间:2015-08-06 18:25:57      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:directx3d开发

    欢迎访问EasyLiu的博客!此博客为博主原创,未经允许不得转载!

    开发环境:WIN764+VS2013+DirectX SDK(June 2010)

     首先提供DirectX3D软件包下载地址:http://pan.baidu.com/s/16WItw。

    下载下来之后直接双击安装就行,默认安装目录为:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)。

    下面就开始我们的第一个DirectX3D项目。

    1、新建一个空的win32应用程序,记住不是win32控制台应用程序,这两者是由区别的!

    2、项目完成以后,配置DirectX开发环境:

    选择“项目”--》“属性”,打开属性配置窗口如下所示:

    技术分享

    选择“VC++目录”,把DirectX  SDK 的“包含目录(Include)”以及"库目录(Lib)"包含进去,分别为:

   C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include

    C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86,虽然我的系统是win764位,但是当我的引用库目录改为x64时候会报错,改为x86就不会报错,不知道      怎么回事!

    点击确定退出属性配置窗口。

   新建文件:main.cpp,在文件开头加上引用库:

  #pragma comment(lib, "d3d9.lib")
  #pragma comment(lib, "d3dx9.lib")

   打开帮助文档:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Documentation\DirectX9\directx_sdk.chm,切换到如下目录:

   技术分享

  Toutorial 1就详细讲了怎么创建一个DirectX 3D项目,虽然是英文但是应该不难看,并且Toutorial  1有对应的Sample 工程,位于如下目录:

  C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice,这里包含了一个完整的工程,我们只需把其代码复制到  我们的文件main.cpp里面就行了!

 下面是源代码:应该不难看懂,纯粹使用win32 API开发,包括设计窗口、注册窗口、创建窗口等一系列过程,如果对win32开发还不是很懂的同学可以先看一下孙鑫的VC++深入详解,讲得很详细,通俗易懂!

//-----------------------------------------------------------------------------
// File: CreateDevice.cpp
//
// Desc: This is the first tutorial for using Direct3D. In this tutorial, all
//       we are doing is creating a Direct3D device and using it to clear the
//       window.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------

#pragma comment(lib, "d3d9.lib") //引入依赖库
#pragma comment(lib, "d3dx9.lib")


#include <d3d9.h>
#include "Windows.h"//必须得包含这个文件夹
#pragma warning( disable : 4996 ) // disable deprecated warning 
#include <strsafe.h>
#pragma warning( default : 4996 )




//-----------------------------------------------------------------------------
// Global variables 
//-----------------------------------------------------------------------------
LPDIRECT3D9         g_pD3D = NULL; // Used to create the D3DDevice 
LPDIRECT3DDEVICE9   g_pd3dDevice = NULL; // Our rendering device




//-----------------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//-----------------------------------------------------------------------------
HRESULT InitD3D(HWND hWnd)
{
	// Create the D3D object, which is needed to create the D3DDevice.
	if (NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
		return E_FAIL;

	// Set up the structure used to create the D3DDevice. Most parameters are
	// zeroed out. We set Windowed to TRUE, since we want to do D3D in a
	// window, and then set the SwapEffect to "discard", which is the most
	// efficient method of presenting the back buffer to the display.  And 
	// we request a back buffer format that matches the current desktop display 
	// format.
	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.Windowed = TRUE;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

	// Create the Direct3D device. Here we are using the default adapter (most
	// systems only have one, unless they have multiple graphics hardware cards
	// installed) and requesting the HAL (which is saying we want the hardware
	// device rather than a software one). Software vertex processing is 
	// specified since we know it will work on all cards. On cards that support 
	// hardware vertex processing, though, we would see a big performance gain 
	// by specifying hardware vertex processing.
	if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
		D3DCREATE_SOFTWARE_VERTEXPROCESSING,
		&d3dpp, &g_pd3dDevice)))
	{
		return E_FAIL;
	}

	// Device state would normally be set here

	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;

	// Clear the backbuffer to a blue color
	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);

	// Begin the scene
	if (SUCCEEDED(g_pd3dDevice->BeginScene()))
	{
		// Rendering of scene objects can happen here

		// End the scene
		g_pd3dDevice->EndScene();
	}

	// Present the backbuffer contents to the display
	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)
{
	UNREFERENCED_PARAMETER(hInst);

	// 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 Tutorial 01: CreateDevice",
		WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
		NULL, 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;
		while (GetMessage(&msg, NULL, 0, 0))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	UnregisterClass("D3D Tutorial", wc.hInstance);
	return 0;
}



运行结果如下所示:

技术分享

总结:帮助文档还是挺好的,写的很详细,还有助于锻炼我们的英文水平!哈哈!



版权声明:本文为博主原创文章,未经博主允许不得转载。

DirectX3D开发之开发第一个DirectX3D项目

标签:directx3d开发

原文地址:http://blog.csdn.net/liuyi1207164339/article/details/47318999

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!