本帖最后由 solidji 于 2011-7-5 14:52 编辑
6 Q% G4 W9 v2 a8 f/ K/ P C& D" [9 }9 }
重新做一张更方便, m$ i; B5 c+ f" S. Y2 q, ^
如果非要加在后面,也可以自己实现- \/ v8 T2 J. j( [
我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库9 L* q( ?( O/ R5 i3 l
首先
, s1 u9 f) s) Y& J8 f* }! Q7 N4 wCreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存
" M/ w2 Q2 {7 |; r- { g_pFontVertexBuffer = *ppVertexBuffer;
* b" @; M# u" P! X7 p, L g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);! s" }2 F8 K \; i( ]+ V" ]
g_pFontVertexBuffer->Unlock();
3 z; x, D/ G# n/ i8 }6 u2 g A8 X0 v; G t) o. ?$ D
CString font = _T(".\\font.bmp");//这个是自己要添加的新的字库
M" g. \- b$ N( _! h$ k D3DXCreateTextureFromFileEx(
8 k+ l3 G8 a9 W9 h m_device,1 S# z1 b" q2 T+ ~/ f4 i. a
font,
5 Y" w9 O( t3 b D3DX_DEFAULT,/ w* V7 \& o" r* m7 i) M
D3DX_DEFAULT,; B! ^% V6 u/ o- P# k9 V
D3DX_DEFAULT,6 z0 V$ g- U5 V
0,
/ \2 }1 s) B [. b* J D3DFMT_A1R5G5B5,4 c G, F# w8 e! b
D3DPOOL_MANAGED," Q L* M( P9 q |! V
D3DX_FILTER_TRIANGLE,
1 D9 A7 x7 u( Y0 I$ Q$ X$ P D3DX_FILTER_TRIANGLE,
0 o6 r2 D$ H1 b5 f& S+ C D3DCOLOR_RGBA(0, 0, 0, 255),
' B' T; V( _: Z( ?& P, | NULL,$ q% Z; b& ]# c9 {
NULL,. v2 w5 D1 w: w' C- X% G5 ^
&Tex);% K1 Y( ^ ^) _- G. A, K
" N9 n' W% b1 k+ I8 g3 ~2 e) f7 Q
IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);
' o; c0 I. ]0 ^" U5 @2 h8 @9 ?把Tex里的数据lock到pbData' s3 |2 E. b' H6 q3 Q8 E$ W
然后把pbData里的数据copy到mem接在原本的字库后面
" Z# @0 y* t0 h5 q# X8 Bg_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);% o$ \4 B+ m- P3 U* i
memcpy(pbData,mem,len);: R) S D: B6 d9 f9 y
g_pFontVertexBuffer->Unlock();
6 X+ p4 n' r1 _
. E+ o! `$ A% G( u最后保存成TGA
8 }, ^0 J7 |5 l8 `" n; cD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);' v- k" s6 g5 K6 l, Y
" W$ }3 F% O: a0 j: T这个代码我没调试随手写的,表达下思路而已,不可照搬 |