开启DXUT框架——简单的文本渲染程序

DXUT框架简介

这里直接给出官方的DXUT框架的定义及其开发初衷:
DXUT是Direct3D提供的一个建立在Direct3D API基础之上的应用程序框架,这里简称为DXUT框架。DXUT框架用来帮助程序员花更少的时间来解决下列问题:创建窗口、创建Direct3D设备、进行消息循环和处理设备事件。在DXUT框架基础上编写代码,可以快速高效的进行Direct3D程序设计。大多数Direct3D SDK示例程序中使用了DXUT框架。
简单说来,DXUT框架就是把每次创建Direct3D应用程序所需要写的固定、重复且繁琐的代码(如用Windows API创建窗口、创建Direct3D设备等)封装起来,供程序员直接调用;同时DXTU框架也提供了一些调试机制和一些杂类,这些增强了Direct3D代码的健壮性、可读性和更灵活的功能。

获取DXUT框架

(1)这里首先对我所用的工具做一个说明,下面是工具清单

(1)操作系统:Windows10
(2)Direct3D版本:Microsoft DirectX SDK (June 2010)(使用的是DX9)
(3)编译器:Visual Studio Team System 2008

这里应该注意一下编译器版本的选择,在使用VS2008之前,用VS12、13尝试过,虽然可以将vs2008的项目更新为新版本,但是依旧运行不起来(不要完全相信我,可以自己尝试自己已经安装的编译器)。另外VS2010也是可行的,因为官方sample中提供了2008和2010两个工程版本。
(2)获取DXUT框架
获取的过程很简单,找到DirectX的安装目录,在相对路径Microsoft DirectX SDK (June 2010)\Samples\SampleBrowser(注:不同版本可能有差别)中找到SampleBrowser.exe可执行文件。
运行此程序和得到如下界面:
开启DXUT框架——简单的文本渲染程序_第1张图片
接下来可以通过条件搜索,也可以直接在右上角的搜索框中键入empty,找到下面的官方sample:
开启DXUT框架——简单的文本渲染程序_第2张图片
这里注意安装版本,图中选择的EmptyProject是建立在Direct3D9 API之上的。
再按照安装向导,经过下列步骤即可将此项目下载到指定文件夹。因为这是一个Direct3D的空工程,实质上就是DXUT框架。
开启DXUT框架——简单的文本渲染程序_第3张图片
(3)测试DXUT框架是否安装成功
经过上述步骤,我们就得到了DXUT框架,接下来直接用编译器打开对应版本的项目工程,然后编译运行结果如下:
开启DXUT框架——简单的文本渲染程序_第4张图片
虽然只有一个窗口,但是其功能还是挺丰富的,例如可以用一些快捷键控制其模式(如Alt+Enter窗口与全屏模式切换、Esc突退出程序等)。
得到这个蓝色背景的窗口证明DXUT框架安装成功,这是进行其他Direct3D程序设计的基础。
(4)可能出现的问题

(1)在获取DXUT框架的时候可能会遇到其他步骤都正确,而编译失败,并且会提示很多错误信息。此时可以定位到任意一条报错的行,有一种情况是,DXUT文件代码不全,(即此文件的代码只有一半)这很有可能是安装DirectX的时候出现了问题。解决的方式是:重新安装DirectX程序或者使用DirectX修复工具进行修复,如果真的遇到此问题,建议大家两种方法都进行尝试,即可解决。
(2)如果还有其他安装问题,大家可以留言交流!

使用DXUT框架的简单示例——文本渲染程序

(1)建议
这里在DXUT框架安装成功的基础上,写一个文本渲染的程序,框架的具体细节可以参考官方文档或有关Direct3D程序设计的书籍。建议大家不要纠结于框架的具体实现细节,只是需要先了解框架的工作流程以及设计思路,然后尽可能的使用它,之后逐步在实践中学习DXUT框架的具体实现细节。
(2)程序设计思路
通过使用DXUT框架的文本设计辅助类(CDXUTTextHelper)和ID3DXFont、ID3DXSprite接口,在窗口中渲染一些文本,当然会在渲染过程中控制文本的颜色、显示位置、隐藏与显示、类型等属性。
其中代码都是写在与自己命名工程同名的源代码文件中,其中有一些回调函数和一个主函数,这其实也反映出了框架的对Direct3D程序的驱动过程。
(3)关键代码
首先添加一个头文件,其中包含了我们所要使用的文本辅助类的类定义:

#include "SDKmisc.h"

全局变量的定义:

// 全局变量
LPD3DXFONT g_pFont = NULL;
LPD3DXSPRITE g_pTextSprite = NULL;
BOOL g_bShowHelp = FALSE;

渲染文本的函数代码:

//--------------------------------------------------------------------------------------
// 此函数用来借助内置实用类渲染出文本
//--------------------------------------------------------------------------------------
void RenderText() {
    CDXUTTextHelper  textHelper(g_pFont, g_pTextSprite, 15);    //实例化绘制文本帮助类

    // 显示当前Direct3D设备状态和渲染帧速率
    textHelper.Begin();
    textHelper.SetInsertionPos(5, 5);
    textHelper.SetForegroundColor(D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f));
    textHelper.DrawTextLine(DXUTGetFrameStats(TRUE));
    textHelper.DrawTextLine(DXUTGetDeviceStats());

    // 显示其他简要信息
    textHelper.SetForegroundColor(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f));
    textHelper.DrawTextLine(L"使用DXUT框架创建一个简单的文本渲染程序");

    //显示简要的帮助信息
    const D3DSURFACE_DESC* pd3dsdBackBuffer = DXUTGetD3D9BackBufferSurfaceDesc();
    if(g_bShowHelp) {
        textHelper.SetInsertionPos(10, pd3dsdBackBuffer->Height - 15 * 6);
        textHelper.SetForegroundColor(D3DXCOLOR(1.0f, 0.75f, 0.0f, 1.0f));
        textHelper.DrawTextLine(L"使用F1隐藏帮助信息");
        textHelper.SetInsertionPos(40, pd3dsdBackBuffer->Height - 15 * 5);
        textHelper.DrawTextLine(L"使用Esc退出程序");
    }
    else {
        textHelper.SetInsertionPos(10, pd3dsdBackBuffer->Height - 15 * 2);
        textHelper.SetForegroundColor(D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f));
        textHelper.DrawTextLine(L"使用F1显示帮助信息");
    }

    textHelper.End();   //一定要与Begin成对使用
}

F1键控制相关文本的显示与隐藏的实现代码:

//--------------------------------------------------------------------------------------
// 键盘检测回调函数
//-------------------------------------------------------------------------------------

void CALLBACK KeyboardProc(UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext) {
    if(bKeyDown) {
        switch(nChar) {
            case VK_F1:
                g_bShowHelp = !g_bShowHelp;
                break;
        }
    }
}

(4)运行结果

开启DXUT框架——简单的文本渲染程序_第5张图片
这里具体要显示的文本内容大家可以随意编辑,这里是给出了渲染的相关信息和提示帮助信息。

源码下载

整个工程的代码可以在这里下载:
链接:https://pan.baidu.com/s/1087TYZG82Rvds-cDindOKg 密码:pa21

你可能感兴趣的:(DirectX学习,编程语言及相应配置)