|
|
建立D3D和其他相关的设备应该没有问题吧.
* I) H; k, J& j3 L8 | 然后再定义一个ID3DXSprite*变量:: G9 Z7 a5 j, o- b
ID3DXSprite* pSprite = NULL;
# \5 y3 C9 }* ] 然后在创建D3D设备(假如是pd3dDevice)之后, 用D3DXCreateSprite创建Sprite:
1 B$ J! }4 d' z4 y$ h D3DXCreateSprite( pd3dDevice, &pSprite );/ U0 i- H' Z1 y
记得在设备丢失/释放时使用: SAFE_RELEASE( pSprite );# Y/ Q5 W( z/ Z K
在渲染场景的时候, 使用:
4 F! W' C. t2 d, ?% C/ r) l4 B pSprite->Begin(x);
% x% f( b4 ~- C+ U ... // 具体绘制代码) o4 C: B0 n+ z E( K% `/ `
pSprite->End();1 ?$ u; g& v; ?1 F8 b: H) C
其中的x可以是下面各值的组合, 如 D3DXSPRITE_ALPHABLEND | D3DXSPRITE_OBJECTSPACE+ g' E* Q( |- T+ n
D3DXSPRITE_DONOTSAVESTATE 调用Begin()或End()不保存/恢复设备状态. (如pd3dDevice->SetRenderState中设置的部分状态)
3 O+ X; L; q. L* ?5 Y. ` D3DXSPRITE_DONOTMODIFY_RENDERSTATE 不是很清楚, 呵呵, 表面上看好像是不改变渲染状态...: Q) L- \$ m$ L( s. }$ L
D3DXSPRITE_OBJECTSPACE 不改变世界矩阵(WORLD)/投影矩阵(TRANSFORM)以及视点矩阵(VIEW), 使用设置在D3DDevice上的矩阵, 如果不指定这个标志, 3个矩阵自动改变为屏幕空间座标
3 ]0 B. q3 [- H8 q1 S/ M5 e D3DXSPRITE_BILLBOARD BillBoard, 很清楚吧, 所有的Sprite都全部自动旋转来对着观看着
1 i+ E2 M2 Y$ W6 N- s4 i; R D3DXSPRITE_ALPHABLEND 让Sprite支持AlphaBlend, 很重要, 几乎每次调用Begin都要指定此标志, 另外, D3DRS_ALPHATESTENABLE 状态必须设置为 TRUE, D3DBLEND_SRCALPHA / D3DBLEND_INVSRCALPHA 分别为源混和状态和目标很合状态
F Y9 q/ i5 \7 T D3DXSPRITE_SORT_TEXTURE Sprite会按照渲染先后排序, 当渲染在同一个深度的Sprite推荐使用.
. w H, H* }3 J D3DXSPRITE_SORT_DEPTH_FRONTTOBACK 按照从前到后的渲染顺序对Sprite排序, 当在不同深度渲染有透明信息的Sprite时推荐使用./ s" G6 O T: p2 Z: ^8 W/ M
D3DXSPRITE_SORT_DEPTH_BACKTOFRONT 按照从后到前的渲染顺序对Sprite排序, 当在不同深度渲染透明Sprite时推荐使用
7 h' N2 X9 \$ p! p 一般就是D3DXSPRITE_ALPHABLEND, 或者根据需要再加上D3DXSPRITE_OBJECTSPACE, 其他的我都不怎么用.....
% L7 i. N& U! J K5 l 中间的绘制代码使用 pSprite->Draw, 函数原型为:, C) a& e6 \8 q7 N
HRESULT Draw(7 a9 _" z2 a8 Y( E8 B
LPDIRECT3DTEXTURE9 pTexture,6 S9 Y8 ]! e/ U' }
CONST RECT *pSrcRect,
$ ^3 u" u+ T# v* x# K! A6 a3 S3 U CONST D3DXVECTOR3 *pCenter,
0 S3 y0 e4 G/ e2 y6 j- |7 o CONST D3DXVECTOR3 *pPosition,( z$ _& S5 N$ Q) P, {, o7 L
D3DCOLOR Color );
) \5 q, @) V4 p1 b! o+ ~/ e pTexture 是需要绘制的贴图
; p. _. t/ H( D& i7 }0 H pSrcRect 是需要绘制的贴图上的一个矩形区域, 绘制整过贴图可以指定为NULL.
. i4 t8 J1 A3 m/ B* N9 x" m: C& @ pCenter 是绘制的中心座标(旋转时会以此点为中心), 指定NULL表示中心座标为(0,0,0)
0 U5 A6 A% {5 r: \/ i6 V8 u pPosition 是绘制的位置座标, 也可以指定NULL表示(0,0,0)1 W1 x: Z& C( p; q1 }
Color 是绘制的颜色, 一般情况下指定为 0xffffffff. 最高位到底位的各8字节为Alpha, 红, 绿, 蓝, 如果指定0x80ffffff就是半透明贴图. 如果0xffff0000就只保留贴图里的红色分量, 具体功能自己体会. 当然贴图本身可以包含Alpha信息.
! W; M$ `8 I6 o% q& r8 T 需要旋转等功能可以使用 pSprite->SetTransform(), 函数原型为:
& w# g# O& X; y" k HRESULT SetTransform( CONST D3DXMATRIX *pTransform );8 u# q5 a) W3 F L6 e' w
相信这个不用解释都很清楚了吧.2 F2 ^& c5 {: m( g
最后再提醒一点: pSprite->Begin和pSprite->End 必须成对的出现在 IDirect3DDevice9::BeginScene 和 IDirect3DDevice9::EndScene 之间.4 i: S! J; E$ L, N
0 |& b' C2 }8 L$ v8 i/ [+ N! Z原文出处:http://www.dingge.com/forum/dv_rss.asp?s=xml&boardid=46&id=5581&page=1 |
|