本帖最后由 solidji 于 2011-7-5 14:52 编辑 + x* I% G) | r/ s* }& ^
c, w& ]* N% d' ~重新做一张更方便
( v. z3 u Y Q* G如果非要加在后面,也可以自己实现
* o- O3 g' y4 a* `我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库
, s n: q1 L& N% x7 l首先+ T& N% U1 Y, Y7 L5 J8 U3 E
CreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存
7 F" {& {6 H: s& A- \4 f$ Y& A g_pFontVertexBuffer = *ppVertexBuffer;# d% P! g# n$ s' r0 L) F) N2 ?
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);
; [ q$ n. N+ ]& x g_pFontVertexBuffer->Unlock();+ j# h A4 u6 x3 i
5 S c6 E) ]7 L, t; S5 n( J
CString font = _T(".\\font.bmp");//这个是自己要添加的新的字库7 M% j! F1 ], s) d
D3DXCreateTextureFromFileEx(+ H' K) G7 q2 l1 o) n7 v1 v
m_device,
# H; ]# L0 A) j2 h! |" G font,( \8 A- b" m* M/ i! z& m/ p
D3DX_DEFAULT,
& U4 f# }# F" |, T D3DX_DEFAULT,
7 y, Y0 {9 O- f3 E( d+ q W/ n D3DX_DEFAULT,
4 p4 z1 F7 F- P: I5 X 0,) q* I8 A' x3 s: g* b
D3DFMT_A1R5G5B5,/ N+ \9 o' B7 F
D3DPOOL_MANAGED," i# ]) P9 m# ?( s* k9 |+ U$ `
D3DX_FILTER_TRIANGLE,9 ^* r1 [. P6 K! x H. [
D3DX_FILTER_TRIANGLE,
' P# G/ j9 X& P& ^; O: k D3DCOLOR_RGBA(0, 0, 0, 255),
: [) w5 F2 n0 ^7 _4 H! m NULL,
4 Y I6 s9 O* B NULL,
}& M+ \6 Z9 i: }$ [6 w &Tex);2 f6 H0 k& k& T. F5 K) S
% M3 e: O, L8 e4 ?$ ~IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);. q; E) i1 \+ H) l: G
把Tex里的数据lock到pbData& q f3 f6 ~6 a
然后把pbData里的数据copy到mem接在原本的字库后面
, s. i% e8 ?# m' xg_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);8 K: h |5 n' b& h. g
memcpy(pbData,mem,len);
j# j& D( B3 @) j: \ s. Yg_pFontVertexBuffer->Unlock();
! n$ h! s( r. o, S
$ Q X, u" G2 w& ^% R' i8 _最后保存成TGA6 q" V$ p) h/ y; v
D3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);: U: b G H- A9 o" ?) Z
6 \1 H3 |9 j% m4 l* ]这个代码我没调试随手写的,表达下思路而已,不可照搬 |