directx SDK官方教程

合集下载

DirectX+教程之如何安装和使用DirectX

DirectX+教程之如何安装和使用DirectX

如何安装和使用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中文手册

directx中文手册

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编程的教程

DirectX 9 SDK编程的教程

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文档

DirectX 11 SDK文档

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 SDK安装与开发环境的配置

DirectX SDK安装与开发环境的配置

关于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教程

DirectX教程

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模型

在Microsoft DirectX SDK中加载简单3DS模型

在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编程的教程

DirectX 9 SDK编程的教程

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 基础教程(一)

DirectX3D SDK 基础教程(一)

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使用方法

directx使用方法

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。

DirectX 11 SDK文档

DirectX 11 SDK文档

DirectX 11 SDK文档(一)总结这是一个初步的教程。

我们将通过必要的步骤来创建一个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_SDK

安装DirectX_SDK

安装DirectX SDK
第一步下载directX SDK 9.0b 大约200MB
第二步
安装C:\DXSDK
第三步
在文件夹C:\DXSDK\Samples\C++\DirectShow\BaseClasses 中找到BaseClasses.dsw
第四步
在VC6.0下运行在组建|批组建(build|batch)下选中debug 和release 复选框然后选择(全部重建)rebuild all 即可生成
库文件库文件有两个一个是在C:\DXSDK\Samples\C++\DirectShow\BaseClasses\debug 中的strmbasd.lib ;另一个是在C:\DXSDK\Samples\C++\DirectShow\BaseClasses\Release 中的STRMBASE.lib 将这两个文件复制到C:\DXSDK\lib中
第五步
将DirectX SDK库的路径和头文件加入到VC6.0的路径设置里。

Tools|Options 菜单Directions 标签,在show directories for
下拉菜单下列表中选择Include files
在其中加入
C:\DXSDK\Include
C:\DXSDK\Samples\C++\Common\Include
C:\DXSDK\Samples\C++\DirectShow\BaseClasses
第六步
Tools|Options 菜单Directions标签,在show directories for 下拉菜单下列表中选择library files 添加路径C:\DXSDK\lib。

vc6.0在directsdk下游戏编程基础之详细操作步骤

vc6.0在directsdk下游戏编程基础之详细操作步骤

关于游戏编程基础的书很多,但真正涉及到最基本的.最基础的详细操作步骤的网络教程也好.书籍也好,真是少之又少,这对刚接触用Directsdk编程的初学者来说,是个不小的困扰,从而打消了学习的积极性,在此,仅以自己的经验与大家分享。

刚刚接触游戏编程,并不需要多强大的编程工具,VC6.0 和directsdk足矣。

VC6.0的下载和安装这里不再详细赘述,网上的破解版很多下载一个安装即可。

对于directsdk的版本有很多的说法,有的说最好比你安装的VC6.0的版本低一些的.也有说某个特定版本的,诸如directsdk 9.0b等等。

开始我也是安装的DXsdk 9.0b那个版本,可是有些程序可以执行,有些程序在链接时就会发生错误,没办法只有重装,个人经验是DXSDK Jun10与VC6.0可很好兼容。

至于DXSDK Jun10只需下载解压安装到你指定的文件夹即可。

下面是完成以上两步后的工作。

打开VC6.0,在Tools options中的Directories下,Show directories for 中选择include files,在其下的Directories中添加你所安装的SDK的Include路径下面是我自己的:将下面路径复制粘贴到上文提到的Directories出即可,并最好将其放置于最上部:再在Show directories for中选Library files,在其下的Directories中添加你所安装SDK的Lib文件路径:将下面的路径复制粘贴到上文提到出即可:最好也将其放置于最上方。

下面就可以编程了,首先新建一个工程file→new→projects,这里选WIN 32 ApplicationProject name可随便命名,Location可自己指定一个文件夹ok 选择an empty project→finish→ok:下面加入库文件,project→settings→link→Object/library modules:下面加入d3d9.lib d3dx9.lib winmm.lib 三个库文件→ok:下面以画一个三角形为例:在source file上点右键选择Add Files to Folder…加入.cpp文件Header fils中加入.h文件:选择一个Source Files中的文件,编译运行即可:至于结束这个窗口用命令管理器即可:control+alt+delete注意每次新建一个工程时,都要手动加入d3d9.lib d3dx9.lib winmm.lib库文件。

图形设备接口DirectX 图形接口指南

图形设备接口DirectX 图形接口指南

图形设备接口:DirectX 图形接口指南疯狂代码 / ĵ:http://GameDevelopment/Article35957.html译者申明:这些指南是我在阅读 DirectX8.1 SDK 中逐步翻译出来对于初次接触 DirectX Graphics 编程者而言这应该是很好上手资料其实本人就是从这些指南开始深入 Direct3D8.1 ;由于这是本人第次翻译英文材料言语不通词不达意的处定很多些术语也译得很勉强请见谅此外需要转载此文者请保留以下部分:-----------------------------------------------------------------------DirectX图形接口指南 译者:In355Hz 电子邮箱: In355Hz@-----------------------------------------------------------------------DirectX 图形接口指南:(应用于 DirectX 8.1 版 C/C 编程)本区域指南将介绍说明如何在 C/C 中使用 Microsoft Direct3D 和 Direct3DX 完成些普通工作这些工作总是被分解成若干个必要步骤在某些情况下为了使表达更清楚些步骤还被细分成几个子步骤本区域提供指南有:· 指南:创建设备· 指南 2:演示顶点· 指南 3:使用矩阵· 指南 4:创建和使用光源· 指南 5:使用纹理映射· 指南 6:使用Mesh模型提示:指南中出现举例代码来自于每个指南具体提供路径里源文件这些指南中源代码是用 C 写成如果使用C编译器你必须适当改变这些文件使它们能够编译通过最少你需要加入vtable 然后用它引用接口包含在举例代码中些注解可能和来自 Microsoft Platform Software Development Kit (SDK) 中源代码区别这些改变仅仅为了简化表述并且只限于注解中这样能够防止举例行为被改变指南:创建设备为了使用 Microsoft Direct3D你首先需要创建个应用窗口并紧接着创建和化 Direct3D 对象你应该使用这些对象提供 COM 接口来操纵它们以及创建描绘个场景所必需其它对象本指南包含 CreateDevice 举例将例示并介绍说明以下几个工作:创建 Direct3D 设备并且绘制个简单蓝色屏幕这个指南使用以下步骤:化 Direct3D绘制场景以及最后清理和关闭·步骤:创建个窗口·步骤 2:化 Direct3D·步骤 3:处理系统消息·步骤 4:绘制和显示场景·步骤 5:关闭和清除注意:CreateDevice 举例路径在:(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut01_CreateDevice.步骤:创建个窗口任何 Microsoft Windows 执行中必须要作第件事就是创建个应用窗口并将其显示给用户为做到这点CreateDevice 例程将首先实现它 WinMain 以下举例代码完成了窗口化INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ){// Register the window .WNDCLASSEX wc = { (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,GetDesktopWindow, NULL, wc.hInstance, NULL );前述举例代码是标准 Windows 编程例子开始时定义和注册了个窗口类名为 "D3D Tutorial"类注册以后举例代码使用已注册类创建了个基本顶层(top-level)窗口客户区域为 300 像素宽300 像数高这个窗口没有菜单或子窗口举例使用了 WS_OVERLAPPEDWINDOW 属性创建个包括最大化最小化以及关闭按钮普通窗口(如果该例程将运行在全屏模式下首选窗口属性应该是WS_EX_TOPMOST它指定创建窗口置于并且保持在所有非最高(non-topmost)窗口的前甚至在窗口失活情况下)旦窗口创建完成例代码标准 Microsoft Win32 显示和更新窗口在应用窗口准备好以后你就能开始设置具体 Microsoft Direct3D 对象了请见:步骤 2:化 Direct3D步骤 2:化 Direct3DCreateDevice 举例在 WinMain 中创建窗口的后该定义 InitD3D 完成 Microsoft Direct3D 化过程在创建窗口的后已经准备好化你将用来绘制场景 Direct3D 对象了这个过程包括创建个 Direct3D 对象设置Present Parameters以及最后创建 Direct3D 设备创建完 Direct3D 对象的后你可以立即使用 IDirect3D8::CreateDevice 思路方法创建 Direct3D 设备你也能够使用 Direct3D 对象枚举设备类型模式以及其他东西这些工作代码段应位于使用 Direct3DCreate8 创建Direct3D 对象的后( NULL ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )E_FAIL;传递给 Direct3DCreate8 唯参数应该始终是 D3D_SDK_VERSION它告诉 Direct3D 当前使用头文件信息无论如何头文件或者其他变化将导致这个值增加并强制使用该值应用重新编译如果此版本不匹配 Direct3DCreate8将失败下个步骤是使用 IDirect3D8::GetAdapterDisplayMode 接口找到当前显示模式代码如下:D3DDISPLAYMODE d3ddm;( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )E_FAIL;D3DDISPLAYMODE 结构中 Format 变量将被用于创建 Direct3D 设备如果是运行于窗口模式下话Format 参数通常用来创建个和适配器当前模式相匹配后背缓冲 (Back buffer)在给 D3DPRESENT_PARAMETERS 各参数赋值时你必须指定你应用在3D下工作方式本 CreateDevice 例程设置D3DPRESENT_PARAMETERS结构中 Windowed 为 TRUESwapEffect 为D3DSWAPEFFECT_DISCARDBackBufferFormat 为 d3ddm.FormatD3DPRESENT_PARAMETERS d3dpp;ZeroMemory( &d3dpp, (d3dpp) );d3dpp.Windowed = TRUE;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat = d3ddm.Format;最后步是利用 IDirect3D8::CreateDevice 创建 Direct3D 设备代码如下:( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, &g_pd3dDevice ) ) )前述代码使用 D3DADAPTER_DEFAULT 标志创建了个使用省缺适配器设备在非常多数情况下系统只有个适配器除非它安装了多个图形加速卡通过把 DeviceType 参数设成 D3DDEVTYPE_HAL表示你希望获得个实际硬件设备 (hardware device) 而不是软件Software虚拟设备 (software device)举例代码还使用D3DCREATE_SOFTWARE_VERTEXPROCESSING 标志通知系统使用软件Software顶点处理 (software vertex processing)注意如果你指定 D3DCREATE_HARDWARE_VERTEXPROCESSING 标志通知系统使用硬件顶点处理 (hardware vertex processing),你可以在支持硬件顶点处理图形加速卡上得到大幅度性能提升现在 Direct3D 已经化完毕下步是确保你具有个机制用来来处理系统消息见下文:步骤 3:处理系统消息步骤 3:处理系统消息完成创建窗口以及化 Direct3D 以后你已经准备好绘制场景 (Render scene)大多数情况下Microsoft Windows 在它们消息循环里监视系统消息并且在队列里没有消息时绘制画面帧然而CreateDevice 例程仅仅在等到个WM_PAINT出现在队列里时才通知应用重绘窗口所有部分// The message loop.MSG msg;while( GetMessage( &msg, NULL, 0, 0 ) ){TranslateMessage( &msg );DispatchMessage( &msg );}当每循环次DispatchMessage MsgProc后者负责处理队列里消息当 WM_PAINT 消息进队时该自身定义Render它将负责重绘窗口然后 Microsoft Win32 ValidateRect 执行并将整个客户区域设为有效消息处理例代码如下:LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {switch( msg ){WM_DESTROY:PostQuitMessage( 0 );0;WM_PAINT:Render;ValidateRect( hWnd, NULL );0;}DefWindowProc( hWnd, msg, wParam, lParam );}现在应用处理了系统消息接着步是绘制显示见:步骤 4:绘制和显示场景步骤 4:绘制和显示场景为了描绘和显示需要场景本例程在这步把后背缓冲 (back buffer) 填充为蓝色然后将此后背缓冲内容传给前景缓冲 (front buffer), 并且将前景缓冲提交至屏幕清除表面应 IDirect3DDevice8::Clear :// Clear the back buffer to a blue colorg_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );Clear 接受前两个参数通知 Microsoft Direct3D 被清除矩形区域基址和大小该矩形区域描述了绘制目标表面(render target surface) 里需要清除区域在大多数情况下只使用单个矩形覆盖整个绘制目标表面这样你只需设置第个参数为 0 及第 2个参数为 NULL第3个参数将决定思路方法行为你可以通过设置特定标志用来清除绘制目标表面 (render target surface)关联Z缓冲 (associated depth buffer)模版缓冲 (stencil buffer)以及任意这 3者混合本指南不使用Z缓冲所以仅仅使用了 D3DCLEAR_TARGET 标志最后 3个参数分别用于设置对应绘制目标表面、Z缓冲和模版缓冲清除填充值(reflect clearing values)该 CreateDevice 例程将绘制目表面清除填充色设置为蓝色(D3DCOLOR_XRGB(0,0,255)由于相应标志没有设置最后两个参数被 Clear 忽略在清除了视口 (viewport) 的后CreateDevice 例程告知 Direct3D 绘图将要开始然后立即通知这次绘制完成见以下代码段:// Begin the scene.g_pd3dDevice->BeginScene;// Rendering of scene objects happens here.// End the scene.g_pd3dDevice->EndScene;当绘制开始或完成时IDirect3DDevice8::BeginScene 和 IDirect3DDevice8::EndScene 将用信号通知系统你只能在这两的间其它绘图即使绘图失败你也应该在重新 BeginScene 的前 EndScene绘制完的后 IDirect3DDevice8::Present显示该场景:g_pd3dDevice->Present( NULL, NULL, NULL, NULL );Present 接受前两个参数是原始矩形和目标矩形在这步例程设置这两个参数为 NULL 并把整个后备缓冲提交到前景缓冲第 3个参数用于设置该次提交目标窗口这个参数被设为 NULL实际使用窗口是D3DPRESENT_PARAMETERS hWndDeviceWindow 成员第 4个是 DirtyRegion 参数在绝大多数情况下应该设为 NULL本指南最终步骤是关闭应用见:步骤 5:关闭和清除步骤 5:关闭和清除在执行若干时刻你应用必须立即关闭关闭个 Direct3D 应用中不只是意味着你必须销毁窗口并且你还要释放中使用过任何 Direct3D 对象并且无效化它们指针当收到个 WM_DESTROY 消息时CreateDevice 例程通过个本地定义 Cleanup 来处理这些工作VOID Cleanup{( g_pd3dDevice != NULL)g_pd3dDevice->Release;( g_pD3D != NULL)g_pD3D->Release;}上述对每个对象 IUnknown::Release 思路方法来释放它们自身由于DirectX遵循 COM 规则大多数对象当其引用计数降为0时DirectX会自动从内存中释放这个对象对于其他关闭情况可能发生在平常执行中——比如用户改变了桌面参数或色深——此时你可能需要撤销和重建使用中 Microsoft Direct3D 对象因此个好主意就是将你释放代码放到起以便能在需要时随时它本指南已经介绍说明了如何创建个设备指南 2:演示顶点(Render Vertex) 将告诉你如何用顶点(Vertex)创建几何形体指南 2:演示顶点(Render Vertex)Microsoft Direct3D 写应用使用顶点(Vertex)构造几何物体每个 3维空间 (3D) 场景包括个或几个这样几何物体Vertices 例程构造简单物体个 3角形并且将它绘制到显示屏上本指南介绍说明如何采用以下步骤从顶点构造个 3角形:·第步:定义个自定义顶点类型·第 2步:设置顶点缓冲·第 3步:绘制至显示屏注意:Vertices 举例路径为:(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut02_Vertices.Vertices 举例代码和 CreateDevice 代码大部分相同本“演示顶点(Render Vertex)”指南仅仅关注于那些独特有关顶点代码而不包括化 Direct3D处理 Microsoft Windows 消息绘图和清理等工作如要得到有关这些任务信息请参考 指南:创建设备第步:定义个自定义顶点类型Vertices 例程使用 3个顶点构造个 2D 3角形这里提及了顶点缓冲概念这是用于保存和演示大量顶点 Microsoft Direct3D 对象通过指定个自定义顶点结构和相应可变向量格式 (FVF)顶点能够采用很多思路方法定义本Vertices 例程使用顶点格式定义于以下代码片断中struct CUSTOMVERTEX{FLOAT x, y, z, rhw; // The transformed position for the vertex.DWORD color; // The vertex color.};上面结构体介绍说明了自定义顶点类型格式下步是定义 FVF 以描述顶点缓冲区中顶点内容以下代码片段定义了个 FVF 并符合此上建立自定义顶点类型# D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)可变顶点格式标记描述了使用中自定义顶点类型前述举例代码使用了 D3DFVF_XYZRHW 和D3DFVF_DIFFUSE 标志这将告诉顶点缓冲自定义顶点类型包含组转换过点坐标并紧跟着个颜色参数现在自定义向量格式和 FVF 已经被指定好了下步将使用顶点填充顶点缓冲区请参看:第 2步:设置顶点缓冲注意:Vertices 例程中顶点是转换过用另句话说它们已经在 2D 窗口坐标系下这意味着座标点 (0,0) 位于左上角且正 x 半轴向右正 y 半轴向下这些顶点同样也是光照过这介绍说明它们着色不通过 Direct3D 照明而由它们自己颜色代替第 2步:设置顶点缓冲现在自定义顶点格式已经完成化顶点时候到了 Vertices 例程创建了必需 Microsoft Direct3D 对象的后本内部定义 InitVB 进行这个工作以下代码段将化 3个自定义顶点值CUSTOMVERTEX g_Vertices ={{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },};前述代码片段采用 3角形 3个顶点填充 3个Vertex并指定了每个顶点散射光颜色第个顶点位于 (150,50) 散射红色 (0xffff0000)第 2个顶点位于 (250,250) 为绿色 (0xff00ff00)第 3点位于 (50,250) 并散射蓝绿色(0xff00ffff)每点都具有相同 0.5 Z值及 1.0 RHW 参数有关这些矢量格式其它信息见 SDK: Transformed and Lit Vertices下步将 IDirect3DDevice8::CreateVertexBuffer 创建顶点缓冲区如以下代码段所示:( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*(CUSTOMVERTEX),0 /* Usage */, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &g_pVB ) ) )E_FAIL;CreateVertexBuffer 头两个参数告诉 Direct3D 新顶点缓冲区预计大小和使用方法紧跟两个参数指定新缓冲区矢量格式及存储位置这里向量格式是 D3DFVF_CUSTOMVERTEX就是例程先前定义 FVF 值D3DPOOL_DEFAULT 标记告诉 Direct3D 在最合适位置创建此顶点缓冲区最后个参数返回创建完成顶点缓冲区对象地址创建了顶点缓冲区的后如以下代码段所示开始采用自定义格式顶点填充缓冲区中数据VOID* pVertices;( FAILED( g_pVB->Lock( 0, (g_Vertices), (BYTE**)&pVertices, 0 ) ) )E_FAIL;memcpy( pVertices, g_Vertices, (g_Vertices) );g_pVB->Unlock;首先 IDirect3DVertexBuffer8::Lock 锁定顶点缓冲区第个参数是锁定顶点数据偏移量按字节计算第 2个参数是需锁定顶点数据长度同样按字节计算第 3个参数是个 BYTE 类型指针地址用于返回指向顶点数据地址第 4个参数告知顶点缓冲区如何锁定数据通过使用 memcpy顶点被复制到顶点缓冲区里将顶点放入缓冲区的后次 IDirect3DVertexBuffer8::Unlock 以解锁顶点缓冲区这个锁定——解锁机制是必需正在使用顶点缓冲区可能位于设备内存中现在顶点缓冲区已经填入顶点绘制到显示时候到了见描述:第 3步:绘制至显示屏第 3步:绘制至显示屏现在缓冲区已经填入顶点现在需要把它绘制到显示屏上在绘制到屏幕的前先将背景清除为蓝色并 BeginSceneg_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L );g_pd3dDevice->BeginScene;从顶点缓冲区绘制顶点数据需要些步骤首先你需要设置流数据源;在当前情况下使用第 0 个流 流数据源是通过IDirect3DDevice8::SetStreamSource 设置g_pd3dDevice->SetStreamSource( 0, g_pVB, (CUSTOMVERTEX) );SetStreamSource 第个参数告诉 Microsoft Direct3D 设备设置数据流索引第 2个参数是绑定在该数据流上顶点缓冲区第 3个参数是数据单元大小用字节数表示在上面举例代码中将使用CUSTOMVERTEX 大小作为数据单元大小下步通过 IDirect3DDevice8::SetVertexShader 使 Direct3D 了解使用中顶点处理器(Vertex Shader)就整体而言自定义顶点处理器是种高级话题但是在绝大多数情况下顶点处理器仅仅等于 FVF 代码这能够让 Direct3D 知道处理中顶点类型以下代码片段将FVF设置为当前顶点处理器:g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );SetVertexShader 唯参数是当前设置顶点处理器句柄这个参数值可以是从IDirect3DDevice8::CreateVertexShader 返回句柄或者是 FVF 代码在这儿使用参数是定义为D3DFVF_CUSTOMVERTEX FVF 代码有关顶点处理器更多信息请见 SDK: Vertex Shader 章下步使用 IDirect3DDevice8::DrawPrimitive 绘制顶点缓冲区中顶点见以下代码片段:g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );DrawPrimitive 接受第个参数是个标记它通知 Direct3D 绘制哪种类型物件(Primitive)本例程使用D3DPT_TRIANGLELIST 标记指定为 3角形序列第 2个参数是第个顶点索引第 3个参数通知绘制物件数目本例子只画个 3角形这个值为 1有关区别种类物件更多信息可见 SDK: 3-D Primitive最后步是结束场景并立即将后背缓冲提交为前景缓冲这些写在以下代码片段中:g_pd3dDevice->EndScene;g_pd3dDevice->Present( NULL, NULL, NULL, NULL );当后背缓冲被提交为前景缓冲后客户窗口将显示出个 3个点颜色各异 3角形本指南已经指导你如何使用顶点构造几何外形了指南 3:使用矩阵 将介绍矩阵概念以及如何使用它们指南 3:使用矩阵本指南介绍矩阵概念及演示如何使用它们Vertices 例程通过呈递2D顶点画出了个 3角形然而在这个指南中你将通过顶点变换在 3-D 环境下工作矩阵和变换也同样用于设置摄影头和视口(Viewport)在 Matrices 例程呈递几何物体的前它自定义 SetupMatrices 创建并设置用于演示 3-D 3角形矩阵变换作为代表 3种类型变换同时被设置到个 3-D 场景创建这些典型变换步骤如下表:·第步:定义世界变换矩阵·第 2步:定义观察变换矩阵·第 3步:定义映射变换矩阵注意:Matrices 举例路径为:(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut03_Matrices.创建这 3种变换顺序并不影响场景元素输出无论如何Direct3D 都使用以下顺序依次将矩阵作用于场景:(1) 世界(2) 观察(3) 映射Matrices 工程举例代码几乎和 Vertices 工程代码相同该“使用矩阵”指南仅仅关注那些有关矩阵独特代码而不重复化 Direct3D处理 Microsoft Windows 消息演示以及清除有关这些工作信息请见 指南:创建设备本指南使用自定义顶点格式和单个顶点缓冲区呈递几何模型有关更多有关选择自定义顶点类型以及执行顶点缓冲区信息见 指南 2:演示顶点第步:定义世界变换矩阵(World Transformation Matrix)世界变换矩阵定义了怎样转换、缩放、以及旋转 3-D 模拟空间中几何物体以下代码片段为 Microsoft Direct3D 设备设置当前世界变换并且使 3角形绕 y-轴 旋转D3DXMATRIX matWorld;D3DXMatrixRotationY( &matWorld, timeGetTime/150.0f );g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );第步是通过 D3DXMatrixRotationY 使 3角形绕 y-轴 旋转第个参数是指向 D3DMATRIX 结构指针用于返回操作结果第 2个参数是以弧度表示旋转角度下步是 IDirect3DDevice8::SetTransform 给 Direct3D 设备设置世界变换SetTransform 接受第个参数通知Direct3D 被设置是哪个转换这个例子用 D3DTS_WORLD 宏指定被设置是世界变换第 2个参数是个指向被设为当前变换的矩阵指针有关世界变换更多信息见:SDK: World Transformation定义完场景世界变换后你可以准备观察变换矩阵了再次请注意:定义任变换顺序不是关键无论如何Direct3D 采用以下顺序将这些矩阵作用于场景:(1) 世界(2) 观察(3) 映射定义观察变换矩阵请参看 第 2步:定义观察变换矩阵第 2步:定义观察变换矩阵(View Transformation Matrix)观察变换矩阵定义了观察位置和旋转角度此观察矩阵就相当于场景摄影机以下代码片段创建了个观察变换矩阵并将其设置为 Microsoft Direct3D 设备当前观察矩阵D3DXMATRIX matView;D3DXMatrixLookAtLH( &matView, &D3DXVECTOR3( 0.0f, 3.0f,-5.0f ),&D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );第步是通过 D3DXMatrixLookAtLH 定义观察矩阵第个参数是个指向 D3DXMATRIX 结构指针用来接受操作结果第 2、 3、 4个参数定义了观察点、注视点、以及方向“上”这儿设置观察点为沿 Z-轴 反方向 5 单位再往上3 单位注视点为原点以及作为“上”方向为 Y-轴下步是 IDirect3DDevice8::SetTransform 给 Direct3D 设备设置观察矩阵SetTransform 接受第个参数通知Direct3D 哪个变换将要被设置该例程使用 D3DTS_VIEW 标记指定为观察矩阵第 2个参数是个指向矩阵指针它被设为当前变换有关观察矩阵更多信息见:SDK: View Transformation定义了场景世界变换后你可以开始准备映射变换矩阵了再次提醒定义每变换顺序不是关键性无论如何Direct3D 总是采用以下顺序将矩阵应用于场景:(1) 世界(2) 观察(3) 映射定义映射变换矩阵工作被描述在 第 3步:定义映射变换矩阵第 3步:定义映射变换矩阵(Projection Transformation Matrix)映射变换矩阵定义了将 3-D 观察空间转换为 2-D 视口空间几何学思路方法以下代码片段创建映射变换矩阵并将其设为 Microsoft Direct3D 设备当前映射变换D3DXMATRIX matProj;D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );第步是 D3DXMatrixPerspectiveFovLH 设置映射矩阵第个参数是个指向 D3DXMATRIX 结构用于接受操作结果第 2个参数定义视场它介绍说明物体如何随着距离而缩小个典型视场是 1/4 π就像这个例子使用样第 3个参数定义了屏幕纵横比本举例采用典型纵横比 1第 4和第 5个参数定义最近和最远剪切平面这是用于确定位于何种距离的外几何物体无需再绘制本 Matrices 举例设置它最近剪切平面为 1最远剪切平面为 100下步是 IDirect3DDevice8::SetTransfrom 对 Direct3D 应用变换SetTransfrom 接受第个参数通知 Direct3D 何种变换被设置本例程使用 D3DTS_PROJECTION 标志指定映射变换将被设置第 2个参数是个指向矩阵指针它将被设置为当前变换有关映射变换更多信息参见:“映射变换”本指南已经提示你如何使用矩阵指南 4:创建和使用光源 将揭示如何在你场景中添加光源以增加真实性指南 4:创建和使用光源Microsoft Direc3D 光照系统给 3-D 物体提供更多真实性当使用它时每个场景中几何对象将被照亮基于它们位置和使用光源类型这个指南例程将介绍有关光照和材质主题本指南包含以下步骤用于创建材质和光照:·第步:创始化场景几何·第 2步:设置材置和光照注意:Lights 举例路径为:(SDK root)\\Samples\\Multimedia\\Direct3D\\Tutorials\\Tut04_Lights.注意:Lights 例程中代码和 Matrices 例程代码几乎完全样“创建和使用光源”指南仅仅关注于有关创建和使用光照独特代码而并不重复有关设置 Direct3D处理 Microsoft Windows 消息绘制或者清理内容有关这些任务其他信息见:指南:创建设备本指南使用自定义顶点和顶点缓冲区呈递几何形体有关选择个自定义顶点格式并执行顶点缓冲更多信息见:指南2:演示顶点本指南采用矩阵变换几何对象有关矩阵和变换更多信息参见:指南 3:使用矩阵第步:创始化场景几何使用光照个前提是每个表面都应该有法向量为此Lights 例程使用个稍微区别自定义顶点格式新自定义顶点格式具有个 3-D 位置坐标和个表面法向量这个表面法向量被用于 Microsoft Direct3D 光照计算核心struct CUSTOMVERTEX{D3DXVECTOR3 position; // The 3-D position for the vertex.D3DXVECTOR3 normal; // The surface normal for the vertex.};// Custom FVF.# D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)现在适当矢量格式定义好了Lights 例程 InitGeometry个自定义以创建个圆柱体最初步骤是创建个顶点缓冲区并用它保存这个圆柱体各点如以下例代码所示:// Create the vertex buffer.( FAILED( g_pd3dDevice->CreateVertexBuffer( 50*2*(CUSTOMVERTEX),0 /* Usage */, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &g_pVB ) ) )E_FAIL;下步是使用圆柱体顶点填充顶点缓冲区注意下面举例代码每个点都被定义了个位置和个法向量for( DWORD i=0; i<50; i ){FLOAT theta = (2*D3DX_PI*i)/(50-1);pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );pVertices[2*i+0].normal = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );pVertices[2*i+1].normal = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );}在前述例程使用圆柱体顶点填充了顶点缓冲区的后这个顶点缓冲区已经准备好用于呈递了但是首先这个场景材质和光照必须在绘制圆柱体的前被设置这些描述在 第 2步:设置材质和光照第 2步:设置材质和光照为了在 Microsoft Direct3D 中使用光照你必须创建个或多个光源为了确定个几何物体放射何种颜色光线材质必须被创建于绘制几何对象在绘制这个场景的前Lights 例程 SetupLights个自定义来设置材质和个方向性光源创建种材质材质被定义为当束光照到几何物体表面后反射出颜色以下代码片段使用 D3DMATERIAL8 结构来创建个黄色材质D3DMATERIAL8 mtrl;ZeroMemory( &mtrl, (D3DMATERIAL8) );mtrl.Dfuse.r = mtrl.Ambient.r = 1.0f;mtrl.Dfuse.g = mtrl.Ambient.g = 1.0f;mtrl.Dfuse.b = mtrl.Ambient.b = 0.0f;mtrl.Dfuse.a = mtrl.Ambient.a = 1.0f;g_pd3dDevice->SetMaterial( &mtrl );这个材质漫射光颜色和环境光颜色都被设为黄色对 IDirect3DDevice8::SetMaterial 将应用此材质到用于绘制场景 Microsoft Direct3D 设备SetMaterial 接受唯参数是设置材质指针在这个完成以后每个物件都将使用这个材质绘制直到另次对 SetMaterial 指定了个区别材质为止现在材质已经被应用到场景下个步骤是创建光源创建个光源Microsoft Direct3D 里有 3种可用光源:点光源方向形光源和聚光灯光源本举例代码创建个方向形光源它向个方向发光并且不停变换发光方向下列代码片段使用 D3DLIGHT8 结构创建个方向性光源D3DXVECTOR3 vecDir;D3DLIGHT8 light;ZeroMemory( &light, (D3DLIGHT8) );light.Type = D3DLIGHT_DIRECTIONAL;下列代码片设置光源漫射光为白色light.Dfuse.r = 1.0f;light.Dfuse.g = 1.0f;light.Dfuse.b = 1.0f;以下代码片在个环内旋转光源方向vecDir = D3DXVECTOR3(cosf(timeGetTime/360.0f),0.0f,sinf(timeGetTime/360.0f) );D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );对 D3DXVec3Normalize 将归化方向矢量并化光源方向可以设置个范围告诉 Direct3D 此光源能影响多远距离这个成员参数对方向性光源无效以下代码片指定此光源范围为 1000 单位light.Range = 1000.0f;下面代码片将这个光源分配到当前 Direct3D 设备通过 IDirect3DDevice8::SetLightg_pd3dDevice->SetLight( 0, &light );SetLight 接受第个参数是此光源被分配索引号注意如果在此索引已存在个光源它将被新光源覆盖第 2个参数是个指向新定义光源数据结构指针本 Lights 例程设置这个光源位于 0 号索引下列代码片激活这个光源通过 IDirect3DDevice8::LightEnableg_pd3dDevice->LightEnable( 0, TRUE);LightEnable 接受第个参数是激活光源索引第 2个参数是个布尔量通知此光源是开 (TRUE) 还是闭 (FALSE)在上面例程中索引 0 上光源被打开以下代码片通知 Direct3D 呈递此光源通过 IDirect3DDevice8::SetRenderStateg_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );SetRenderState 接受头两个参数是哪个设备状态变量被改写以及写入何种值本例程设置 D3DRS_LIGHTING 设备变量为 TRUE这将使设备能够演示光照效果本例程最后步是通过再次 SetRenderState 打开环境照明光g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0x00202020 );当前代码段设置 D3DRS_AMBIENT 设备变量为种浅灰色 (0x00202020)环境照明将使用所给颜色照亮所有物体有关照明及材质更多信息参见 SDK: Lights and Materials本例程向你介绍说明了如何使用照明和材质指南 5:使用纹理映射 将向你介绍说明如何将纹理添加到物体表面上指南 5:使用纹理映射尽管光照和材质大大增加了场景真实感但没有比在表面上添加纹理更能增加真实感了纹理能够被想象为层紧紧包装在表面贴纸你能在个立方体上放置层木质纹理使它看起来就象用木头制成样本 Texture 例程将在 指南 4:创建和使用光照 中构造圆柱上添加幅类似香蕉纹理此指南介绍内容包括如何载入纹理设置纹理和呈递带有纹理物体本指南采用以下步骤实现纹理:·第步:定义个定制顶点格式·第 2步:化屏幕几何·第 3步:演示场景。

