最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。
& p( {+ t6 Z2 D7 H" w/ Z
3 s: g7 W S" I! j7 |OpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,, Y" m6 e5 }- L8 E
然后用glCallList把显示列表显示出来。0 ?$ Z- ?, s; \& t7 M6 ~
5 X n6 @3 _& E. s; w
下面说说汉化思路
0 V. _3 k' m" r5 @思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的4 e! O, J5 T/ S: A* H
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,
0 z: W$ ^* W8 i2 ]9 B) l% C 但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。! f+ o. J" g5 Q( O
下面的帖子可供参考
/ ^% Z: A" S" s# X Win32下OpenGL的中文显示) t* ?: G. }3 w8 r- b# h
https://www.chinaavg.com/read.php?tid=204064 D2 l2 I/ E$ x+ I1 b$ n' a
. y: G' y( k& _0 ^思路2. 根据我的理解,游戏更新画面的过程一般是这样的$ C4 O; @ F" v/ o9 _6 r
9 r# l H! I. z: s2 }; D& m
更新画面函数(区域1)
; M9 q! r& S3 @* @5 f 更新画面函数(区域2)+ j" g5 O) p1 X' H$ B
。。。
2 N8 ~0 g7 F# ?1 @ 更新画面函数(区域3)
5 H( d" F, \0 R! H7 P 显示函数(字幕1)
- j: {4 j4 v! s, }: O 显示函数(字幕2)
) m; j- K1 A7 z1 @" X! Z& c 。。。
: Z1 @4 ~* n, `5 \- Q T3 j 显示函数(字幕3)
( @2 a- `9 W8 L5 W7 f SwapBuffers(wglGetCurrentDC())
) ?' \/ o$ O7 T& q
; Q6 x4 }- c- K% W; q8 m3 T3 m. K 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。) V' X l. H; T4 t h4 j' \
! y% T. P$ \8 b/ t! y% H6 X
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |