vb.net使用DirectX入门知识

有关DirectX图形(DirectX 8的图形组件)的用法,由3部分组成的迷你系列中的第一部分。在这3篇文章中,我将介绍成为该领域的合格程序员所需的所有知识。虽然本系列文章不会涵盖所有方面的知识(这将需要3个以上的部分),但最终您将可以做大多数事情,而您做不到的任何事情都应该可以自己解决,或者阅读其他教程并轻松理解它们。

有人可能会说您不能在Visual Basic中编写适当的3D游戏。我不是要争论这个问题,但是我现在要告诉您-完全有可能使用纯Visual Basic以全3D编写中度到高级的游戏-也许不是下一个Quake / Half-Life,但这不是。并不意味着你不能做任何游戏。

为了使用DirectX进行编程,您需要做一些事情:
Visual Basic语言的常识。尽管将解释复杂的事情,但我将假定您可以编写一个相当复杂的程序。
Visual Basic 5或更高版本的副本。Visual Basic的早期版本不支持组件对象模型(COM),因此将无法使用DirectX 8。
DirectX 8的副本。运行时(从Microsoft网站或杂志CD中获得的运行时)完全可以接受。如果您认真学习和使用DirectX,则获取SDK(软件开发套件)将是巨大的优势。
这些文章将在Visual Basic中发布,但实际的DirectX 8接口几乎与C / C ++中使用的接口相同(除了明显的语言差异),因此,如果可以在C / C ++中使用DirectX 8,则觉得这很容易。

入门

DirectX图形都以Direct3D的名称命名,这是从现在开始使用的术语(简称),但是名称可以互换。当Direct3D变得困难时,它的确会变得非常困难。但是幸运的是,基础知识非常简单,一个基本应用程序可以在100左右的代码行中建立。这样就可以了:

首先,我们需要将DirectX 8附加到我们的VB程序中-这样它就知道如何使用它。打开VB并创建一个新的“ Standard EXE”项目。单个表单应添加到项目视图。项目菜单,然后单击引用以显示库对话框。您应该在窗口中间看到一长串对象和库,所有对象和库都在左侧带有一个小复选框。向下滚动,直到看到一个名为“ Visual Basic类型库的DirectX 8”的条目,选中该复选框,然后单击“确定”。

现在,我们已将我们的项目引用到DirectX 8运行时库中。这就是我们要在Visual Basic中使用DirectX 8功能所要做的全部。请记住,最终用户必须在其计算机上安装DirectX 8,才能使您的应用程序开始执行-如果不在该位置,则程序将在启动后立即终止。我已经为这种类型的应用程序设置了模板,因此它显示在我的“新建项目”对话框中-您可能希望这样做。

一个简单的应用程序

现在我们可以使用DirectX 8,我们将建立一个非常简单的示例-它要做的就是创建Direct3D实例并清除屏幕,然后终止。

我们需要做的第一件事是将一些变量放入表单的(声明)部分中:

Dim Dx As DirectX8 'The master Object, everything comes from here
Dim D3D As Direct3D8 'This controls all things 3D
Dim D3DDevice As Direct3DDevice8 'This actually represents the hardware doing the rendering
Dim bRunning As Boolean 'Controls whether the program is running or not…
这里的前3个变量(Dx,D3D,D3Ddevice)都是类-我们需要初始化它们并终止它们;第四个变量bRunning只是一个简单的Yes / No标志,它指示应用程序是否正在运行-稍后再介绍。

现在似乎是解释这些不同对象的作用的好时机。DirectX 8具有对象和接口的层次结构,每个对象和接口都有一个父对象,在这种情况下,“ DirectX 8”对象要追溯到最远。“ Direct3D8”对象负责创建设备并枚举其功能。最后,“ Direct3DDevice8”对象代表您的3D卡-您告诉它执行操作,并且(在一定程度上)将执行该操作。因此,我们创建了一个“ DirectX 8”对象;然后,这可以帮助我们创建“ Direct3D8”对象,

我们还可以创建其他几个接口/对象,但是现在我们真的不需要太多了解它们-您将在使用过程中看到它们。处理这些对象时,拥有DirectX 8 SDK帮助文件的副本非常有用。虽然VB的Intellisense和对象浏览器非常有用,但SDK帮助文件说明并列出了每个接口/对象的所有功能。

现在我们已经定义了变量,我们可以开始对它们做一些事情了。为此,我们将创建一个名为“ Initialize()”的函数,该函数将按照其声明的样子进行操作-完成执行后(假设没有错误),我们将能够使用所有对象并开始使事物显示在屏幕上。

Public Function Initialize() As Boolean
On Error GoTo ErrHandler:

Initialize = True '//We succeeded
Exit Function

ErrHandler:
Debug.Print "Error Number Returned: " & Err.Number, Err.Description
Initialize = False
End Function
上面是该函数的基本框架-您将看到大多数函数都是这样设计的。从技术上讲,Initialize()不必是一个函数,因为它不返回任何特定数据。但是我特别喜欢这种布局,因为它使我可以设计一个绝不应该降低应用程序其余部分的功能-如果失败,它所做的就是将false返回给任何调用它的人。调用此函数时,我们应使用如下代码:

If Not (Initialize() = True) Then GoTo Error_Handler:
它将执行初始化代码。然后,如果成功,它将照常进行,但是如果失败,将进入“ Error_Handler”进行处理/更正。上面的调用只是以下内容的简化(更易于阅读)版本:

If Initialize() = False Then
GoTo Error_Handler:
End If
现在我们已经布局了基本的函数结构,我们将在其中添加一些内容。我们需要做的第一件事是定义两个结构并初始化Direct3D对象:

Dim DispMode As D3DDISPLAYMODE '//Describes our Display Mode
Dim D3DWindow As D3DPRESENT_PARAMETERS '//Describes our Viewport

Set Dx = New DirectX8 '//Create our Master Object
Set D3D = Dx.Direct3DCreate() '//Let our Master Object create the Direct3D Interface
稍后将使用这两个结构来帮助创建最终的Direct3DDevice8对象,但是现在我们要做的就是定义它们。接下来,我们创建DirectX 8对象-您可能完全知道定义“ Dim Dx as New DirectX 8”之类的对象是完全合法的,但这对我们想要做的事情不利。刚才提到的方法称为“早期绑定”,我们使用的方法称为“后期绑定”;区别在于,如果您后期绑定它,则Visual Basic在尝试使用它时将不会检查它是否已创建(但是会返回错误)。如果您早期绑定它,VB会在每个周围用一条语句编译代码沿“如果对象什么都不是,请创建它”这一行调用该对象。虽然这可能只是第一次,但对于计算机而言,这仍然是一件额外的事情,而作为一款游戏,我们希望能够获得所有的速度,并且这些对象每秒将被使用1000次-所以您可以想象我们会浪费的速度。其次,我们使主接口创建通用的Direct3D接口。无论安装的硬件可以做什么,您都将始终能够创建Direct3D接口。现在

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值