本帖最后由 solidji 于 2011-7-5 14:52 编辑 4 C& s& g6 u3 z* N/ ^
" T7 q# i+ ]- |( _重新做一张更方便5 F5 ]6 ]5 J! w! X- V: w
如果非要加在后面,也可以自己实现! _3 V6 `, u6 T( j
我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库
3 A) G/ X8 _& Y4 {& M3 m首先
' I" a# z h$ l* \! @! aCreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存
/ v/ t8 T- t% j( t' l$ Y g_pFontVertexBuffer = *ppVertexBuffer;6 _+ M" }9 K$ _$ T/ ~
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);/ Q& I7 Y3 z- z! \
g_pFontVertexBuffer->Unlock();+ p+ ^" [5 ~ A2 e: y, Q, q6 [
o3 J4 p4 f! SCString font = _T(".\\font.bmp");//这个是自己要添加的新的字库
1 o# s% e4 A/ Z' G1 O& G, C) d D3DXCreateTextureFromFileEx(
" L3 H( h" z. [( Q6 q m_device,
% ], @1 q) U" U4 H) V font,
) M- [6 d# T# P* k. z D3DX_DEFAULT,
) S0 Q: w+ O" ?, L, H" V5 _ D3DX_DEFAULT,
$ g* E9 Z' W/ H* d( ] D3DX_DEFAULT,) ]: l+ `9 m/ [, E" f% h" y3 a
0,4 U3 O% }" ]7 { S) b6 H+ H% U
D3DFMT_A1R5G5B5,
( t; z/ }! x1 F, Q D3DPOOL_MANAGED,5 {, \; I' d5 N9 p
D3DX_FILTER_TRIANGLE,0 P+ Q" `# V3 u$ T/ l3 B8 ?
D3DX_FILTER_TRIANGLE, # z0 O0 b6 K% J5 ^$ a: g
D3DCOLOR_RGBA(0, 0, 0, 255),
/ Q2 _ {+ x: [3 p* H8 x NULL,
/ F! Q: [$ {' X( Y" v: \ NULL,
3 K' D+ z& ]% w& j1 T" O4 N &Tex);
' z2 H1 {6 c; k8 _ t: x! m+ H4 U# k& n& i
IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);9 @, @( }3 t& r. C) O7 w
把Tex里的数据lock到pbData
: J/ v7 S* N$ ~* v然后把pbData里的数据copy到mem接在原本的字库后面& M: ]0 y: I7 W3 L' H6 z
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);1 {! K1 `% |) m$ q2 O0 a( E
memcpy(pbData,mem,len);0 X9 y) {0 Y0 A9 M% v
g_pFontVertexBuffer->Unlock();
: Q' r3 P! U5 y# G
( U( x5 }3 U$ j& Z) G最后保存成TGA
4 H$ R) u7 k3 K e" }7 T" S4 `' J. FD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);# d4 z# K! [7 G: ?. Q; V. b
2 ]8 ~5 F e# e1 w这个代码我没调试随手写的,表达下思路而已,不可照搬 |