本帖最后由 solidji 于 2011-7-5 14:52 编辑
- z- m# @8 n F8 g$ s( \. \3 p, C6 D5 R( i
重新做一张更方便
' J) T" I. }6 k* n, o如果非要加在后面,也可以自己实现
3 _ F4 W K8 d# @; C9 F- a& a我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库8 c/ F' v& Y9 j7 `# K& ~4 w7 o
首先
& e) u! d" W$ y4 l9 J& @7 a: sCreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存" T1 K5 _% \9 k5 w% w
g_pFontVertexBuffer = *ppVertexBuffer;( {' r7 c2 L% x
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);* ^" N2 H: m$ e7 Z" h
g_pFontVertexBuffer->Unlock();
2 `% |- b- Y* l! \
. ? L$ D6 _0 o3 x2 cCString font = _T(".\\font.bmp");//这个是自己要添加的新的字库
" ]/ ?) W9 c( G# b& b. G D3DXCreateTextureFromFileEx(/ U1 L1 Z5 N: D% m5 V
m_device,
, Z& {6 X1 Z3 ^: N2 A% i font,. r6 ` p: ~# M" i( C" q
D3DX_DEFAULT,! G" y% v) O5 r4 h7 G. q
D3DX_DEFAULT,
& ]5 A$ ?0 c5 g D3DX_DEFAULT,; a0 t; ?" z; _, t
0,9 `8 `5 f5 d2 n, I5 J3 ^2 q% x2 F
D3DFMT_A1R5G5B5,; q- {7 q4 h9 w) _
D3DPOOL_MANAGED,
* R& p' Z7 Q' o D3DX_FILTER_TRIANGLE,
! w8 ]8 H' N0 d4 J i4 g: V D3DX_FILTER_TRIANGLE, ! @& E7 K. ]/ @, f% f
D3DCOLOR_RGBA(0, 0, 0, 255),, R% S8 Q7 M4 Q: \; T
NULL,4 F& [, Y4 S* ^8 _* W6 z( ^, X
NULL,
! ^& L: W: S" O) h+ i/ X5 ^ &Tex);2 R/ R3 X- f# `/ Q6 y
( [/ D: M3 k( eIDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY);
$ {5 U$ Y1 y2 R9 g把Tex里的数据lock到pbData
+ b' J& z! H& E& C6 W然后把pbData里的数据copy到mem接在原本的字库后面/ G2 w7 u M% L( g
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);
1 Q# ~, p$ M7 _" h$ i; Tmemcpy(pbData,mem,len);- N+ Q% @& U4 o/ s: Z) }4 @
g_pFontVertexBuffer->Unlock();
0 `9 V5 W4 }7 `% ~0 p2 b" ]2 Z
7 D- W0 _: b2 N& P2 h2 ?/ ]最后保存成TGA
7 J- X* _+ w. YD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);
% V; U% P; d2 ]) P9 {" Z0 r# w# [5 m# u% j: k8 ]. o/ J Y8 M: V0 n
这个代码我没调试随手写的,表达下思路而已,不可照搬 |