2008年9月21日 星期日

Ogre輸入中文的辦法

如果還沒什麼人創新辦法的話,目前總共有三種
一種是直接修改源碼,讓已經被封裝的WindwosEvent可以被使用。
一種也是修改源碼,過去有個所謂i18n的patch版本(1.0.x到1.2.x左右的事吧)
這是利用SLD的Input來做,理論上是跨平台的最好做法。
最後一種,也是最麻煩的一種,改在建立Ogre視窗時動手腳
不破壞Ogre原始碼,可以直接使用PreBuilt SDK的辦法,雖然只能用在Windows。

這是從Ogre的中國非官方站看來的
應該也是修改源碼讓其可以支援中文輸入的"免費打工仔"寫的
就是利用Ogre最初就有的特性,可以內嵌成為子視窗的辦法
讓我們直接利用父視窗的一切來取得IME的文字

喔...這樣講起來很容易,可是實作起來...
如果不是對Windows的訊息運作有一定的了解
還有對如何取得IME的文字有相當的認知
同時對於如何手動建立Ogre而不使用ExampleApplication的繼承的話,
還真的是不知從何開始著手。

就這樣,斷斷續續搞了我半個多月才起來....
正式說起來是三天左右
而且還是個不完全的缺陷範列
第一天從一開始我著手方向就錯誤了,所以一直做不出來,就此中斷
第二天是前天,工作到一半忽然靈光一動發現錯誤的地方
然後成功地補捉了WM_IME_COMPOSITION訊息,顯示了個MessageBOX出來
第三天是昨天,花了一個下午的時間,把中文成功地在QuickGUI裡輸入
是用injectChar輸入喔,不是用setText喔。
之所以不完全,是我只有處理IME轉換的部分訊息,所以新注音不能正常使用
沒辦法做還沒轉換前的暫存編輯(就是選字看不到)
也沒做UNICODE轉換,所以萬一輸入法不支援Unicode也不能用。
但總算是實現長久以來的夢想

不過話說回來,這與我真正寫遊戲,好像沒多大關係喔
如果不是非常執著於在Ogre裡面輸入,搞個DialogBox也可以辦到啊
我也不用處理什麼IME訊息,頂多要做BIG5轉UTF8而已
所以我在幹什麼啊!

2008年9月2日 星期二

Ogre 1.6.0 RC1釋出


Ogre 1.6.0 RC1
千呼萬喚始出來。
最新版本的Ogre3D終於出來了。
不虧是大改版。
新的概念與東西一大堆。
稍微研究一下,還蠻令人訝異的。
像新的Script Compilier已經進化到,具有簡單的物件導向概念,能繼承與使用變數。
還有全新屬性Portal Connected Zone的ScneneManager(PCZSM)。
這PCZSM簡單地說,就是將類似LOD的模型(Model)概念整個使用與室內場景與Terrian上。
LOD是離愈遠,模型會簡單化以節省資源,而PCZSM則是鏡頭(Camera)看不到的東西全部省略,
並不是被材質擋住了,是連線架構(Wireframe)都看不到。
另外還新加入了Parallel-Split Shadow Map等等的新東西。
可惜最近工作比較忙,看來只能忙裡偷閒,找空白時間來研究研究。

不過這麼大改的東西,我拿用修改舊的專案會改不完
我看還是先用1.4.X來持續目前的計畫,反正這只是RC1
要跳等1.6.1 Release再說。