最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。0 P8 k8 _! K* Y5 o! z7 G/ `
& K+ S9 D8 [0 B2 ?8 hOpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,. N+ ?% b4 w# _' ~
然后用glCallList把显示列表显示出来。
9 _8 ^) f: z4 ~8 ~$ Z, a" m
/ o( F2 X+ v Y* g3 }下面说说汉化思路
- y8 ?3 e, f) y# t# [, _思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的
. w. D u; O: }: n% ]6 p+ L y' {- d 中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,$ {+ p2 O0 g s( }8 {9 k7 U- ]4 q
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。! q9 v6 {1 R+ f6 J9 ? J _3 ^
下面的帖子可供参考9 o$ L ?( v/ S; ]4 x! J
Win32下OpenGL的中文显示
5 R3 i9 B; s+ b# l# Z' e8 ` https://www.chinaavg.com/read.php?tid=20406- C$ d4 q6 e7 R( @, F) j# \
" V" p6 n6 e* Y4 e思路2. 根据我的理解,游戏更新画面的过程一般是这样的) Q8 I( ^. f+ H$ k
: Y9 [- A1 x ]! Z* Y& W5 V4 x( n 更新画面函数(区域1)% z. K* Y+ z% X8 m7 y) w# {
更新画面函数(区域2)$ L- z \! b& l
。。。
% ^9 M; u" d, P7 h 更新画面函数(区域3)
9 k9 H! H* T% l0 C/ A5 G0 b% J- c- W 显示函数(字幕1)/ S4 E u3 L# r4 d
显示函数(字幕2); x) _9 }: _ b. ?+ W' p% ]1 B- R
。。。
6 \! X! @/ E% X1 U; x2 | 显示函数(字幕3)
; v. W1 D- `9 X SwapBuffers(wglGetCurrentDC())7 a1 _- @: H2 Q* M2 D N; R
$ u; V3 R4 w" B5 e* S6 w
所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。
9 z: A# Y9 s3 \" H7 Q; O
9 @; k" s# A/ q$ P" M1 I) p 先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |