最近对OpenGL进行了一些研究,有了一些新的思路,先写下来备忘。
/ q6 ~" d" h5 O, n! w3 x- T) Q$ Z! E4 J$ k
OpenGL的汉字显示,简单的说就是先用wglUseFontBitmaps函数把所有字符生成显示列表,9 @/ \& c0 C! e
然后用glCallList把显示列表显示出来。
6 [3 X& I: S7 v5 @2 A/ E! m8 p, B* `0 b. B# y( t- V
下面说说汉化思路
4 C! d& D3 r2 ]9 i, H思路1. 英文游戏一般只生成了英文的显示列表,所以通过汇编级加大显示列表的容量,把所有的/ @* o, T; q0 G+ w
中文字符都生成到显示列表里面,估计就可以实现汉化。当然,程序的性能可能会有影响, y% W# X! y& o" m) N. K
但是,我认为生成显示列表一般在游戏初始化的时候进行一次,所以问题应该不是太大。
|6 y2 N% D u) _( X" ]8 @! F 下面的帖子可供参考% I; x9 P: T: b) w! Y
Win32下OpenGL的中文显示8 G9 L/ F7 V( |* l2 g }! c/ x: c( D
https://www.chinaavg.com/read.php?tid=20406
5 U8 s2 x5 n8 m) n1 r- c' h+ Q$ d8 J* h6 U7 W1 H; c
思路2. 根据我的理解,游戏更新画面的过程一般是这样的& e7 i# R6 O! B; }- I9 W- o
/ s0 F1 [/ X9 f2 U- |6 O& u" A4 W
更新画面函数(区域1)
! `% o6 V$ R( ?2 S% S. P 更新画面函数(区域2)
1 w' `5 L; l5 w+ d/ a9 ?! u; f# P 。。。
6 z' c" ^" q8 M$ |' ~# D, m- H3 p7 X 更新画面函数(区域3)
: K0 W. Y6 G' J. U* F# k 显示函数(字幕1)% G0 G9 s4 M7 a+ u/ S& G
显示函数(字幕2)& Y9 p* ]# ?: b. s: S; p; p9 @
。。。' c% m' i( \3 ?; D
显示函数(字幕3) 7 A! Z5 j; P, ?! q5 P
SwapBuffers(wglGetCurrentDC())
! R5 t0 |! W @+ d8 w& O! L
* L. S- F: U5 S 所以,在显示函数的入口处,我们可以内挂一个DLL,把要显示的字幕输出到一个ini文件或是内存镜像文件中,然后HOOK SwapBuffers函数,在调用真正的SwapBuffers函数以后,读取ini文件或是内存镜像文件的内容,把要显示的字幕用textout函数显示到当前DC上,即可实现汉化。5 L) R% c" U5 v+ {* v1 N9 \( w
3 {+ C1 E: T) y% g3 o& w
先把汉化思路写下来,等有空的时候再做试验,期待可以解决nibiru等使用opengl API的游戏的汉化问题。 |