最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。: Z- g0 O2 Y. Z8 f) V$ O; f: k$ U6 s
- ?" }# _; j; O" ?OpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表," K2 G/ M% @1 W. `5 I, c
然后用glCallList把显示列表显示出来。: m7 H! M8 _( K# W: X
& v/ p0 i: |7 t
下面说说汉化思路6 m1 L1 P7 g% y. E, s
思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的
4 ?, ^& B; m" B3 a1 J. b 中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响,
+ |& G" k( H% v6 l: K" N( D 但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
3 H: h4 r0 R" B3 |' L 下面的帖子可供参考
9 f/ Y4 T4 _2 C& j8 C3 f# O/ E Win32下OpenGL的中文显示1 Z0 f1 L* p3 W3 d3 k5 {4 ~
https://www.chinaavg.com/read.php?tid=20406
1 |, w. j8 R( ?3 n) O. |& @( V* l% B- k% C+ ^$ i; E, @. f
思路2. 根据我的理解,游戏更新画面的过程一般是这样的) T5 i$ E7 _) E; N
. x# w7 O" h i" F% M& q" w
更新画面函数(区域1)
. x% O1 N$ B% T# ]2 G9 l 更新画面函数(区域2)
6 j2 Q9 L1 i8 c& X8 T( O 。。。
% z# C1 U& T) d6 W* X 更新画面函数(区域3)2 z {8 _7 W1 J5 f4 M& B: h
显示函数(字幕1)
7 J- Y: A; V8 P9 X* A$ k 显示函数(字幕2)$ f* l) L, l* P0 x$ z1 k
。。。, R- H3 \) u! Y+ T8 s1 z
显示函数(字幕3)
3 K9 ?( g/ n. j- |' _ SwapBuffers(wglGetCurrentDC())
& h0 K I8 A# q1 m* N
$ X; F% a& q0 k) w! o. X 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。
2 s" d% Y6 c1 t) L1 q- c 8 M( K6 A0 I; d/ M1 C! h% [3 h
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |