本帖最后由 solidji 于 2011-7-5 14:52 编辑
. [( p& @8 I3 D% k: r7 I& Y1 `+ W s$ e0 ^' a/ K: r+ v0 g
重新做一张更方便( O1 p5 [/ i8 u$ z; E
如果非要加在后面,也可以自己实现
- `: c" o: {% h1 ~: j% G我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库
$ I0 H- D# F# c首先# f( ~% p/ Y0 x! c
CreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存/ K+ w! q8 ]; o; @
g_pFontVertexBuffer = *ppVertexBuffer;
9 @% k! l4 M+ v- I! D' A g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);/ N$ f i* [' l: z" I
g_pFontVertexBuffer->Unlock();
- a L/ j" D K* V
6 W9 F8 n: @6 m* r% Y z! ]CString font = _T(".\\font.bmp");//这个是自己要添加的新的字库
$ x! s6 a0 V0 S D3DXCreateTextureFromFileEx(! X H5 [: ^3 H' n& u
m_device,2 o! H- { K; G/ A
font,
4 z6 `4 d6 }, Z8 u6 _& S D3DX_DEFAULT,) \: I1 L7 n6 |& W
D3DX_DEFAULT,0 Q. a2 k3 G5 B" C
D3DX_DEFAULT,9 \1 o. p/ c2 C, Q% d- F/ C! g
0, u7 ~5 @( t- i8 u+ P
D3DFMT_A1R5G5B5,! P8 r, B& V$ _ j
D3DPOOL_MANAGED, _2 n# X+ l/ n7 b0 S% ^# n
D3DX_FILTER_TRIANGLE,9 X" j6 ^1 k1 \" e; q: G
D3DX_FILTER_TRIANGLE,
% Y1 O' _% J! B0 H; j/ l; ^ D3DCOLOR_RGBA(0, 0, 0, 255),1 V) m- v! V1 D' i
NULL,
, h( S- n* e) {# b8 Y) `" x NULL,0 j7 W3 E, Y: g
&Tex);' A+ w; J. }' F+ o" ^) C# f1 q
% X0 O: I5 i# @) e
IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);
! t% |6 n7 m9 Q, f/ Q- S把Tex里的数据lock到pbData/ X( Q( Y/ I3 Y( a& ^9 m
然后把pbData里的数据copy到mem接在原本的字库后面+ X2 C" }4 i% p. J" [+ }% a! w. g
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);1 }- H* B C- N2 R* w( K
memcpy(pbData,mem,len);$ o7 u+ I. |- R q. t. f1 P8 b
g_pFontVertexBuffer->Unlock();; }$ ~' z0 P) S% h5 f# E
# h4 ~/ Z; ~/ j
最后保存成TGA
8 b. @8 ~4 H9 FD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);+ G' q+ y& j- @; r. L9 _1 d
& @$ g( g8 S' e& r$ K. a4 ?- i这个代码我没调试随手写的,表达下思路而已,不可照搬 |