本帖最后由 solidji 于 2011-7-5 14:52 编辑 8 ~4 Y' r, a. {5 S$ w
- A0 `# C+ i0 u2 J重新做一张更方便# k3 w! C5 x: J& p6 D
如果非要加在后面,也可以自己实现
! Y1 I/ G5 o* t, A) b4 l0 M我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库
( m. w1 M* l4 ~, n首先2 C6 \6 L' z4 a1 H ?+ i& o
CreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存
( Q% b% Q* s0 L) v1 }7 u) s g_pFontVertexBuffer = *ppVertexBuffer;
0 _$ |+ Y: n) E4 T6 Y& ?( R* S g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);
8 c- U: Q. ` O$ C; p g_pFontVertexBuffer->Unlock();
/ |- Q3 V" a/ |$ {& \
! Q: W6 Y# ]6 A, W7 R- ~' I* xCString font = _T(".\\font.bmp");//这个是自己要添加的新的字库* K8 B# c7 [" u$ H& A; D% A2 Y
D3DXCreateTextureFromFileEx(
7 I' e F2 N" X1 I+ b m_device,
8 N1 e' m8 Y- ?! D font,
0 U; ?; u. w$ D0 l6 v9 ]. o D3DX_DEFAULT,
^. f7 Z. I& _; _' r0 @1 j D3DX_DEFAULT,
2 ^1 x% J0 q8 o) i% G D3DX_DEFAULT,4 |* p6 C6 T% ^( i" ^. U1 }' H
0,# x: `$ l( U4 R! c7 b {2 L9 N
D3DFMT_A1R5G5B5,
% k* B D8 @8 d S. | D3DPOOL_MANAGED,8 s* ?( D4 e( D" E5 u6 M
D3DX_FILTER_TRIANGLE,
5 A6 ^* U: X i D3DX_FILTER_TRIANGLE,
7 f* |! L4 u. C+ w- o0 B$ D D3DCOLOR_RGBA(0, 0, 0, 255),
9 J' ~/ p1 A9 @; @3 R: ^ NULL,
/ ^0 [2 w( ]# v7 d9 q, H NULL,
; Y3 f! v2 U0 s1 |2 K &Tex);
8 k5 b9 q, D: Z p7 s6 Q* K4 V' t
IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);
J9 o0 J: }) {把Tex里的数据lock到pbData
( @( A/ {$ j' O然后把pbData里的数据copy到mem接在原本的字库后面
* Y& V1 d3 | F7 n4 `8 Og_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0); D; C6 o/ g: p' N$ e Y
memcpy(pbData,mem,len);+ Z/ t6 w, `/ P2 e) [. p R* q3 b
g_pFontVertexBuffer->Unlock();& @( U1 X5 `! N
: W# w5 B4 E) d: |. N
最后保存成TGA
- w, ?% k% ^. w! Z& J+ l% QD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);
* f( i7 {; a# S7 ?# ~7 {; L0 i' o" U/ n1 v
这个代码我没调试随手写的,表达下思路而已,不可照搬 |