directx-01-梦开始的地方
2012-03-19 01:32
453 查看
最近感觉有点荒废,为了让自己充实点,本人决定在csdn上写博客,学习directx9.0,为了游戏梦想。
由于自己也是初学,可能会犯很多错误,欢迎网友报错,欢迎前辈指点。
学习的参考书目为《Directx 游戏开发终极指南》,其实自己也买了龙书,但是感觉龙书相对比这本难理解,看完这个再学龙书。
一.先来介绍下directx
directx微软公司的DirectX是一个多媒体应用编程接口(API)工具包,DirectX主要用于游戏开发,但其中部分(而不是全部)用于开发其他类型软件,这些软件包括游戏虚拟角色、网络游戏和与游戏无关的图形软件。DirectX通过和底层硬件打交道,从而获取软件的最大性能。API DirectX主要由DirectGraphics、DirectInput、DirectPlay、DirectMusic和DirectSound组成。DirectX中的每个API都可以通过硬件加速。
DirectGraphics是DirectX API,主要负责向屏幕上渲染二维图形和三维图形。有经验的程序员会认为DirectGraphics是Direct3D。
DirectInput是Direct API,可以直接使用所有与计算机关联的输入设备。这些设备包括键盘、鼠标和游戏控制器设备。
DirectPlay控制台DirectX中网络功能的API。
DirectMusic是DirectX API中的一员,负责声音的处理。
DirectX中的DirectSound API提供了更高级声音处理能力。
要进行directx开发,首先去微软下载directxsdk。
二.初始化win窗口,由于d3d是微软的东西,自然也要在windows平台上开发了,我们的开发平台为vs2010-win32平台,所以我们先来初始化一个windows窗口
(和vc++游戏编程第一节有点重复,所以这里不讲了)我们主要来初始化一个d3d窗口;
首先你要引用d3d里面的lib,这时你 必须先安装好directxsdk,然后在vs2010项目中加载链接项
InitializeD3D()函数开始先调用Direct3DCreate9()函数。Direct3DCreate9()函数将创建一个Direct3D接口对象,并返回该对象。该函数所带的参数值为D3D_SDK_VERSION。如果从该函数创建的接口不为NULL(空),那么接口创建成功。如果是NULL,那么创建接口时就会出现一些错误,并且由于其余步骤在很大程度上取决于是否成功调用Direct3DCreate9()函数,所以一旦出现错误,就会立刻退出Direct3D初始化程序。
接下来调用的是GetAdapterDisplayMode()函数,该函数的参数包括正在查询的适配器以及保存信息的显示模式对象。
由于自己也是初学,可能会犯很多错误,欢迎网友报错,欢迎前辈指点。
学习的参考书目为《Directx 游戏开发终极指南》,其实自己也买了龙书,但是感觉龙书相对比这本难理解,看完这个再学龙书。
一.先来介绍下directx
directx微软公司的DirectX是一个多媒体应用编程接口(API)工具包,DirectX主要用于游戏开发,但其中部分(而不是全部)用于开发其他类型软件,这些软件包括游戏虚拟角色、网络游戏和与游戏无关的图形软件。DirectX通过和底层硬件打交道,从而获取软件的最大性能。API DirectX主要由DirectGraphics、DirectInput、DirectPlay、DirectMusic和DirectSound组成。DirectX中的每个API都可以通过硬件加速。
DirectGraphics是DirectX API,主要负责向屏幕上渲染二维图形和三维图形。有经验的程序员会认为DirectGraphics是Direct3D。
DirectInput是Direct API,可以直接使用所有与计算机关联的输入设备。这些设备包括键盘、鼠标和游戏控制器设备。
DirectPlay控制台DirectX中网络功能的API。
DirectMusic是DirectX API中的一员,负责声音的处理。
DirectX中的DirectSound API提供了更高级声音处理能力。
要进行directx开发,首先去微软下载directxsdk。
二.初始化win窗口,由于d3d是微软的东西,自然也要在windows平台上开发了,我们的开发平台为vs2010-win32平台,所以我们先来初始化一个windows窗口
(和vc++游戏编程第一节有点重复,所以这里不讲了)我们主要来初始化一个d3d窗口;
首先你要引用d3d里面的lib,这时你 必须先安装好directxsdk,然后在vs2010项目中加载链接项
#include<d3d9.h> //头文件 #pragma comment(lib, "d3d9.lib") //调用库 #pragma comment(lib, "d3dx9.lib") #define WINDOW_CLASS "UGPDX" //宏 #define WINDOW_NAME "D3D Window" // 定义顶点格式标识符,即灵活顶点格式 #define D3DFVF_VERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) // Function Prototypes... 声明 bool InitializeD3D(HWND hWnd, bool fullscreen); bool InitializeObjects(); // 用于创建演示程序中要绘制在屏幕上的物体 LPDIRECT3DVERTEXBUFFER9 g_VertexBuffer = NULL; // 定义了一个顶点缓存对象 void RenderScene(); void Shutdown(); // Direct3D object and device. LPDIRECT3D9 g_D3D = NULL; //初始化D3D对象 LPDIRECT3DDEVICE9 g_D3DDevice = NULL; // 定义场景中单个3D点的结构 struct stD3DVertex { float x, y, z, rhw; // 点的x,y,z坐标值 unsigned long color; // 点的颜色 }; LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) //消息回调函数 { switch(msg) { case WM_DESTROY: PostQuitMessage(0); return 0; break; case WM_KEYUP: if(wParam == VK_ESCAPE) PostQuitMessage(0); break; } return DefWindowProc(hWnd, msg, wParam, lParam); //销毁 } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE prevhInst, LPSTR cmdLine, int show) { // Register the window class WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL,WINDOW_CLASS, NULL }; //创建窗口类 RegisterClassEx(&wc); //注册窗口类 // Create the application's window 创建窗口 HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME, WS_OVERLAPPEDWINDOW, 100, 100, 640, 480, GetDesktopWindow(), NULL, wc.hInstance, NULL); // Initialize Direct3D初始化 if(InitializeD3D(hWnd, false)) { // Show the window ShowWindow(hWnd, SW_SHOWDEFAULT); UpdateWindow(hWnd); // Enter the message loop MSG msg; ZeroMemory(&msg, sizeof(msg)); while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else RenderScene(); //渲染屏幕 } } // Release any and all resources. Shutdown(); //释放D3D对象 // Unregister our window. UnregisterClass(WINDOW_CLASS, wc.hInstance); return 0; } bool InitializeD3D(HWND hWnd, bool fullscreen) //初始化D3D { D3DDISPLAYMODE displayMode; // Create the D3D object. g_D3D = Direct3DCreate9(D3D_SDK_VERSION); //创建D3D接口对象 if(g_D3D == NULL) return false; // Get the desktop display mode.显卡信息 if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &displayMode))) return false; // Set up the structure used to create the D3DDevice //建立D3DPRESENT_PARAMETERS结构,用于定义Direct3D窗口的显示信息 D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); if(fullscreen) { d3dpp.Windowed = FALSE; d3dpp.BackBufferWidth = 640; d3dpp.BackBufferHeight = 480; } else d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = displayMode.Format; // Create the D3DDevice if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_D3DDevice))) { return false; } return true; } void RenderScene() { // Clear the backbuffer. g_D3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0); // Begin the scene. Start rendering. g_D3DDevice->BeginScene(); // End the scene. Stop rendering. g_D3DDevice->EndScene(); // Display the scene. g_D3DDevice->Present(NULL, NULL, NULL, NULL); } void Shutdown() { if(g_D3DDevice != NULL) g_D3DDevice->Release(); if(g_D3D != NULL) g_D3D->Release(); g_D3DDevice = NULL; g_D3D = NULL; }
InitializeD3D()函数开始先调用Direct3DCreate9()函数。Direct3DCreate9()函数将创建一个Direct3D接口对象,并返回该对象。该函数所带的参数值为D3D_SDK_VERSION。如果从该函数创建的接口不为NULL(空),那么接口创建成功。如果是NULL,那么创建接口时就会出现一些错误,并且由于其余步骤在很大程度上取决于是否成功调用Direct3DCreate9()函数,所以一旦出现错误,就会立刻退出Direct3D初始化程序。
接下来调用的是GetAdapterDisplayMode()函数,该函数的参数包括正在查询的适配器以及保存信息的显示模式对象。
相关文章推荐
- 回到故事开始的地方
- 04 Android的系统结构(从01开始点点入门,视频+笔记)
- 逐梦旅程学习笔记 DirectX开发入门01:应用程序基本框架
- 第一篇 梦开始的地方
- 从0开始学习 GitHub 系列之「01.初识 GitHub」
- 《第一本无人驾驶技术书》——01 无人车:正在开始的未来
- java从头开始学习到选择c++ (四)数组需要注意的地方
- Android开发培训(01)--开始
- 我的职业生涯开始的地方
- [DirectX开发学习日记]DirectX9.0+VS.NET2005学习初步-(01)配置
- OpenGL ES 2.0 (iOS)[01]: 一步从一个小三角开始
- Kotlin官方参考整理——01.开始
- 05 java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)
- 博弈论 套路开始的地方(NIM游戏和Sprague-Grundy函数)
- 写在开始的地方:明白分享的价值
- 从0开始学习 GitHub 系列之「01.初识 GitHub」
- 三月,梦开始的地方
- 不要把Hibernate事务控制放在Http请求开始的地方
- 从flask学python---从flask v0.1开始---01
- DirectX初级篇01 -- 基本概念及D3D设备