65.9K
CodeProject 正在变化。 阅读更多。
Home

在 DirectX 8 及以上版本中使用 ID3DXSprite 绘制 2D 图形

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.74/5 (13投票s)

2006年8月6日

CPOL

3分钟阅读

viewsIcon

80589

downloadIcon

3069

本教程演示了如何使用 ID3DXSprite 在 DirectX 8 中渲染 2D 图像。

Sample Image - 2dSprite.jpg

引言

最近玩了几款游戏(很久没玩了),我想我应该学习制作游戏,因为编写游戏涉及许多有趣的挑战。

本教程演示了在 DirectX 8 及以上版本中绘制 2D 图像是多么容易,在这些版本中 DirectDraw 不再可用。

为什么要有本教程?

为什么我们需要知道如何在 DirectX 8 中绘制 2D 图形? 一个主要原因是,从 DirectX 8 开始,DirectX 7 之前可用的 DirectDraw 组件已不再存在。 微软的官方文档说,DirectX 8 之于 DirectX 7 就像 Windows 95 之于 Windows 3.11。 从 DirectX 8 开始,重点更多地放在 3D 而不是 2D 上,因此他们将 2D 与 3D 合并。

由于我开始学习 DirectX,我认为 2D 是一种更好的开始方式,然后再深入研究 3D 的复杂性。 我在互联网上搜索了任何好的例子来在 DirectX 中渲染 2D 图形,但大多数示例都使用了 DirectDraw。 从 DirectX 8 开始,DirectDraw 的支持很少,而且我猜 DirectX 8 SDK 中也没有 DirectDraw 的文档。

ID3DXSprite

我遇到了这个新的接口 ID3DXSprite,它是 Direct3DX 的一部分。 我试图寻找一个使用这个接口的好例子,但找不到。 即使 DirectX 提供的示例也没有。 所以我做了一些实验,并提出了这个例子。 所以我认为在这里发布出来对任何想使用 DirectX 8 进行 2D 绘制并且不使用 DirectDraw 的人来说是个好主意。

关于 ID3DXSprite 的几件事

  • 有人说这个接口很慢,有些人喜欢用四边形以自己的方式渲染 2D 图形。 我要说的是没有必要重新发明轮子。 这个接口非常高效,并且很好地完成了任务。
  • 在 DirectX 9 中,您也可以使用此接口进行 alpha 混合。
  • 不要被接口名称搞混。 这个接口与精灵关系不大,它只是绘制一个 2D 图像。
  • ID3DXSprite 速度很快,所以随时使用它。
  • 一个 ID3DXSprite 实例可以用于渲染应用程序中的所有 2D 图像。 无需为每个精灵图像创建许多 ID3DXSprite 实例。

关于 ID3DXSprite 的一点知识?

The three important methods are 
Begin -  Prepares the interface to draw a texture. 
	This should be always called before drawing.
Draw - Draws the sprite.
HRESULT Draw(
   LPDIRECT3DTEXTURE8 pSrcTexture,  // The texture to draw.
   CONST RECT* pSrcRect,    // The src rect 
   CONST D3DXVECTOR2* pScaling,   // Scaling
   CONST D3DXVECTOR2* pRotationCenter,  // The rotation center if rotation is used.
   FLOAT Rotation,    // Rotatino in radians.
   CONST D3DVECTOR2* pTranslation,  // Translation, i.e. moving the object to this place.
   D3DCOLOR Color    // Color to module the image pixels.
 );End - Ends the sprite drawing and restores any settings used to render the texture.

如何使用 ID3DXSprite?

通常一个接口足以渲染所有 2D 图像,除非您有特定的原因要创建更多。 D3DXCreateSprite(...) 用于创建 ID3DXSprite 的一个实例。

使用任何一种技术加载纹理。

渲染顺序。

...
g_d3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );

g_d3dDevice->BeginScene();
{
  g_pSprite->Begin();
  {
     g_pSprite->Draw(g_pTexture,NULL,NULL,NULL,0,&g_position,0xFFFFFFFF);
  }
  g_pSprite->End();
 }
g_d3dDevice->EndScene();
g_d3dDevice->Present( NULL, NULL, NULL, NULL );

关于示例

附带的示例代码非常简单易读。 除了使用接口绘制精灵之外,它什么也没做。
示例在窗口周围弹跳球。

希望您觉得本教程有用。

© . All rights reserved.