DIRECTX 9 SDK 安装设定教学

DIRECTX 9 SDK 安装设定教学

DIRECTX 9 SDK 安裝設定教學V1.1下載DirectX Software Development Kit 1.下載連結DIRECTX 9 march SDK2.執行安裝安裝過程會有是否要新的directx的訊息通知,自行選擇在此我選全部都安裝安裝好便可以在工具列找到,在此是WIN 7的示範畫面3.開啟VISUAL STUDIO 2008(2005)這邊示範的是2008 英文版本4.Add Include Directory(包含DXUT)開啟tool->optionsProjects and solution->VC++ Directories選Include filesAdd Include Directory-----------------C:\Program Files\Microsoft DirectX SDK (March 2009)\IncludeC:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Opt -----------------5.Add Library Directory開啟DIRECTX 安裝目錄C:\Program Files\Microsoft DirectX SDK (March2009)\Samples\C++\DXUT進入CORE目錄->選擇DXUTCore_2008.sln(請依VS版本選擇)選擇Debug 接著build solution產生C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core\Debug(也可以多弄Release)接著進入Optional目錄進行一樣動作產生C:\Program Files\Microsoft DirectX SDK (March2009)\Samples\C++\DXUT\Optional\Debug(也可以多弄Release)再到tool->options->Projects and solution->VC++ DirectoriesAdd Library Directory-----------------C:\Program Files\Microsoft DirectX SDK (March 2009)\Lib\x86C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Core\Debug C:\Program Files\Microsoft DirectX SDK (March 2009)\Samples\C++\DXUT\Opt\Debug-----------------6.到這邊之後就可以開始進入DIRECTX的世界囉~進sample Browser 可以下載範例來練習。

