最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。
1 A {6 \) ?1 y
3 u1 T" f- Y/ g6 C, \OpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,% M b' O* H6 m/ y8 r
然后用glCallList把显示列表显示出来。! H8 }/ w4 Y& w, f, M @$ T
6 m: L1 a& N4 x L" F1 ?' v
下面说说汉化思路
( n( X& {; _0 o% v% p思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的
4 s8 \, b6 h. `) y1 J8 U 中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,) e. T4 i) F+ ^8 f# }
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
" n+ r5 E" C( C# A# g) n; [ S 下面的帖子可供参考/ p4 P1 b5 I7 R; |9 I2 R" W
Win32下OpenGL的中文显示
: Q/ N" {# Q; g4 u1 |* K) ]: y https://www.chinaavg.com/read.php?tid=20406# Z0 d7 k& z9 C$ l2 A& o
: T+ F$ k" V0 M5 @# A思路2. 根据我的理解,游戏更新画面的过程一般是这样的
" N6 [5 ?3 |0 \2 H4 f8 n
, H; `5 y/ k& X: ~ 更新画面函数(区域1)
8 Z: F7 U3 O. e" i3 M% p 更新画面函数(区域2)1 }& ~+ e9 D9 E/ O
。。。/ Q" ^* V; X/ T9 c5 U- ^
更新画面函数(区域3)& b) @$ C* E$ i$ C: f* T' N
显示函数(字幕1). k# u! D) X- z/ E
显示函数(字幕2), A* Q/ N& l. ]# W* R: s' r
。。。
, ]9 h6 n2 V: S6 u8 d' ] 显示函数(字幕3) " n5 d! C/ _, G' @, W
SwapBuffers(wglGetCurrentDC())
- ~' o3 s- U {+ V
# t# ?0 y5 [ N! L1 T 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。
( h/ E v' J T8 [ * `2 R- ~* o" t. ]2 c* H
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |