现在的位置: 首页 > 综合 > 正文

DirectX 9 UI设计学习笔记之二:第2章Introducing DirectX+第3章Introducing Direct3D

2018年04月09日 ⁄ 综合 ⁄ 共 4771字 ⁄ 字号 评论关闭

       此文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系本人!

       邮箱:2024958085@qq.com

 

上一期的地址:

DX 9 UI设计学习笔记之一

 

 

       别看这一期似乎要讲很多内容,其实大部分是一带而过的。其实我的重点在于弄了一个框架程序;详情见本期最后。

2章 Introducing DirectX

======================================================================

       这一章对于DX做了一个简单介绍。主要打算回答以下问题:

1What is DirectX?DX
是啥?)

2What APIs does it include?(它包括哪些API?)

3What other features does DirectX include?DirectX
还有哪些其他功能?)

4Why use it?(为何使用它?)

5From where is DirectX obtained?(从哪里获得DirectX?)

6What are its minimum requirements?(它最低的要求是什么?)

7What’s the difference between Debug and Retail mode?Debug
模式和Retail
模式的区别是什么?)

8How is DirectX installed?(如何安装DirectX?)

9How can Visual C++ be configured to use DirectX?(如何设置VC++以便使用DirectX?)

 

第2.1节.DirectX----WhatIs It?

       简言之,DirectX 是PC 平台上的游戏的运行环境和开发环境之一。它包含这么几个部分:

1Direct3D ----Graphics。它是DirectX
的图形部分,也是最庞大的部分。

2DirectInput---- Keyboards, Mice, and Joysticks。输入部分,支持键盘、鼠标和游戏杆(还有其他)。

3DirectMusicand DirectSound ---- MIDI and WAV。声音部分,支持MIDI
WAV
格式的声音文件(其实还支持很多其它格式)。

4DirectPlay---- Networking。网络连接部分。

5DirectShow---- Programmable Media Player。可编程媒体播放器。

 

第2.2节.DirectX----OtherFeatures

       DX 还包括一些有用的小程序,为我们的游戏开发过程提供便利。它们包括:

1Mesh Viewer。用于预览转换成.X
文件的网格模型的小程序。在DX June 2010
版中已经没有了。

2Error Lookup。输入一个值,就可以显示对应的错误代码。现在它的名字叫做DXErr

3Caps Viewer。能够用于查看电脑上的硬件(显卡、声卡等等)的能力。现在它的名字叫做DXCapsViewer

4GraphEditDirectShow的一个工具,用于编辑声音文件和视频文件。可惜现在已经没有了。

5Texture Tool。用于创建纹理和编辑纹理的一个小软件。现在它的名字叫做DxTex

 

第2.3节.SystemRequirements

       讲了安装DirectX9 SDK 的系统需求。放心,现代人的电脑都可以安装。

 

第2.4节.Where toObtain DirectX

       答案是微软官网。

 

第2.5节.Installation

       很简单,基本没什么好说的。注意两点:安装前卸载老版本的DX;安装失败的话(比如说安装完毕后提示有错误代码),试试重新安装。

 

第2.6节.InstalledFiles

       告诉我们安装完毕后安装文件夹下有哪些东西。大家自行查看即可。

 

第2.7节.ConfiguringVisual C++

       讲了用Visual Studio 运行DirectX 时如何设置。这个有点复杂,不过用过的人应该很熟悉了。我会在今后发布的每个代码中附上使用说明的,大家不用担心。

 

第2.8节.Coding withHungarian Notation

       这里简要介绍了匈牙利命名法。也是DX 程序员比较喜欢的命名法。

======================================================================

 

第3章 IntroducingDirect3D

======================================================================

       这一章主要打算回答如下问题:

1How mathematics is used to express positions and represent transformations(如何用数学来表示位置以及变换)

2How a Direct3D application is created and configured in Visual C++(在Visual C++中,如何创建并设置Direct3D
应用程序)

3The programmatic requirements of a Direct3D projectDirect3D
工程的编程需求)

4How images can be rendered to the screen(如何将图形渲染到屏幕上)

5How to perform special effects like alpha blending(如何实现像alpha
混合这样的特效)

 

第3.1节.Direct3DConcepts----Overview and Mathematics

       讲了一些基本的数学概念。其实推荐读者看看“龙书”第二版(Frank D. Luna 的《Introduction to 3D Game Programmingwith DirectX 9.0c: A Shader Approach》)的前几章,讲得非常详细。

 

第3.2节.GettingStarted

       这里写了一个小小的Windows程序。

 

