本帖最后由 solidji 于 2011-7-5 14:52 编辑 6 K7 I4 y Y$ D* t
. r U6 y# e: S5 ^+ y8 Q: [重新做一张更方便! x& U$ n' @% u6 E9 U; |: ]8 N' O5 F
如果非要加在后面,也可以自己实现8 U' h" \( ?5 I w [
我给你提供个思路。我们先假设原来的字库你已经找到,并且是纹理图片字库8 ?1 B, i9 p# `1 a8 u! d/ d" T/ x
首先' j" ~; T; L. _- n7 Q2 u. i
CreateVertexBuffer(sizeof(CnFontVertex)*6*8192, D3DUSAGE_DYNAMIC, FVF, D3DPOOL_SYSTEMMEM, ppVertexBuffer,pSharedHandle);//创建一个包含8192个字符的足够大的字库缓存
9 `& x( ^! P# c4 A/ y g_pFontVertexBuffer = *ppVertexBuffer;$ y# ?; p' c) K
g_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);
4 Z* m, {& }. z0 b! E g_pFontVertexBuffer->Unlock();
* D5 |/ w& H% j. Q3 Y: ~1 N& m
. P; W2 g% }, t! p$ j! W7 cCString font = _T(".\\font.bmp");//这个是自己要添加的新的字库
' @( R1 ~( Y# x3 H$ g D3DXCreateTextureFromFileEx(
4 M; @2 L; w; C# U( Y9 f4 \ }% U* ^ m_device,$ J1 o* L$ R: @, S3 ?" H; Y
font,5 Q2 J5 Y1 S: }7 N; e9 Y- G7 o
D3DX_DEFAULT,7 P \# q; \4 J% O- h
D3DX_DEFAULT,
4 G T1 `6 r# g& q: v( k D3DX_DEFAULT,
$ G: o; X; X7 Q2 [3 } 0,
( h- z* {9 K8 {. o+ f9 `$ S( v D3DFMT_A1R5G5B5,& s2 I# A) N/ V7 l* e9 v) `
D3DPOOL_MANAGED,! j& f4 p- V: i! _
D3DX_FILTER_TRIANGLE,4 b' C X7 s/ f: G! D
D3DX_FILTER_TRIANGLE, $ p5 j9 x/ N1 T" v# M$ d$ b
D3DCOLOR_RGBA(0, 0, 0, 255),4 L8 y+ e9 B4 g
NULL,
* q8 s) D* b. ^. w$ j* \ NULL,% A L4 ?8 d y" S1 n
&Tex);3 [- P, B* G" Q4 F$ Q, Q
- {8 _4 F4 y+ p1 Q. }# q- k+ W
IDirect3DTexture9* in = Tex->Lock(0, pDesc.Size, &pbData, D3DLOCK_READONLY); {2 M2 d: w( Y- F9 h
把Tex里的数据lock到pbData
5 Q# E3 X. D$ {; K$ z9 G8 N然后把pbData里的数据copy到mem接在原本的字库后面
' Q: S+ v9 H' N+ }# o4 @: Kg_pFontVertexBuffer->Lock(0,Length,(void**)&mem,0);
) t# [7 }+ {8 U4 rmemcpy(pbData,mem,len);! C3 ^" w6 m8 ^, p0 d l0 v
g_pFontVertexBuffer->Unlock();
t, x% o: y4 ]# Z, T# C% @4 i
5 F! [& k H; R4 G最后保存成TGA
5 L$ m# r9 ~9 x6 t. kD3DXSaveTextureToFileA(“new字库.tga”, D3DXIFF_TGA, ppVertexBuffer, NULL);
Z8 X; M& n; G9 @% H; Y2 j/ F/ y- X) U+ t4 U ?
这个代码我没调试随手写的,表达下思路而已,不可照搬 |