最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。8 E7 v. b$ h4 l4 p3 O# f/ t
( M, P+ x- K1 q# y, |* m- D# mOpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,
8 C ~: c: g8 G; B然后用glCallList把显示列表显示出来。4 A4 r w6 b+ a2 Z3 [3 h
$ `6 H9 d' J! r8 @0 v" V下面说说汉化思路6 J1 m! @9 D/ }/ N' H& D( [
思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的$ f9 m) W5 N8 a. V4 b& {9 ^
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,6 k9 `8 h3 W$ O, z! @' H
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。# L* k1 n' b3 }- b
下面的帖子可供参考- p1 ?6 X1 j7 K! Y* t
Win32下OpenGL的中文显示
" Z1 a; a( }- Y https://www.chinaavg.com/read.php?tid=20406. q) _9 h2 f* N( m1 j# L7 X# [ o
$ c7 _ W" z+ |* g
思路2. 根据我的理解,游戏更新画面的过程一般是这样的% G6 @ N% U" C0 Q, |( H
7 G k o3 I' B6 j/ A' H( G/ h3 T 更新画面函数(区域1): N q( g# S7 A: a
更新画面函数(区域2)8 u; R) o i( h
。。。
" R& a- x5 z* `) r6 ]' S+ k) ?- X* k! J. t 更新画面函数(区域3)- Y4 @5 Q: \! v/ p/ h0 |. ^
显示函数(字幕1)- l- q8 x6 n% [" D9 N* j
显示函数(字幕2)
$ m, F5 |8 Z) [' D0 o$ Q 。。。
; J" |' j% P5 p 显示函数(字幕3)
3 h; D# Y5 f1 K' d$ V1 m* ` SwapBuffers(wglGetCurrentDC())1 k0 w9 B% b! l$ _0 g
. h; T3 Y( n0 Z. q
所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。# i# l4 R# ~7 o+ \: E# X/ V
' U4 x0 y9 a; A. y# M" W' T
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |