|
|
|
使用Surfaces和Sprite对象绘制2D图元 译:zh1110 Surfaces和Sprite对象用来绘制2D图元,是DirectX 8中针对2D游戏增强的部分之一。
Sprite对象: 我们首先了解其中的Sprite对象,它能自由的缩放,旋转及透明处理,但这些效果在DD7中是很难处理的。Sprite对象使用的是“D3D加速2D绘图”,所以你不用担心其效率问题。(Sprite对象实质是封装了两个三角面)
'创建Sprite对象 Dim Sprite As D3DXSpriteSet Sprite = d3dx.CreateSprite(Device) Device.BeginScene Sprite.Begin 'Sprite对象准备 Pos.x=mouse.x:Pos.y=mouse.y Rotation=anger Sprite.Draw Texture, ByVal 0, TempScaling, TempCenter, Rotation, Pos,
&HAAFFFFFF '绘制 Set Sprite = Nothing '释放Sprite对象
Sprite对象绘制的函数原型为 Sub Draw(SrcTexture As Direct3DTexture8, SrcRect As Any, Scaling As D3DVECTOR2, RotationCenter As D3DVECTOR2, Rotation As Single, Translation As D3DVECTOR2, color As Long) SrcTexture为使用的贴图 Scaling为要使用的贴图 RotationCenter为旋转的中心,以贴图左上角为圆点位置 Rotation为缩放比例 Translation为绘制到屏幕的位置 color为混合的颜色,改变前两位即可改变透明度(一般用16进制数)
Surfaces对象: 我们在创建贴图时,长度和高度必须是2次幂(如64X64,128X128,512*512),否则多余的会浪费,且一些旧显卡最大仅支持512*512。Surfaces对象则无此限制,但它没有旋转及透明效果。 首先我们声明两个Surfaces,一个用来存放背景面 Dim surfBack As Direct3DSurface8 Dim surfPic As Direct3DSurface8
你可看到这里没有用到贴图。然后创建并从文件加载,过程相当直接,具体信息可参考SDK。 Set surfPic = dev.CreateImageSurface(800, 600, D3DFMT_R5G6B5) '宽度800,高度600,R5G6B5颜色格式 d3dx.LoadSurfaceFromFile
surfPic,ByVal 0,ByVal 0, picFile, ByVal 0,D3DX_DEFAULT, 0,ByVal 0 Set surfBack = dev.GetRenderTarget
这些完成后,在每个渲染周期将surfPic对象需要的区域拷贝到背景对象上 dev.Clear 0, ByVal 0&, D3DCLEAR_TARGET, &HFF, 0, 0
'清空背景
dev.BeginScene 这就是全部,你可以将CopyRects放在dev.BeginScene的外部,没有任何关系。具体信息请下载代码。 |