最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。& K; @' D# `; o) ]
& Y# G9 @( t8 Z/ x R( L. hOpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,* G& U7 S7 E$ T# i, V7 ^8 m" D
然后用glCallList把显示列表显示出来。
. E) s: m0 s! K- `8 x9 \8 V$ u" w6 J$ D; G) x% ~3 @% m2 S4 v S* | n
下面说说汉化思路
5 Z( n2 ~+ {9 H7 A思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的0 R. d& z% M: I; o
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,$ B! w0 p7 c4 y2 {! x! {- R' L' ~5 c
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
$ `" l( F0 P7 T( \8 } 下面的帖子可供参考
; ^& Y( ~# o" X) T Win32下OpenGL的中文显示/ z2 Q$ l' U2 O; P$ A" s9 g+ O
https://www.chinaavg.com/read.php?tid=20406
4 r) n: O2 v! j* Y3 {" [
; e0 t: Z @) ]思路2. 根据我的理解,游戏更新画面的过程一般是这样的1 J) L' s: [. E& p4 p7 T
6 |) N7 a* L4 W
更新画面函数(区域1)
2 h4 z" P6 v3 |* M# V# Q, Y) V7 e 更新画面函数(区域2)
# v( {( k+ ~! ]$ P 。。。' N6 t& L6 t- p* p! S a
更新画面函数(区域3)
& J$ \, {. f. |* O. o# |' U; ] 显示函数(字幕1)& q/ F W# C% G0 q
显示函数(字幕2)
$ v/ j- `- V( Q/ B1 z R: t 。。。/ n) c' X# r/ f/ a
显示函数(字幕3)
6 ]: W, k" t! f& l) R6 R K. W SwapBuffers(wglGetCurrentDC())
1 D$ _8 W& r |+ R1 B+ f7 Z$ D & G! l! f, I4 {; _% N# i+ I
所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。, O! D6 q3 C) y+ p, ~7 t
) Y* N) [+ r/ C3 O: j 先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |