欢迎来到天天文库
浏览记录
ID:38327570
大小:466.50 KB
页数:17页
时间:2019-06-10
《DirectX游戏编程第10章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章文字处理本章将讨论如何使用Direct3D生成和输出文本。在Direct3D中,文本的输出主要有三种方法,对于每一种方法都可以在本书相关的网站上找到对应的实例。主要目标:如何用ID3DXFont接口输出文字。如何用CD3DFont类来进行文字输出。怎样计算并输出帧速。如何使用D3DXCreateText方法创建3D文字效果。210.1ID3DXFont、ID3DXFont接口D3DX库是使用ID3DXFont接口来在Direct3D应用程序中输出文字的。这个接口通过GDI(图形设备接口)来输出文字,因此用这个接口完成任务
2、的时候会有些效率上的损失。但是,运用了GDI,ID3DXFont可以处理复杂的文字和文字格式。310.1.1创建一个ID3DXFont接口在DirectX中通过D3DXCreateFontIndirect方法来创建一个ID3DXFont接口:HRESULT WINAPI D3DXCreateFontIndirect(LPDIRECT3DDEVICE9pDevice,//当前所使用的设备CONSTD3DXFONT_DESC *pDesc,//字体描述结构LPD3DXFONT *ppFont//返回的字体接口);下面的代码展示了这个
3、方法的具体应用:参见教材P150410.1.2文字输出当获得了一个ID3DXFont接口以后,可以方便地利用ID3DXFont接口的DrawText方法来输出文字:INTID3DXFont::DrawText(LPCSTRpString,INTCount,LPRECTpRect,DWORDFormat,D3DCOLORColor);510.1.2文字输出范例代码如下:Font->DrawText("HelloWorld",//待输出字符串-1,//NULL结尾(Nullterminating)的字符串&rect,//决定文字输出
4、到屏幕的位置DT_TOP
5、DT_LEFT,//在指定RECT的左上角输出0xff000000//文字颜色:黑色);610.1.3计算帧速(FPS)在程序开始的时候,声明3个全局变量:DWORDFrameCnt;//已经渲染的帧数floatTimeElapsed;//已经经过的时间floatFPS;//FPS程序中每秒钟计算一次帧速,即每秒钟内的平均帧数,从而保证帧速在一秒的时间间隔内得到的帧速不会改变,以便拥有充足的时间在它改变之前读出数据。710.1.3计算帧速(FPS)每一帧渲染结束后都会将帧数计数器FrameCnt加1,然
6、后将时间计数器TimeElapsed加上渲染的每两帧之间经过的时间差timeDelta:FrameCnt++;TimeElapsed+=timeDelta;每一秒时间间隔后,通过下面的公式计算帧速:FPS=(float)FrameCnt/TimeElapsed;每一次计算完毕帧速后,需要重设FrameCnt和TimeElapsed变量的值来开始下一秒钟帧速的计算。810.1.3计算帧速(FPS)下面是计算帧速的完整代码:voidCalcFPS(floattimeDelta){FrameCnt++;TimeElapsed+=tim
7、eDelta;if(TimeElapsed>=1.0f){FPS=(float)FrameCnt/TimeElapsed;TimeElapsed=0.0f;FrameCnt=0;}910.2CD3DFont、CD3DFont类由于CD3DFont使用了Direct3D代替GDI来渲染文本,因此它比ID3DXFont更快。但是,CD3DFont不能像ID3DXFont那样支持复杂的文字和格式。如果你想要提高程序的效率并且简单的文字格式就能满足需求,那么CD3DFont类可以方便地解决问题。使用CD3DFont类之前需要把如下的文件
8、加入到你的工程中去:d3dfont.h、d3dfont.cpp、d3dutil.h、d3dutil.cpp、dxutil.h和dxutil.cpp,这些文件可以在DirectXSDK根目录下的SamplesC++Common文件夹下面的Include和Src文件夹内找到。1010.2.1构造CD3DFont对象下面是CD3DFont类的构造函数:CD3DFont(constTCHAR*strFontName,DWORDdwHeight,DWORDdwFlags=0L);实例化一个CD3DFont对象后,必须调用下面的方法将
9、CD3DFont对象创建到Direct3D设备中去,或者从Direct3D设备中卸载(之所以这样做,是为了满足D3D框架程序的需要,因为当Direct3D应用程序中出现设备丢失时,需要重建与设备相关的对象,包括CD3DFont对象,设备丢失的情况在Windows
此文档下载收益归作者所有