DirectX9 NVSDK QuerySample 用户指南说明书

DirectX9 NVSDK QuerySample 用户指南说明书

User Guide QuerySampleIntroduction What Is theQuerySample?The NVSDK QuerySample shows how to use the various query types exposed inDirectX9. DirectX9 supports the following queries (see also DirectX SDKdocumentation, ‘Queries’):Vertex Cache Size (D3DQUERYTYPE_VCACHE)Resource Stats (D3DQUERYTYPE_RESOURCEMANAGER)Vertex Stats (D3DQUERYTYPE_VERTEXSTATS)Event (D3DQUERYTYPE_EVENT)Occlusion (D3DQUERYTYPE_OCCLUSION)Timstamp (D3DQUERYTYPE_TIMESTAMP)Timestamp Disjoint (D3DQUERYTYPE_TIMESTAMPDISJOINT)Timestamp Frequency (D3DQUERYTYPE_TIMESTAMPFREQ)Pipeline Timings (D3DQUERYTYPE_PIPELINETIMINGS)Interface Timings (D3DQUERYTYPE_INTERFACETIMINGS)Vertex Timings (D3DQUERYTYPE_VERTEXTIMINGS)Pixel Timings (D3DQUERYTYPE_PIXELTIMINGS)Cache Utilization (D3DQUERYTYPE_CACHEUTILIZATION)This document discusses how to use the sample and then goes into detail whatinformation the different query types provide.Using this Sample After starting the QuerySample, it displays on the left side of the screen a slowly rotating pinwheel. On the right side of the screen it shows the results of issuing the various query types. See Figure 1.Figure 1. QuerySample on Start-upThe sample provides a standard set of UI elements for choosing rendering and display parameters. Table 1 summarizes the keyboard shortcuts to these elements.The “Render Load” slider in the upper right corner increases the render load of thescene. At the left most settings the polygons in the pinwheel are rendered once. Atthe right most setting the same draw call is repeated 20,001 times. Since the z-test isset to ‘less’ all pixels in the pinwheel are drawn exactly once on-screen, even withthe slider at the right most setting.Right-click dragging the mouse rotates the pinwheel; the mouse wheel zooms thecamera in and out.Table 1. Keyboard CommandsDescriptionKeyF1 Toggle help textF2 Change DeviceF3 Toggle RefH Toggle UIAlt + Enter Toggle Full screen modeEsc ExitKnown BugsNone.What this Sample Shows This section describes in detail what the various queries measure and what isnecessary to access a query’s data. The sample comes with full source code andhence serves as a working example as how to use and access each of the query’sdata.Vertex Cache SizeThe vertex cache query returns hints as to how to best optimize a mesh’s vertexlayout for the GPU’s PostTnL cache. It returns the optimization method to use(longest strips versus vertex cache usage), and the size of the vertex cache.All current NVIDIA GPUs prefer the vertex cache usage and have a PostTnL cachethat is a strict FIFO. The cache size is 16 vertices for GeForce 1, GeForce 2, andGeForce 4 MX architectures and 24 vertices in all GeForce 3, GeForce 4, GeForceFX, and GeForce 6 architectures. For more information, see also the NVIDIANVTriStrip library: /object/nvtristrip_library.html.Current NVIDIA drivers (71.xx and earlier) do not support the vertex cache sizequery.Resource StatsThe resource stats query provides detailed information for all Direct3D resourcescurrently allocated by your application. It provides statistics for all allocated 2D,volume, and cubemap textures, vertex and index buffers, as well as surfaces.For each of these resource types it shows whether that resource is thrashing, howmany total bytes are allocated, etc. See D3DRESOURCESTATS Structure in theDirectX SDK manual for details.The resource stats query is only supported when running with the DirectX DebugRuntime. The query sample provides source code that shows how to query andaccess the resulting data.Vertex StatsThe vertex stats query shows how many triangles are being rendered and how manyof these rendered triangles are generated due to clipping. Moving the render loadslider therefore changes the displayed vertex stats results.Like the resource stats query above, the vertex stats query is only available whenrunning with the DirectX Debug Runtime.EventAn event query inserts a token into the driver’s command stream. The driversignals the query as completed as soon as the GPU consumes it. Event queries aresupported across all NVIDIA architectures since the release of DirectX 9.Event queries are useful to determine (and hence potentially restrict) how muchrendering data the driver is currently buffering.OcclusionAn occlusion query returns how many pixels pass the z-test during the time thequery is outstanding. Changing the render load slider in the QuerySample thereforedoes not change the number of visible pixels, as only the first draw call’s pixels passthe z-test (see above). Rotating the pinwheel, however, does change the number ofpixels reported visible, since fewer (or more) pixels are drawn.All GeForce 3, GeForce 4, GeForce FX, and GeForce 6 architectures supportocclusion queries.Occlusion queries determine whether an object is visible on-screen, and hence areuseful in culling algorithms. Note that an occlusion query typically has high latency,i.e., it takes a non-trivial amount of time (measured on the order of frames) betweenissuing an occlusion query and receiving its result.TimestampA timestamp query acts very much like an event query (see above). Unlike an eventquery, however, it also records at what time the GPU consumes the timestamptoken.Timestamp tokens are therefore useful in determining relative timings of how long ittook the GPU to consume a sequence of tokens without requiring the CPU toconstantly poll query states.Note, however, that the timestamp tokens operate using their own timer that doesnot directly relate to wall-time. Attempting to relate timestamp queries to wall-timetypically results in time-drifting – the QuerySample source code has commented outcode that shows that effect. See also the source code of the QuerySample for howto decode the timestamp data.NVIDIA drivers 71.xx and later support timestamp queries across on GeForce 6and earlier architectures.Timestamp DisjointThe timestamp disjoint query lets developers monitor whether the timestampquery’s (see above) counter frequency has changed. Counter frequencies maychange, for example, when running on a laptop that switches into battery savingsmode.NVIDIA drivers 71.xx and later support timestamp disjoint queries across GeForce6 and earlier architectures.Timestamp FrequencyThe timestamp frequency query provides the frequency at which the timestampquery’s (see above) counter operates. The QuerySample source code shows how touse the result of the timestamp frequency query to convert the timings provided bya timestamp query into milliseconds.NVIDIA drivers 71.xx and later support timestamp disjoint queries across GeForce6 and earlier architectures.Pipeline TimingsThe pipeline timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Interface TimingsThe interface timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Vertex TimingsThe vertex timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Pixel TimingsThe pixel timings query provides GPU utilization and timing data. CurrentNVIDIA drivers (71.xx and earlier) do not support this type of query.Cache UtilizationThe cache utilization query provides GPU vertex and texture cache hit rates.Current NVIDIA drivers (71.xx and earlier) do not support this type of query.NoticeALL NVIDIA DESIGN SPECIFICATIONS, REFERENCE BOARDS, FILES, DRAWINGS, DIAGNOSTICS, LISTS, AND OTHER DOCUMENTS (TOGETHER AND SEPARATELY, “MATERIALS”) ARE BEING PROVIDED “AS IS." NVIDIA MAKES NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.Information furnished is believed to be accurate and reliable. However, NVIDIA Corporation assumes no responsibility for the consequences of use of such information or for any infringement of patents or other rights of third parties that may result from its use. No license is granted by implication or otherwise under any patent or patent rights of NVIDIA Corporation. Specifications mentioned in this publication are subject to change without notice. This publication supersedes and replaces all information previously supplied. NVIDIA Corporation products are not authorized for use as critical components in life support devices or systems without express written approval of NVIDIA Corporation.TrademarksNVIDIA and the NVIDIA logo are trademarks or registered trademarks of NVIDIA Corporation. Other company and product names may be trademarks of the respective companies with which they are associated.Copyright© 2005 by NVIDIA Corporation. All rights reservedNVIDIA Corporation。