第3.3节.ProgrammingDirect3D Applications

       这里讲述了让Direct3D程序在屏幕上渲染图形所需要采取的六大步骤:

1Initialize Direct3D(初始化Direct3D)。

2Create a 3D device(创建一个3D
设备)。

3Configure the device for rendering(设置设备以供渲染)。

4Initialize world data(初始化世界数据)。

5Render(渲染)。

6Release Direct3D objects(释放Direct3D
对象)。

 

第3.4节.InitializingDirect3D

第3.5节.Creating aDirect3D Device----A Graphics Card

第3.6节.Preparingto Render

       这几节具体讲了第3.3节中提到的几大步骤的详情。

 

第3.7节.InitializingWorld Data

       这是第3.3节中提到的第四步。一般的Direct3D 程序在这里需要载入3D模型等等;但是对于UI 设计而言,由于我们主要与2D 图形打交道,所以我们介绍的是Direct3D surfaces 和Direct3D textures。前者一般的3D游戏编程书上不会提到,所以大家要仔细了!

1Direct3DSurfaces ---- IDirect3DSurface9surfaces
一开始是空白的,并且不会立即被绘制到屏幕上。事实上,我们需要载入图像,然后在后来某一时刻将其绘制出来。我们通过 Direct3D
设备的CreateOffscreenPlainSurface方法来创建一个 IDirect3DSurface9
接口。注意surfaces
和后面要讲的textures
的大小应该为2的次幂。

2Direct3DSurfaces ---- Loading Image Files。在创建了一个surface
后,我们可以从硬盘中把图像载入到该surface
上面。这是通过D3DXLoadSurfaceFromFile
函数来实现的。注意:为了创建一个宽高与所载入的图片尺寸匹配的surface,我们首先调用D3DXGetImageInfoFromFile
函数来填充一个D3DXIMAGE_INFO
结构体,然后将这个变量传递到CreateOffscreenPlainSurface
函数中。

3Direct3DSurfaces ---- RenderingDirect3D
首先将物体渲染到一个特殊的离屏surface
(叫做back buffer,后台缓存)上。Surfaces
可以通过surface
复制的过程绘制到后台缓存上。surface
复制是通过 IDirect3DDevice9
UpdateSurface
方法实现的。这里我们需要获得指向后台缓存的一个指针,而这个是通过IDirect3DDevice9接口的GetBackBuffer
方法而完成的。

4Direct3DTextures ---- IDirect3DTexture9Textures
可以看成是升级版的surfaces;它们可以移动、缩放和旋转,并且可以映射到3D
模型的皮肤上。我们可以通过D3DXCreateTextureFromFile
函数来一次性地创建和载入一个texture

5Direct3DTextures ---- Preparing to RenderTextures
surfaces
是不同的;我们不能够直接将其复制到后台缓存上去。相反,我们需要使用另外一个接口,叫做 ID3DXSprite。该接口可以将任意数目的 textures
直接绘制到后台缓存中。我们通过 D3DXCreateSprite函数来创建 ID3DXSprite
接口。

6Direct3DTextures ---- Rendering。要绘制 textures,如前所述,需要借助
ID3DXSprite
接口。我们一共要调用该接口的如下几种方法:Begin方法,SetTransform
方法(可以借助 D3DXMatrixTransformation2D
方法来生成一个2D
变换矩阵),Draw
方法以及End 方法。

 

第3.8节.AlphaBlending

       这一节讲的是Alpha 混合,主要讲了如何用Adobe Photoshop、Paint Shop Pro 以及DX 自带的DxTex 程序为图像添加alpha 通道的方法,最后讲了如何在Direct3D 中启用Alpha 混合。这些都比较简单。

 

======================================================================

 

       最后到了奉送代码的时间了!下面就是我为本书前四章量身定做的代码!

DX 9 UI编程前四章框架代码

 

       当然,其实并不是我做的,而且思路也跟书上的不一样。其实这个代码是我参考了“龙书”第二版和“龙书”第四版的框架代码、然后花了很多的时间修改而成的。它目前的功能包括:显示FPS、每帧耗时、总运行时间(不包括程序停止,也就是跳转到其他程序的时间)、窗口的宽高比、最大最小化、支持 Direct Input、按Ctrl+Enter 键在窗口模式和全屏模式之间切换等等。不过现在这个代码有点小bug,就是在全屏的时候,按Alt+Tab 键切换出去的时候会出错。咳,以后再慢慢改吧!

       代码的使用方法参见压缩文件夹内部的ReadMe.txt 文件(以后同理,不再赘述)。

       祝大家学习愉快!

抱歉!评论已关闭.