directx SDK官方教程
- 格式:wps
- 大小:109.00 KB
- 文档页数:43
如何安装和使用DirectX返回上级1、编译库和运行库2、安装VC++ 5.03、安装DirectX5.0 的SDK4、DirectX 5.0 的文件说明5、卸载DirectX1、编译库和运行库回到目录为了能够使用MS VC++5.0进行DirectX编程,必须拥有一套DirectX 的SDK(软件开发工具包),它包括了编译DirectX应用程序所需要的编译库文件(*.lib)、头文件(*.h)、示例,还有帮助。
MS VC++5.0自己带有3.0版的DirectX SDK,所以只要按照缺省的安装,你的VC 就已经可以编制基于DirectX的应用程序了。
不过,缺省的安装并不会把DirectX的在线帮助包括在内,没有这个功能强大的在线帮助,你常常会陷入孤立无援的境地。
这一章将教你如何安装一个全功能的MS VC++5.0 DirectX编译环境。
如果你有DirectX5.0版或更高版的SDK,本章还将教你如何更新旧版的DirectX编译环境。
且慢,如果你辛辛苦苦编了一个漂亮的动画程序,兴高采烈的拷给你的朋友,第二天他们却告诉你根本就运行不了,那将是何等的尴尬与无奈。
原来,要让DirectX应用程序能在脱离VC的环境下执行,你的电脑还必须安装有DirectX运行库(Runtime library),这也就是我们常说的DirectX引擎(Engine)或驱动程序(Device Driver)。
好在Microsoft 为了推行其DirectX标准,将这套驱动程序库免费奉送,你可以从Microsoft公司的Web站点的DirectX页上下载,当然,这显然是个很愚蠢的方法,因为,在很多高速图形游戏如Need For Speed(极品飞车)、Motor Racer(摩托英豪)、Diablo(暗黑破坏神)、Red Alert (红色警戒)等中,都有DirectX驱动程序提供。
安装驱动程序只用运行Setup文件就可以了,它默认的包括了在Windows注册表中注册DirectX部件,并且将动态连接库文件(DLL)复制到Windows系统目录中。
directx中文手册1、什么是DirectX ?微软的DirectX软件开发工具包(SDK)提供了一套优秀的应用程序编程接口(APIs),这个编程接口可以提供给你开发高质量、实时的应用程序所需要的各种资源。
DirectX技术的出现将极大的有助于发展下一代多媒体应用程序和电脑游戏。
总的说来,使用DirectX的主要有两个好处:1、为软件开发者提供硬件无关性;2、为硬件开发提供策略。
1、为软件开发者提供硬件无关性微软开发DirectX,其最主要的目的之一是促进在Windows操作系统上的游戏和多媒体应用程序的发展。
在DirectX出现以前,主要的游戏开发平台是MS-DOS,游戏开发者们为了使他们的程序能够适应各种各样的硬件设备而绞尽脑汁。
自从有了DirectX,游戏开发者们便可以获益于Windows平台的设备无关性,而又不失去直接访问硬件的特性。
DirectX主要的目的就是提供象MS-DOS一样简洁的访问硬件的能力,来实现并且提高基于MS-DOS平台应用软件的运行效果,并且为个人电脑硬件的革新扫除障碍。
另一方面,微软公司开发DirectX是为了在当前或今后的计算机操作系统上提供给基于Windows平台的应用程序以高表现力、实时的访问硬件的能力。
DirectX在硬件设备和应用程序之间提供了一套完整一致的接口,以减小在安装和配置时的复杂程度,并且可以最大限度的利用硬件的优秀特性。
通过使用DirectX所提供的接口,软件开发者可以尽情的利用硬件所可能带来的高性能,而不用烦恼于那些复杂而又多变的硬件执行细节。
一个高表现力的基于Windows平台的游戏将得益于以下几种技术:专为提高图形运算及快速反应能力而设计的加速卡(Accelerator cards)即插即用以及其它Windows软硬件内建于Windows的通信服务, 包括DirectPlay2、为硬件开发提供策略DirectX的另外一个重要的目的是给硬件厂商提供开发策略,他们可以从高性能程序的开发者和独立的硬件供应商(independent hardware vendors IHVs)那里得到反馈。
DirectX 9 SDK编程的教程2008-11-11 14:19译:kevin-y程序代码:下载导言欢迎来到我的第一个关于DirectX编程的教程,我们使用的是DirectX 9 SDK。
很大一部分的C#开发人员都等待这个版本。
在此这前,C#开发人员都是通过DirectX 7 或 8 的VB组件,使用COM接口的方式,来进行DirectX的开发。
新版本的DirectX组件提供的更好的性能、更容易的编程。
该教程适合DirectX编程的新手(如我),还有其他使用COM接口进行DirectX开发的人员。
在这教程里,我们将重建一个Super Metroid的游戏(我们就叫她做Managed metroid吧)。
我们将要应用所有DirectX编程中的方方面面(DirectDraw,DirectSound,DirectInput,Direct3D,DirectPlay 和AudioVideoPlayback)。
在第一节我们将要学习在全屏下绘制文字和窗口标题,以此灌输一些基本的DirectDraw知识。
我们所需要的-Microsoft Windows NT4 SP6, Windows 2000, Windows XP Pro(只是编译所需) -Visual C# .NET or Visual Studio .NET-DirectX 9 SDK Full or only C# Part(没有的话要到这Microsoft)-Image editing tool(可选但很有用)-SNES Emulator with Super Metroid ROM(可选)第一节:标题窗口1.加入DirectX 的命名空间到project中。
在引用(reference)中加入Microsoft.DirectX.dll andMicrosoft.DirectX.DirectDraw.dllusing Microsoft.DirectX;using Microsoft.DirectX.DirectDraw;2.加入变量一开始,我们需要建立DirectDraw Device,接着建立Surfaces。
DirectX 11 SDK文档(一)分类:Winows API C DirectX2011-04-23 10:23 1373人阅读评论(0) 收藏举报文档applicationnulldirect3dcallback工作总结这是一个初步的教程。
我们将通过必要的步骤来创建一个Win32 Application。
我们创建一个空白的窗口为DirectX 11做准备。
创建窗口每一个窗口应用程序需要至少一个窗口对象。
甚至在开始获得DirectX 11的诸多细节之前,我们的Application必须要有一个工作着的窗口。
我们有三个事情要做:1.注册一个窗口类WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance,(LPCTSTR)IDI_TUTORIAL1);//这个是资源图标,需要资源载入wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = NULL;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_TUTORIAL1);if( !RegisterClassEx(&wcex) )return FALSE;2.创建一个窗口对象g_hInst = hInstance; // 用全局变量来保存应用程序实例句柄RECT rc = { 0, 0, 640, 480 };AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW,FALSE );//根据窗口风格,以rc为客户区调整整个窗口大小g_hWnd = CreateWindow( szWindowClass, L"Direct3D 11 Tutorial 0: Setting Up Window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,rc.right - rc.left, rc.bottom - rc.top,NULL, NULL,hInstance, NULL);if( !g_hWnd )return FALSE;ShowWindow( g_hWnd, nCmdShow );3.检索和调度这个窗口的消息队列的消息MSG msg = {0};while( GetMessage( &msg, NULL, 0, 0 ) {TranslateMessage( &msg );DispatchMessage( &msg );}LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){PAINTSTRUCT ps;HDC hdc;switch (message) {case WM_PAINT:hdc = BeginPaint(hWnd, &ps);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}对于每个窗口应用程序,这是最少的步骤来创建一个窗口对象。
关于DirectX及DirectX SDK安装与开发环境的配置DirectX是微软公司为编写游戏和其它高性能多媒体应用而开发的一组高级的Windows底层应用编程接口(API),它包含了对图形,声音,输入设备和网游等的支持。
下面介绍一下它的一些特点。
DirectX是一种基于COM的系统搭建起来的,COM面向对象模式比一般的C++更为严格。
比如COM只能通过成员函数来进行访问,而不能够用公用数据成员。
但是COM有一大优势,那就是它是它是一种基于二进制的编程模型,由此使安装了新版本的DirectX版本,建立在老版本的DirectX也一定可以运行,它的本身二进制编程模型也使得跨语言成为其一大优势。
DirectX主要是由硬件抽象层(HAL)和硬件模拟层(HEL)构成的,这也就是DirectX的底层结构。
HAL是硬件制造商提供的特定于硬件的接口,DirectX可以使用这些接口对底层进行直接操作。
正因为HAL提供一套统一的接口和方法可以访问图形硬件,所以DirectX3D可以通过HAL编写与设备无关的高效代码,从而完成设备无关性。
这也使 DirectX能够成为一个强大的API,具有很强的移植性。
DirectX使用HAL与显示硬件协同工作,即应用程序从不直接与HAL打交道,而是通过HAL提供的基础,DirectX提供的一套统一的接口与方法。
应用程序用这些接口与方法就可以直接绘制图形了。
硬件模拟层用的较少,功能与HAL相似。
DirectX的API 主要有DirectGraphics,DirectIput,DirectPlay,DirectMusic,DirectSound等。
下面组要介绍一下DirectX的安装:首先先下载一个DirectX9.0c SDK,先解压缩,然后执行其中的.exe文件(有的直接就是exe 执行文件)然后按照安装向导进行安装,其中应注意的几个问题是:一,下载的是ZIP压缩文件,在安装前必将其解压缩到临时文件夹,即运行安装文件时要用到一个临时文件夹,安装完成之后应将其删除。
DirectX 8 教程著 Andy Pike译 Aman JIANG第一章: 准备就绪What you will need(你需要什么)•DirectX 8.0 SDK (可以从/directx下载)•VC6(SP5)/•Windows 程序设计经验•通晓 C++ 和OOPIntroduction(序)(原著的话)欢迎阅读本DX教程。
本教程至少能帮你入门、使你了解怎样用DX8 来开发Windows游戏。
我写这个教程的原由有二:首先,当出现DX时,我还是一个初学者。
所以,我想边学习边写一个教程来锻炼自己。
其次,对初学者来说,DX SDK 并不是很有帮助。
而且,网上也没有什么像样的Dx8教程。
另外,就像上面我提到的,我也是个初学者,所以,如果你发现教程中有什么地方不对,请给我写信:**********************。
译者言我也是一名初学者,所以,有言在先:如果你读英文能如履平地,建议你还是去读原著。
此教程很适合入门,等你入门以后,你会发现,其实一切并没有想象的那样复杂。
这是个不错的Dx8教程,我会尽最大努力把它翻译好。
注:我并没有完全按照原著来译,不适之处,请多包涵。
嗯,你应该弄到教程附带的源代码,没有那个可不行!可以到去下载。
欢迎指出我的错误,或与我联系,我的Email:************************ or ****************** , QQ:15852673。
COMWhat is COM? COM 是什么呢?COM 就是 Component Object Model, 组件对象模型。
COM 接口和C++的抽象类相似(但不一样),就像抽象类没有与之相关的实际代码一样,COM描述了一套符号和语法而非实现过程。
你也可以把 COM 对象就想象成一套为某个主题而设计的一整套库函数。
DX 就提供了一套完整的设计3D游戏的库。
最棒的就是,使用DX时,你不必去直接接触硬件,而由DX帮你代理了。
在Microsoft DirectX SDK中加载简单3DS模型准备工作:1. 请安装3DS MAX软件2.PandaDirectXMaxExporter并解压到3dmax的plugins里面3.使用3DSMAX创建一个简单模型,并给其贴上任意贴图(必须贴上贴图,该例子的shader代码限制,否则模型就没灯光),将模型和贴图一并导出到SimpleSample文件夹下。
扩展名后缀为.X(D3D默认mesh文件)4.声名一个CDXUTXFileMesh* g_pFileMesh = NULL;全局对象5.在OnD3D9CreateDevice里面创建该对象如下:CreateModle();它的定义是:void CreateModle(){g_pFileMesh = new CDXUTXFileMesh;HRESULT hr = g_pFileMesh->Create( DXUTGetD3D9Device(), L"ball.x" );if( FAILED( hr ) ){__asm int 3;}}6.在OnD3D9FrameRender()里添加:mWorld = *g_Camera.GetWorldMatrix();mProj = *g_Camera.GetProjMatrix();mView = *g_Camera.GetViewMatrix();mWorldViewProjection = mWorld * mView * mProj;// Update the effect's variables. Instead of using strings, it would// be more efficient to cache a handle to the parameter by calling // ID3DXEffect::GetParameterByNameV( g_pEffect9->SetMatrix( "g_mWorldViewProjection", &mWorldViewProjection ) );V( g_pEffect9->SetMatrix( "g_mWorld", &mWorld ) );V( g_pEffect9->SetFloat( "g_fTime", (float)fTime ) );D3DXVECTOR3 vDir = D3DXVECTOR3( 0.0f, 0.0f, -1.0f );V( g_pEffect9->SetValue( "g_LightDir", &vDir, sizeof( D3DXVECTOR3 ) ) );D3DXCOLOR vDiffuse = D3DXCOLOR( 1, 1, 1, 1 );V( g_pEffect9->SetValue( "g_LightDiffuse", &vDiffuse, sizeof( D3DXCOLOR ) ) );hTexture = g_pEffect9->GetParameterByName( hTexture, "g_MeshTexture" );hAmbient = g_pEffect9->GetParameterByName( hAmbient, "g_MaterialAmbientColor" );hDiffuse = g_pEffect9->GetParameterByName( hDiffuse, "g_MaterialDiffuseColor" );V( g_pEffect9->SetTechnique( "RenderScene" ) );V( g_pFileMesh->Render( g_pEffect9, hTexture, hDiffuse, hAmbient ) ); //V( g_pFileMesh->Render(pd3dDevice, true, true ) );7.最后别忘了释放g_pFileMesh在void CALLBACK OnD3D9DestroyDevice( void* pUserContext ){SAFE_DELETE( g_pFileMesh );g_DialogResourceManager.OnD3D9DestroyDevice();g_SettingsDlg.OnD3D9DestroyDevice();SAFE_RELEASE( g_pEffect9 );SAFE_RELEASE( g_pFont9 );}中。
DirectX 9 SDK编程的教程2008-11-11 14:19译:kevin-y程序代码:下载导言欢迎来到我的第一个关于DirectX编程的教程,我们使用的是DirectX 9 SDK。
很大一部分的C#开发人员都等待这个版本。
在此这前,C#开发人员都是通过DirectX 7 或 8 的VB组件,使用COM接口的方式,来进行DirectX的开发。
新版本的DirectX组件提供的更好的性能、更容易的编程。
该教程适合DirectX编程的新手(如我),还有其他使用COM接口进行DirectX开发的人员。
在这教程里,我们将重建一个Super Metroid的游戏(我们就叫她做Managed metroid吧)。
我们将要应用所有DirectX编程中的方方面面(DirectDraw,DirectSound,DirectInput,Direct3D,DirectPlay 和AudioVideoPlayback)。
在第一节我们将要学习在全屏下绘制文字和窗口标题,以此灌输一些基本的DirectDraw知识。
我们所需要的-Microsoft Windows NT4 SP6, Windows 2000, Windows XP Pro(只是编译所需) -Visual C# .NET or Visual Studio .NET-DirectX 9 SDK Full or only C# Part(没有的话要到这Microsoft)-Image editing tool(可选但很有用)-SNES Emulator with Super Metroid ROM(可选)第一节:标题窗口1.加入DirectX 的命名空间到project中。
在引用(reference)中加入Microsoft.DirectX.dll andMicrosoft.DirectX.DirectDraw.dllusing Microsoft.DirectX;using Microsoft.DirectX.DirectDraw;2.加入变量一开始,我们需要建立DirectDraw Device,接着建立Surfaces。
DirectX3D SDK 基础教程(一)Direct3D 10 基础Tutorial 1: Direct3D 10 Basics概述在这第一篇教程中,我们将通过一些必要的元素去创建一个最小的Direct3D 10 应用. 每一个 Direct3D 10 应用都必须有这些功能元素对应功能属性. 这些元素包括设置窗口和设备对象,然后在窗口中显示一种颜色。
设置Direct3D 10 设备现在我们在一个只有一个空窗体的工程中, 去设置一个 Direct3D 10 设备, 如果你想去渲染任何一个3D 场景,设置3D 设备是非常必要的。
我们首先要做的是去创建2个对象:一个设备和一个交互链。
应用程序使用设备对象在缓冲区上执行渲染。
设备也包含了去创建资源的方法。
交互链对象的责任是从缓冲区中获得数据,这些数据是将被设备对象渲染并显示在显示器屏幕上。
交互链对象包含两个或更多地缓冲区,主要分为前端和后端缓冲区。
前端缓冲区是当前正在被显示给用户的数据,大多是设备对象渲染的材质,前端缓冲区是只读的,不能被修改。
后端缓冲区是渲染目标,就是设备将要渲染的材质。
一旦完成了绘画操作,这个交互链对象将显示后端缓冲区。
通过交互两个缓冲区,这个后端缓冲区变成了前端缓冲区。
为了创建交互链对象,我们要填写一个DXGI_SWAPCHAIN_DESC 结构体,这个结构体是我们要创建的交互链的描述。
有几个字段值的我们去说一下.BackBufferUsage 是一个标志字段,告诉应用程序怎样去使用后端缓冲区。
如果我们想去渲染后端缓冲区,我们就要设置 BackBufferUsage 标志为 DXGI_USAGE_RENDER_TARGET_OUTPUT.OutputWindow 字段代表窗口,交互链使用这个窗口去显示图像到屏幕上。
SampleDesc 被用来打开duo重采样. 由于这个教程不做多重采样,所以SampleDesc的 Count 被设置到 1,并且Quality被设置到 0 去关闭此功能。
directx使用方法【实用版4篇】《directx使用方法》篇1DirectX 是一种由微软公司开发的多媒体编程接口(API),用于提高以Windows 为平台的游戏或多媒体程序的执行效率,加强3D 图形和声音效果。
以下是使用DirectX 的一些方法:1. 下载和安装DirectX:如果您没有安装DirectX,可以从微软官方网站下载并安装。
安装完成后,DirectX 将自动集成到Windows 操作系统中,您可以使用它来开发游戏或多媒体应用程序。
2. 使用DirectX API:DirectX API 是一组编程接口,可用于访问DirectX 的功能。
您可以使用这些API 来编写游戏或多媒体应用程序,以实现更好的图形和声音效果。
3. 使用DirectX 12:DirectX 12 是DirectX 的最新版本,它提供了更高的性能和更好的多线程支持。
如果您想使用DirectX 12,您需要安装Windows 10 操作系统。
4. 使用DirectX 诊断工具:DirectX 诊断工具可以帮助您检查计算机的DirectX 安装状态和硬件兼容性。
您可以使用这个工具来识别和解决DirectX 相关的问题。
5. 参加DirectX 社区:DirectX 社区是一个由游戏开发者和DirectX 用户组成的社区,您可以在这个社区中获取有关DirectX 的最新信息和技巧,并与其他开发者分享您的经验。
总之,DirectX 是一种强大的多媒体编程接口,可以帮助您开发高质量的游戏或多媒体应用程序。
《directx使用方法》篇2DirectX 是一种由微软公司开发的多媒体编程接口(API),可用于提高以Windows 为平台的游戏或多媒体程序的执行效率,加强3D 图形和声音效果。
以下是使用DirectX 的一些方法:1. 下载和安装DirectX:如果您还没有安装DirectX,可以从微软官方网站下载并安装最新版本的DirectX。
Tutorial 1: Creating a DeviceDirect3D 9 的样例教程(Tutorials and Samples for direct3D9)此DX开发包提供弱干资源和例程代码。
Tutorials都是彻底从头重新编写的仅仅包含运行Direct3D 功能函数的必须应用程序接口(API)。
Samples都演示了Direct3D 9的最新特征和最基本的函数功能,所有的Direct3D样例都建立在DXUT之上。
Tutorials以下的Tutorials演示了Direct3D基本功能也仅仅是SDK里面所提供的。
Direct3D Tutorials这里的引导教程向你展示了如何在C/C++程序中使用Direct3D和D3DX。
这些工作分成为以下必要的几步:Tutorial 1: 创建设备(Creating a Device)Tutorial 2: 渲染顶点(Rendering vertices)Tutorial 3: 使用矩阵(Using Matrices)Tutorial 4: 创建和使用光照(Creating and using lights)Tutorial 5: 使用纹理贴图(Using Texture Maps)Tutorial 6: 使用网格(Using Meshes)这些教程的代码都是来自各个教程所提供的源工程中,代码程序都是用C++编写,如果你正在使用C编译器,那么你必须为它们做些合理的改变以便成功的编译程序,至少你需要把vtable和指针加入到这些接口函数有些例程中的注释可能和平台sdk源文件中的不同,这些改变仅仅为了更简洁,但并没有改变所要表达的意思。
Tutorial 1: (创建设备环境)Creating a Device为了使用Direct3D,第一步你创建一个应用程序窗口,然后创建和初始化Direct3D对象。
你使用组件对象模型接口(component object model(com) interfaces),这些对象执行渲染场景所必须的对象。
创建环境样例工程是为了说明创建Direct3D设备的工作和创建一个蓝色的屏幕。
些例程使用如下几步:初始化Direct3D, 渲染场景,最后完全关闭。
步骤:第一步:创建窗口(Creating a Window)第二步:初始化Direct3d(Initializing Direct3d)第三步:处理系统消息(Handling System Messages)第四步:渲染和显示一个窗口(Rendering and Displaying a Scene)第五步:关闭(Shutting Down)Note: CreateDevice例程工程文件路径为((SDK root)\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevic e)Step 1 –创建窗口(Creating a Window)所有的Windows应用程序在他们运行时首先都必须做的是,为用户创建一个应用程序窗口来显示。
为了做到这点CreateiDevice工程开始从WinMain函数执行。
下面的例程执行窗口的初始化工作:INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT){//注册窗口类WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,GetModuleHandle(NULL), NULL, NULL, NULL, NULL, “Direct3d Tutorial”, NULL};RegisterClassEx(&wc);//创建窗口HWND hWnd = CreateWindow( “Direct3d Tutorial”, “ Direct3d Tutorial 01:CreateDevice”,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(), NULL, wc,hInstance, NULL);以上的样程是标准的WINDOWS编程,样程人定义和注册一个叫做“Direct3d Tutorial”的窗口类开始,在类被注册后,使用注册过的类创建一个最高层的窗口,用户区大小为300像素宽和300像素高。
并且没有菜单和子窗口。
使用WS_OVERLAPPEDWINDOW窗口样式创建一个包括最小化、最大化和关闭按钮的应用程序框架。
(如果例程要运行在全屏模式下,首选的窗口样式为WS_EX_TOPMOST,指定创建的窗口应该放在所有非顶端窗口之上,即使窗口处于非激活状态。
)当窗口创建完成后,程序调用标准Win32函数来显示和刷新窗口。
Step 2 –初始化Direct3D(Initializing Direct3D)例程CreateDevice展示了在InitD3D程序中Direct3D的初始化工作,定义了在创建窗口之口被Winmain调用的函数。
在创建一个应用程序窗口之后,你已经准备好去初始化一个你将用来渲染场景的Direct3D对象。
这个过程包括:创建对象,定义显示参数,最后创建Direct3D设备。
在创建一个Direct3D对象之后,使用Idirect3D9::CreateDevice 方法创建设备,并且枚举用命设备,类型,样式等等。
If( NULL == ( g_pD3D = Direct3dCreate9( D3D_SDK_VERSION ) ) )Return E_FAIL;传给Direct3Dcreate9() 函数的参数必须是D3D_SDK_VERSION, 这个参数告诉Direct3D使用正确的头文件,这个值会在任何时间头文件或其它改变需要重新建立工程时增加。
如果版本不匹配,Direct3Dcreate9将会失败。
在填写D3DPRESENT_PARAMETERS 结构本之后你可以指定你的3D程序如何表现。
在CreateDevice例程中指定窗口化(Windowed)为TRUE,SwapEffect为D3DSWAPEFFECT_DISCARD, BackBufferFormat为D3DFMT_UNKNOWN.D3DPRESENT_PARAMETERS d3dpp;ZeroMemory( &d3dpp, sizeof( d3dpp ) );d3dpp.Windowed = TRUE;d3dpp.Swapeffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;最后一步是使用Idirect3D9::CreateDevice 函数来创建Direct3D设备,如下代码:If( FAILED( g_pD3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp,&g_pd3dDevice ) ) )以上代码创建设备使用D3DADAPTER_DEFAULT 标记来指定使用默认的显示器,在大多数情况下系统会使用单一的显示器,除非安装了多个图形硬件显卡,参数D3DDEVTYPE_HAL来指定设备类型为硬件设备而不是软件设备,使用D3DCREATE_SOFTWARE_VERTEXPROCESSING标记来告诉系统使用软件顶点处理方法,注意如果你使用D3DCREATE_HARDWARE_VERTEXPRICESSING参数来指定系统使用硬件顶点处理方法,并且支持硬件顶点处理的话你将会看到从显示卡上获得的重大表现。
现在Direct3D对象已经初始化了,下一步是确保你有一个处理系统消息的方法。
Step 3 –处理系统消息(Handling System Messages)在你已经创建应用程序窗口和初始化了Direct3D之后,你已经准备好去渲染一个场景了。
在大多数情况下Windows应用程序的消息监控系统在他们的消息循环中,并且在消息队列没有消息时进行渲染框架。
但CreateDevice例程等到有WM_PAINT消息在队列中时才告诉应用程序它需要重画所有或窗口的部分。
//消息循环MSG msg;while( GetMessage( &msg, NULL, 0,0 ) ){TranslateMessage( &msg );DispatchMessage( &msg );}每当消息循环时,DispatchMessage调用回调函数(MsgProc),来处理队列中的消息。
当WM_PAINT在队列时,应用程序调用渲染函数开始窗口重绘,然后调用Win32函数VaildateRect()来使客户区生效。
本例程代码的消息处理函数如下:LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){switchd( msg){case WM_DESTROY:PostQuitMessage( 0 );return 0;case WM_PAINT:render();ValidateRect( hWnd, NULL );erturn 0;}return DefWindowProc( hWnd, msg, wParam, lParam);Step 4 –渲染和显示一个场景(Rendering and Displaying a Scene)为了渲染和显示场景,例程在这一步将后台缓存清空为蓝色,并将后台内容传输到前台缓存,然后将前台缓存显示到屏幕。
调用Idirect3Ddevice9::Clear()方法清空屏幕。
//半后台缓存清空为蓝色g_pd3dDevice -> Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255 ), 1.0f, 0);Idirect3Ddevice9::Clear()的前两个参数用来告诉Direct3D要被清空的矩形区的大小的地址,矩形数组抽述了在渲染目标表面的要被清空的区域。
在多数情况下,使用单一矩形覆盖整个渲染目标,通过设定第一个参数为0和第二个参数为NULL来做到这些,第三个参数决定方法的行为。
你可以指定下面的标记来清空渲染表面,一个相关联的深度缓存,纹理缓存,或是任何三个参数的组合。
这个例程没有使用深度缓存,所以D3DCLEAR_TARGET是唯一使用的标记。