最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。; d4 t; ^5 G& a$ f0 w1 \
8 n( c4 J% p9 a* O
OpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表, Z- _9 s* D4 f
然后用glCallList把显示列表显示出来。( v. M( o: \8 X8 G; J7 q
' T/ Z" _. R+ p; s下面说说汉化思路4 z: F9 o, [* J* e& k2 b
思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的
# C7 E, ^/ I/ r4 ]% S* f 中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响, e! l2 h& |. E
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
/ a* V+ j5 o" c% R 下面的帖子可供参考
% z8 ]2 Y$ S. ]$ r" d+ ?: | Win32下OpenGL的中文显示
h7 b3 q/ W1 g1 X https://www.chinaavg.com/read.php?tid=20406% ` c1 I r _) P: n, H8 R8 u; m
! @, U9 [8 A) N8 e# ~' n3 g思路2. 根据我的理解,游戏更新画面的过程一般是这样的* ?% N0 X9 w' N" \1 ~: f6 N( L w
) i0 a4 U3 X! R( J
更新画面函数(区域1)
, ?$ @5 F) h9 o# W 更新画面函数(区域2)
- N2 G/ _- E# j0 Q& t, V+ F, v 。。。
8 _8 g" ?9 @) t. | 更新画面函数(区域3). i% G1 P/ O* d' A0 E: J
显示函数(字幕1), Y' Q9 ]' ^5 R2 M- o
显示函数(字幕2)4 a+ t3 M8 l' ^5 J" T3 U
。。。
. i/ D$ }+ e+ y, A; |. j6 V 显示函数(字幕3)
$ Y! X8 Z2 i7 R) t& ?4 h2 F SwapBuffers(wglGetCurrentDC())% c% K& P, H; e m) x
9 I2 `& H& ]) p) ?" W 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。
& x. P0 l' t8 Z; h7 t
7 g C1 R; g( u 先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |