标签: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开发
原文地址:http://blog.csdn.net/liuyi1207164339/article/details/47318999