最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。* k4 |+ a9 Q/ T# t; e( s7 i. Z; j
8 w" h2 x5 b- K% P* U0 u2 C6 A4 SOpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,
8 x3 x1 _. H. d8 n. Z, B& D然后用glCallList把显示列表显示出来。
2 }- D1 {+ v; R9 J2 t3 N' |+ W6 j
下面说说汉化思路
, R6 d* r( v: ]思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的( s# { T9 n& [5 e# Y& j0 B# b
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,& P/ n& [& }: D& E
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
! c4 A( z! c' A/ V s! z 下面的帖子可供参考
# Q; m) R) @* l6 X" Z Win32下OpenGL的中文显示
3 e8 r3 `" f u% {8 W4 o: ] https://www.chinaavg.com/read.php?tid=20406 p. C6 k& o! j+ d9 i% j3 q
9 s3 a5 w9 m2 \, W7 c思路2. 根据我的理解,游戏更新画面的过程一般是这样的# D% f+ N9 o5 J3 }; S9 Z+ {. B
9 M& u( P6 y# u# q8 \- N# B1 A 更新画面函数(区域1)
5 P; M% r4 x% ]4 U3 ~4 j5 F 更新画面函数(区域2)
+ F! a2 P$ S9 {# j6 L 。。。
' y$ {: b1 s# C0 r 更新画面函数(区域3)
9 M# S- s: }2 _; P7 T) @ 显示函数(字幕1)
8 S$ t* J- L' |' F 显示函数(字幕2)
& V8 Z9 R0 X% V; h3 ^1 Y9 @* q0 [ 。。。
2 H9 L; W" i' Z" W' w6 a 显示函数(字幕3)
9 u6 l8 X! n7 x b7 X SwapBuffers(wglGetCurrentDC()), }+ K8 d6 k, O) u/ H8 q" x+ G
( }6 {% Z0 s F8 e( u4 { 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。
) F2 B B' o6 l3 @. K8 F, U8 V + a* V5 ~: D6 \- T# d3 F# Z
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |