在2D游戏中,由于去掉了深度这一个"D",所以无论视点离物体的远近程度如何,其呈现的物体大小是不会改变的。
那么使用D3D制作2D游戏,怎样才能实现这种与深度无关的效果呢?关键就在于投影变换时不要建立透视投影变换矩阵,而要使用函数D3DXMatrixOrthoLH或者D3DXMatrixOrthoOffCenterLH建立正交投影矩阵。关于这两个函数的用法将在后面的章节进行详细地讨论。
使用ID3DXSprite接口渲染2D精灵
ID3DXSprite接口提供了一系列函数帮助程序员使用D3D渲染2D精灵。使用ID3DXSprite接口的典型步骤是:
通过D3DXCreateSprite函数得到指向ID3DXSprite接口的指针
调用ID3DXSprite::Begin函数准备渲染状态
调用ID3DXSprite::SetTransform函数设置精灵的世界坐标系变换(包括缩放、旋转和平移)
调用ID3DXSprite::Draw函数将精灵显示在屏幕上
创建D3DXSprite对象
要使用ID3DXSpirte,首先需要使用D3DXCreateSprite函数创建D3DXSprite对象。D3DXCreateSprite函数将使用当前的3D设备,创建一个Sprite对象,并返回指向这个Sprite对象的指针。其函数原型如下:
下面的代码段展示如何创建一个D3DXSprite对象,并得到指向这个对象的指针。在这段代码里假设pD3DDevice是已经创建好的D3D设备指针。
准备渲染状态
用ID3DXSprite接口,可以通过调用Beign函数来设置渲染状态。Begin函数的原型如下:
HRESULTBegin(
DWORDFlags
);
在2D游戏中,最常用的参数是D3DXSPRITE_ALPHABLEND,它表示将要打开Alpha混合开关,实现精灵的透明渲染。在3D游戏中常用到D3DXSPRITE_ALPHABLEND|D3DXSPRITE_BILLBOARD这两个值的组合来实现粒子系统。在本章中,关注的是2D游戏制作,所以将只用到D3DXSPRITE_ALPHABLEND。
通过调用Begin函数,D3D设备做好了渲染的准备,接下来就可以执行渲染的工作。不过,Begin函数应该和End函数成对出现,渲染的操作应该放在Being函数和End函数之间。End函数原型如下:
HRESULTEnd();
通过End函数调用,D3D设备会将渲染的内容提交给设备显示出来。值得注意的是,ID3DXSprite接口提供的Begin/End函数并不能取代BeginSecne/EndScene函数,而是应该放在它们之间,如下;
设置精灵的世界坐标系变换
世界变换包括了缩放、旋转、平移等操作。对于这些操作,可以使用D3DXMatrixScaling函数、D3DXMatrixTranslation函数、D3DXMatrixRotationZ计算出相应的变换矩阵,再用D3DXMatrixMultiply函数按一定的变换顺序将它们累积起来。然后使用D3DXSprite对象的SetTransform函数设置精灵的世界变换。如下面的代码段,将精灵在x、y方向等比例缩放为原来的0.5倍,然后绕着Z轴旋转1弧度,再平移到(x,y,0)处:
在屏幕指定位置渲染
使用D3DXSprite对象渲染时,其坐标系是以屏幕左上角为坐标原点,沿原点向左是X坐标增大的方向,沿原点向下是y坐标增大的方向。D3DXSprite的绘图操作必须放在D3DXSprite对象的Begin()/End()函数对之间完成。在调用其Begin函数时可以同时指定精灵渲染时的行为(比如打开Alpha混合开关),而具体的操作则交给Draw函数来完成。其函数原型如下:
下面的代码段在x,y,z位置渲染精灵:
……
//打开渲染开关,同时打开Alpha混合开关
注意:ID3DXSprite接口是微软为了帮助程序员轻松实现2D游戏而准备的,所以,在使用ID3DXSprite接口时,不需要由程序员建立投影坐标系、观察坐标系,也不需要创建顶点缓冲及定义顶点数据结构和灵活顶点格式。
<!--EndFragment-->
分享到:
相关推荐
首先,第一种方法是利用ID3DXSprite接口进行渲染。ID3DXSprite是DirectX提供的一种便捷的2D精灵渲染工具,它简化了2D图形的绘制过程,不需要程序员处理复杂的矩阵变换。要使用ID3DXSprite,需要先创建一个ID3...
ID3DXSprite接口则方便了2D精灵的绘制;还有ID3DXEffect接口,用于高效管理和执行预编译的顶点和像素着色器程序。 总之,D3DX9_43.dll是DirectX 9不可或缺的一部分,它为游戏和图形应用程序提供了强大的图形处理...
DirectX提供了ID3DXSprite接口,用于管理精灵的绘制,包括设置变换矩阵、开启和关闭深度测试等。最后,交换前后缓冲区完成一帧的渲染,从而实现连续动画效果。 在雪花粒子系统中,还可以添加额外的效果,如光照、...
本资源包“ID3DXSpriteTest1029.rar”专门针对Direct3D中的ID3DXSprite接口进行深入讲解,它涵盖了Direct Sound Programming (DSP) 和使用Visual C++的实践应用,旨在帮助开发者掌握高效且流畅的2D图形处理技巧。...
例如,他们可能使用ID3DXSprite接口来创建和管理3D图形的渲染,通过ID3DXEffect接口来实现颜色渐变。在3D空间中,椭圆可以通过扩展的矩形或者球体来模拟,根据需要调整比例使它看起来像一个椭圆。 "BasicPrimitive....
首先,我们需要了解LPD3DXSPRITE接口。LPD3DXSPRITE是DirectX提供的一个精灵管理类,它简化了2D图像的绘制过程,支持批处理和缓存机制,能够提高绘制效率。我们可以通过`ID3DXSprite`的成员函数来控制精灵的位置、...
为了优化性能,可能会使用ID3DXSprite接口来批处理点的绘制,减少渲染时的调用开销。 在3D图形编程中,点、线和三角形是最基本的图形元素。对于点来说,D3D允许设置其位置、颜色和其他属性,例如点大小。动态星空的...
7. **渲染流程**:在渲染帧的过程中,你需要调用`ID3DXSprite::Begin`和`ID3DXSprite::End`来开始和结束文本的绘制。在这之间,可以调用`ID3DXSprite::Draw`来绘制创建的文本。 这个压缩包文件`D3DXCreateText.rar`...
首先,我们需要创建一个3D字体对象,这可以通过Direct3D的`ID3DXFont`接口实现。这个接口提供了一种简便的方法来加载系统字体,并将其转换为3D模型。创建字体时,可以指定字体的样式、大小、颜色等属性。 接下来,...
在这个项目中,我们有一个基于C++实现的连连看程序,包括源代码,它使用了ID3DXSPRITE库来处理二维图形的绘制,并且在Visual Studio 2005环境下进行编译。虽然游戏没有集成音乐,但图像资源来源于游戏“预言Online”...
D3D不直接支持文字渲染,因此我们需要借助DirectX的文本渲染库,如`ID3DXFont`或`ID3DXSprite`。`ID3DXFont`可以创建纹理化的字体,每个字符都会被转换为纹理映射到3D模型上。通过调用`ID3DXFont::DrawText`,我们...
在C语言中,`ID3DXSprite::Draw`方法用于绘制精灵,其参数可以控制图像的位置。在前一次编程中,我们可能通过改变第4个参数(一个D3DXVECTOR3结构体)来改变图像的位置。为了实现更复杂的操作,如缩放和旋转,我们...
在图形库如OpenGL和DirectX中,提供了专门的函数来绘制圆和椭圆,如OpenGL的`glutSolidSphere`和`glutWireSphere`,以及DirectX的`ID3DXSprite`接口。这些库内部实现了更高效的方法,如OpenGL的GLU库中的尼科尔斯...