`

Directx字体

阅读更多

在游戏中,我们要向用户显示一些文本信息。而在Direct3D中生成和输出文本有3种形式。

一、ID3DFont接口

D3DX库提供接口ID3DXFont,该接口用于在DIrect3D应用程序中绘制文本。该接口内部使用GDI(图形设备接口)来绘制文本,因此该接口在性能上略有损失。但是可以处理一些复杂的字体和格式。

1.我们用D3DXCreateFontIndirect函数来创建一个ID3DXFont接口对象。为了对我们想要创建的字体进行描叙,必须先填充D3DXFONT_DESC结构。

2.一旦获取了ID3DXFont接口的指针,只需调用方法ID3DXFont::DrawText即可轻而易举地完成文本的绘制。

3.接着使用ID3DXFont和CFont计算并显示程序每秒绘制的帧数。

首先实例化3个全局变量:

DWORD FrameCnt = 0;

float TimeElapsed = 0;

float FPS= 0;

接下来我们每秒计算一次FPS,从而得到一个较准确的均值。此外该程序可将每秒得到的FPS均值在窗口中的显示保持一秒,保证了在该均值改变之前我们有足够的时间对其进行读取。所以,每当一帧绘制成功,我们对变量FrameCnt进行自增,并为变量TimeElapse增加一帧绘制结束时计算所经过的时间timeDelta。每一秒过后,我们可用如下公式计算出FPS:

FPS= (float)FrameCnt / TimeElapsed;

然后,我们再重设变量FrameCnt和TimeElapse,准备计算下一秒的FPS均值。

二、CD3DFont

CD3DFont类绘制文本时使用的是Direct3D而非GDI,所以其绘制的速度比ID3DXFont要快的多。但不支持ID3DFont所支持的那些复杂的字体和格式。

1.要想创建CD3DFont类的实例,我们只需要像普通C++对象那样进行实例化即可。当我们实例化一个CD3DFont类的对象后,必须调用如下方法对字体进行初始化:

Font = new CD3DFont("Times New Roman", 16, 0);

Font -> InitDeviceObject(Device);

Font -> RestoreDeviceObjects();

2.既然我们已经创建了一个CD3DFont对象并对其进行了初始化,现在我们可以绘制一些文本了。可用如下函数实现文本的绘制:

HRESULT CD3DFont::DrawText(FLOAT x, FLOAT y, DWORD dwColor, const TCHAR * strText, DWORD dwFlags=0)

3.在删除一个CD3DFont类的对象之前,我们必须首先调用一些清理函数,如下:

Font ->InvalidateDeviceObjects();

Font ->DeleteDeviceObjects();

delete Font;

三、D3DXCreateText函数

该函数用于创建文本的3D网格。该函数的原型为:

HRESULT D3DXCreateText(

LPDIRECT3DDEVICE9 pDevice,

HDC hDc,

LPCTSTR pText,

FLOAT Deviation,

FLOAT Extrusion,

LPD3DXMESH * ppMesh,

LPD3DXBUFFER *ppAdjacency,

LPGLYPHMETRICSFLOAT pGlyphMetrics);

如果调用成功,该函数返回D3D_OK。

接下来仅需调用网格的DrawSubset方法,就可以绘制出3D文本网格。

分享到:
评论

相关推荐

    microsoft-directx

    编辑工具 微软 DirectX 是在 Windows 平台...DirectX 11 包括最新版本的 Direct3D, 它提供了对镶嵌和通用 GPU 处理的支持, 以及 Direct2D 和 DirectWrite, 用于加速2D 渲染以及字体和文本呈现的新的 Windows api。 概述

    Delphi DirectX8.0基于HGE中文字体实现方案

    Delphi DirectX8.0基于HGE中文字体实现方案, 可以作为参考。学习下。怎么实现

    DirectX修复工具(DirectX Repair) v3.3.0.25801.rar

    修复了Windows 7系统下大字体时窗体显示异常的BUG。 修复了Windows XP系统下简约窗体显示异常的BUG。 修复了简约模式可能意外退出的BUG。 DirectX修复工具 v2.5 增强版更新:新增的功能:新增两种全新的窗口样式...

    D3DXFont.rar

    DirectX 9.0 C++ 教程 字体 迟到的helloworld。

    DirectX9 3D游戏设计入门 英文版+中文版+源代码

    第9章 字体\t 第10章 网格(一)\t 第11章 网格(二)\t 第12章 设计一个灵活的Camera类 第13章 地形绘制基础\t 第14章 粒子系统\t 第15章 拾取\t 第Ⅳ部分 着色器和效果 第16章 高级着色语言(HLSL)入门\t 第17章 顶点...

    DirectXSDK的一个例子

    这是用DX作的一个在DirectDrawSurface中显示字体的例子,没有使用VCL

    directx+3d

    很好的图形学代码 02_第二章 Direct3D程序设计基础 03_第三章 坐标系与基本图元 04_第四章 顶点坐标变换 05_第五章 光照与材质 ...10_第十章 字体与文本显示 11_第十一章 应用程序框架 12_第十二章 高级纹理应用

    WPF演示 实现发光的字体和模糊按钮

    WPF是微软的新一代图形开发技术,主要是基于Directx技术。使用WPF,可以非常容易的创建各种特效。基于GDI/GDI+开发则非常的困难

    Introduction to 3D Game Programming with DirectX 9.0

    第9章 字体 149 9.1 ID3DXFont接口 149 9.1.1 创建一个ID3DXFont接口对象 149 9.1.2 绘制文本 150 9.1.3 计算每秒绘制的帧数 151 9.2 CD3DFont 152 9.2.1 创建CD3DFont类的实例 152 9.2.2 绘制文本 152 ...

    DIRECTX.9.0.3D游戏开发编程基础.pdf

    7.4 用DirectX Texture Tool 创建Alpha通道 7.5 例程:透明效果 7.6 小结 第8章 模板 8.1 模板缓存的使用 8.1.1 模板缓存格式的查询 8.1.2 模板测试 8.1.3 模板测试的控制 8.1.4 模板缓存的更新 8.1.5 ...

    精通DirectX.3D图形与动画程序设计.pdf

    中文名: 精通DirectX 3D图形与动画程序设计 原名: 精通DirectX 3D图形与动画程序设计 别名: 游戏编程, 游戏开发 作者: 王德才 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社书号: 9787115159717发行时间: 2007...

    精通DirectX.3D图形与动画程序设计.part4

    第一部分介绍了Direct3D程序设计基础,包括三维坐标变换、光照处理、纹理贴图、雾化效果、文件模型、文本和字体等内容。第二部分介绍了Direct3D程序设计的相关高级技术,包括多层纹理映射、纹理坐标自动生成与变换、...

    directx12-render-pipeline:DirectX12渲染管线

    DirectX12渲染管线 WindowSDK版本:10.0.18362.0 Visual Studion版本:2017 ... 字体。 基于freetype的文本渲染和3D文本渲染。 一系列的屏幕后期处理效果。 骨架动画。 GPU粒子系统。 FFT海洋。 天空盒。 环境映射。

Global site tag (gtag.js) - Google Analytics