DXSDK8-Visual Basic教程

DXSDK8-Visual Basic教程

DXSDK8-Visual Basic教程准备:新建一标准EXE工程,选择菜单-->工程-->引用-->DirectX8 for Visual Basic Type Libra创建D3D设备创建一个简单的D3D设备并进行图形渲染第一步创建窗体和picture控件Caption = "Create Device"Height = 3600Left = 0Top = 0Width = 4800LinkTopic = "Form1"MaxButton = TrueMinButton = TrueScaleHeight = 3195ScaleMode = 1 - TwipScaleWidth = 254StartUpPosition = 3 - Windows Default第二步开始D3D设备首先要用DirectX8.Direct3DCreate方法创建一个Direct3d8对象其次要用Direct3D8.GetAdapterDisplayMode方法接受到当前的显示模式在取得显示模式后,以后就可以用此结构在创建一个运行在窗口模式下的Direct3Ddevice设备时,建个与当前显卡相匹配的后缓冲区接下来用D3DPRESENT_PARAMETERS对象来指定3D应用程序的表下面就要用CreateDevice方法利用上面对象的值设置应用程序第三步渲染和显示场景本例使用一个(Interval=40)timer控件触发场景的后缓冲区进行颜色填充.再把后缓冲与前缓冲交实现渲染首先用Direct3DDevice8.Clear方法进行填充颜色在是开始场景和结束场景在渲染完场景后再用Direct3DDevice8.Present方法显示出来第四步关闭应用程序在DX应用程序结束后必须把所有的DX对象设置成Nothing所有代码如下:Dim g_DX As New DirectX8Dim g_D3D As Direct3D8Dim g_D3DDevice As Direct3DDevice8Private Sub Form_Load()Me.ShowDoEventsb = InitD3D(Picture1.hWnd) '初始化设备If Not b ThenMsgBox "Unable to CreateDevice (see InitD3D()source for comments)"EndEnd IfTimer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()Render '渲染End SubPrivate Sub Form_Unload(Cancel As Integer)Cleanup '清除设备EndEnd SubFunction InitD3D(hWnd As Long) As Boolean'初始化On Local Error Resume NextSet g_D3D = g_DX.Direct3DCreate()If g_D3D Is Nothing Then Exit FunctionDim mode As D3DDISPLAYMODEg_D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, modeDim d3dpp As D3DPRESENT_PARAMETERSd3dpp.Windowed = 1d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNCd3dpp.BackBufferFormat = mode.FormatSet g_D3DDevice =g_D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)If g_D3DDevice Is Nothing Then Exit FunctionInitD3D = TrueEnd FunctionSub Cleanup() '清除设备Set g_D3DDevice = NothingSet g_D3D = NothingEnd SubSub Render() '渲染If g_D3DDevice Is Nothing Then Exit Subg_D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFF&, 1#, 0g_D3DDevice.BeginSceneg_D3DDevice.EndSceneg_D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0End Sub要使用D3D进行渲染就必须创建Direct3DDevice8对象在DirectX8.Direct3DCreate方法先要创建一个Direct3d8对象再用Direct3d8.CreateDevice方法创建Direct3DDevice8对象其中还要Direct3D8.GetAdapterDisplayMode方法接受到当前的显示模式并要设置D3DPRESENT_PARAMETERS成员来指定3D应用程序的表现创建完后用Direct3DDevice8.Clear方法进行填充颜色并开始场景用Direct3DDevice8.Present方法显示出来最后还要把所有的DX对象设置成Nothing 来结束DX程序顶点的渲染使用顶点画几何图形,本例使用3个顶点,并使用了顶点缓冲区的概念第一步:定义一个顶点类型首先定义顶点格式,并指定在顶点缓冲区里描述画面顶点的FVF第二步:设置顶点缓冲区本例子用自定义的InitVB过程在创建了D3D所需的对象后来实现初始化顶点缓冲区, 接下来的初始了三个特定的顶点类型来填充顶点缓冲区下面用CreateVertexBuffer方法建立顶点缓冲区接下来使用D3DVertexBuffer8SetData来添加数据第三步 渲染显示表面现在仍使用clear 方法来清除表面并开始场景接下来要用SetStreamSource 方法,来设置顶点缓冲区对应的流下一步是使用CreateVertexShader方法来创建顶点遮盖使用DrawPrimitive在顶点缓冲区里渲染顶点最后的步骤就是交换前后缓冲,这个例子只是简单说明如何用顶点来绘制几何图形所有代码如下:Dim g_DX As New DirectX8Dim g_D3D As Direct3D8Dim g_D3DDevice As Direct3DDevice8Dim g_VB As Direct3DVertexBuffer8Private Type CUSTOMVERTEXx As Singley As Singlez As Singlerhw As Singlecolor As LongEnd TypeConst D3DFVF_CUSTOMVERTEX = (D3DFVF_XYZRHW Or D3DFVF_DIFFUSE)Private Sub Form_Load()Dim b As BooleanMe.ShowDoEventsb = InitD3D(Picture1.hWnd)If Not b ThenMsgBox "Unable to CreateDevice (see InitD3D() source for comments)"EndEnd Ifb = InitVB()If Not b ThenMsgBox "Unable to Create VertexBuffer"EndEnd IfTimer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()RenderEnd SubPrivate Sub Form_Unload(Cancel As Integer)CleanupEndEnd SubFunction InitD3D(hWnd As Long) As BooleanSet g_D3D = g_DX.Direct3DCreate()If g_D3D Is Nothing Then Exit FunctionDim mode As D3DDISPLAYMODEg_D3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, modeDim d3dpp As D3DPRESENT_PARAMETERSd3dpp.Windowed = 1d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNCd3dpp.BackBufferFormat = mode.FormatSet g_D3DDevice = g_D3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp)If g_D3DDevice Is Nothing Then Exit FunctionInitD3D = TrueEnd FunctionFunction InitVB() As BooleanDim Vertices(3) As CUSTOMVERTEXDim VertexSizeInBytes As LongVertexSizeInBytes = Len(Vertices(0))With Vertices(0): .x = 150: .y = 50: .z = 0.5: .rhw = 1: .color = &HFFFF0000: End WithWith Vertices(1): .x = 250: .y = 250: .z = 0.5: .rhw = 1: .color = &HFF00FF00: End WithWith Vertices(2): .x = 50: .y = 250: .z = 0.5: .rhw = 1: .color = &HFF00FFFF: End WithSet g_VB = g_D3DDevice.CreateVertexBuffer(VertexSizeInBytes * 3, 0, D3DFVF_CUSTOMVERTE D3DPOOL_DEFAULT)If g_VB Is Nothing Then Exit FunctionD3DVertexBuffer8SetData g_VB, 0, VertexSizeInBytes * 3, 0, Vertices(0)InitVB = TrueEnd FunctionSub Cleanup()Set g_VB = NothingSet g_D3DDevice = NothingSet g_D3D = NothingEnd SubSub Render()Dim v As CUSTOMVERTEXDim sizeOfVertex As LongIf g_D3DDevice Is Nothing Then Exit Subg_D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFF&, 1#, 0g_D3DDevice.BeginScenesizeOfVertex = Len(v)g_D3DDevice.SetStreamSource 0, g_VB, sizeOfVertexg_D3DDevice.SetVertexShader D3DFVF_CUSTOMVERTEXg_D3DDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 1g_D3DDevice.EndSceneg_D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0End Sub总结:首先你要定义CUSTOMVERTEX结构和FVF象大多数D3D程序一样要初始化3D设备(教程1内容)再设定3个CUSTOMVERTEX类型的顶点建立顶点缓冲区是必须的,并为其填充要包含的数据清除场景,把顶点缓冲区绑定在流上,是渲染的开始接着创建顶点遮盖,把顶点在顶点缓冲区里进行渲染后面就是交换前后缓冲,把渲染结果呈现出来结束所有D3D设备使用矩阵本教程介绍了如何使用矩阵,我们在顶点的例子里,渲染了一个2D的三角形,而本例子将把它转化3D第一步:定义世界变化矩阵介绍在3-D空间里矩阵的世界矩阵如何转化,度量,和旋转几何图形首先使用D3DXMatrixRotationY方法把三角形围绕Y轴旋转接下来就是用SetTransform来设置当前的D3D设备的转变第二步:定义视图变化矩阵视图矩阵定义了视图的位置和转动,相当于一个场景摄象机.首先使用D3DXMatrixLookAtLH方法第三步:定义投影变化矩阵投影矩阵定义了几何图形被从2D转化为3D首先使用D3DXMatrixPerspectiveFovLH方法,在观野创建一个左手透视投影矩阵(相当于人的视野)所有代码Option ExplicitDim g_DX As New DirectX8Dim g_D3D As Direct3D8Dim g_D3DDevice As Direct3DDevice8Dim g_VB As Direct3DVertexBuffer8Private Type CUSTOMVERTEXx As Singley As Singlez As Singlecolor As LongEnd TypeConst D3DFVF_CUSTOMVERTEX=(D3DFVF_XYZ Or D3DFVF_DIFFUSE) Const g_pi = 3.1415Private Sub Form_Load()'省略End SubPrivate Sub Timer1_Timer()RenderEnd SubPrivate Sub Form_Unload(Cancel As Integer)EndEnd SubFunction InitD3D(hWnd As Long) As Boolean'省略End FunctionSub SetupMatrices()Dim matWorld As D3DMATRIXD3DXMatrixRotationY matWorld, Timer * 4g_D3DDevice.SetTransform D3DTS_WORLD, matWorldDim matView As D3DMATRIXD3DXMatrixLookAtLHmatView, vec3(0#, 3#, -5#), vec3(0#, 0#, 0#), vec3(0#, 1#, 0#)g_D3DDevice.SetTransform D3DTS_VIEW, matViewDim matProj As D3DMATRIXD3DXMatrixPerspectiveFovLH matProj, g_pi / 4, 1, 1, 1000g_D3DDevice.SetTransform D3DTS_PROJECTION, matProjEnd SubFunction Initvb() As Boolean'省略End FunctionSub Cleanup()'省略End SubSub Render()'省略End SubFunction vec3(x As Single, y As Single, z As Single) As D3DVECTOR vec3.x = xvec3.y = yvec3.z = zEnd Function。

游戏编程之三DirectXSDK简介

游戏编程之三DirectXSDK简介

游戏编程之三DirectXSDK简介`第三章 DirectX SDK简介第⼀节关于DirectX SDKMicrosoft DirectX提供了⼀套⾮常优秀的应⽤程序接⼝,包含了设计⾼性能、实时应⽤程序的源代码。

DirectX技术将帮助您建构下⼀代的电脑游戏和多媒体应⽤程序。

它的内容包括了DirectDraw、DirectSound、DirectPlay、Direct3D和DirectInput等部分,它们分别主要应⽤在图形程序、声⾳程序等⽅⾯。

由于DirectX,使在Windows下运⾏应⽤程序的性能可以与在DOS或游戏平台下运⾏的应⽤程序性能相媲美,甚⾄超过它们。

它将为您的Windows游戏开发提供⼀个具有鲁棒性的、标准化的操作环境。

DirectX包括两部分:运⾏期部分(Runtime)和SDK。

在DirectX开发时,这两部分都要⽤到,但在DirectX应⽤程序运⾏时只⽤运⾏期部分。

在Windows NT 4.0及以上版本中含有DirectX运⾏期部分,Win95则没有。

但Win95可以很容易获得DirectX运⾏期部分。

⽽Windows NT 4.0以前的版本不能运⾏DirectX程序。

许多基于DirectX的应⽤程序和游戏都包含了DirectX运⾏期部分。

它⽬前有五个版本:1、2、3、5和6(没有版本4)。

不同版本具有不同的运⾏期部分,但新版本的运⾏期部分可与旧版本的应⽤程序配合,即向上兼容。

当前⼤部分流⾏的游戏都是基于版本5开发的。

第⼆节 DirectX5 SDK的获得DirectX SDK包括开发DirectX应⽤程序所需要到的全部⽰例和帮助⽂件,但这些都是可选资源,必须的⽂件是头⽂件(.h⽂件)和库⽂件(.lib⽂件)。

获得DirectX SDK⽐获得运⾏期部分要困难⼀些。

Windows NT 4.0和Win95都不带DirectX SDK,要获得SDK可通过以下3种办法:* 购买Visual c++5.0(包括DirectX SDK)* 访问Microsoft Web站点的DirectX下载页* 成为MSDN(Microsoft开发⽹络)⽤户SDK 也可以从Microsoft Web站点上获得,下载量很⼤,尤其是在拨号连接时,有可能需要⼀整夜的时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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是唯一使用的标记。

相关文档
最新文档