最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。. T4 ]# q# ~; p6 f) N. p5 u
) o( ~* j+ b- Z6 ~5 n) \* P9 T8 IOpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,
5 d# w: w1 J+ G% h0 p然后用glCallList把显示列表显示出来。6 M8 L9 l( f/ a: O4 v( n
# b7 ?- b; D! k Y- U4 z9 d# u下面说说汉化思路
, f+ E& y0 k, J6 i- X8 D9 k' R思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的9 ?" w( `7 s+ Y% F E0 s* i* k
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,( E( e! L+ b& P4 x A
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。) Y3 R# d& C- i% m! H- G
下面的帖子可供参考8 P8 K, h2 B! g X, v6 j$ \
Win32下OpenGL的中文显示& @. ^# M: S) O& `" N2 [% F1 Z9 n
https://www.chinaavg.com/read.php?tid=20406; C7 J$ @5 Z- `6 U- _% C' E0 j
* h! b) L; Y4 `* G+ e' p4 L
思路2. 根据我的理解,游戏更新画面的过程一般是这样的
9 ]" R0 y9 z2 j3 w6 N$ p0 u1 s
/ x7 u3 y P7 w 更新画面函数(区域1)
% |/ {' m# ], f5 q% H$ k2 J 更新画面函数(区域2)
& F- H+ e; R7 e6 q 。。。
0 ^- I' x Z; o4 S6 i2 d 更新画面函数(区域3)# N( ]' i( Q/ z: {5 F9 V
显示函数(字幕1)2 i1 t s' }+ j$ V6 d# [5 N
显示函数(字幕2)
# ^* _/ ~! |; l* y$ X7 }- K 。。。7 z% \. r7 O: a1 G+ L) s
显示函数(字幕3) ; f) m K0 j' w" w$ [
SwapBuffers(wglGetCurrentDC())( H; q3 [5 \. y; x2 [2 v# f5 T1 L- W
* I/ x+ Z2 C# w; k 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。3 j, c2 T6 y: \; ?
4 \$ Q9 i6 L# u; } p6 M( A, w, [0 B a 先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |