Sunday, May 27, 2007

遊戲引擎補完計劃

將 Ngan-GINE'3D 的圖像部份,轉用 OGRE3D 的其中一個原因,是希望能夠達到所謂「跨平台」的目的,但是在原 Ngan-GINE'3D 的其他功能,都是用上 DirectX 的 ( DirectSound、DirectInput... etc ),為了達到跨平台,早前我決定要將 Ngan-GINE'3D 的其餘功能,都轉用其他跨平台的 3rd Party Library。

首先是自家的數學函數部份,不可以再用 Direct3D 的數學工具 ( D3DVECTOR3、D3DMATRIX... etc ),全部要轉為自己的數學工具,當然是以基本 float 這類資料為單位呢。

在 Input 部份,真的沒有選擇,只有「 OIS 」( Object Oriented Input System ),作為Keyboard / Mouse / Joystick 輸入。

最後是 Sound 聲音效果問題,我之前看過 OpenAL,但是這個真的很複雜,對我來說甚為不便。最後我發現「 irrKlang 」這個 Sound Library,用了大半天時間便成功代替了之前的 DirectSound,而且還支援多種聲效檔案格式,也算是不錯的。

就這樣,新 Ngan-GINE'3D 已接近完成 ( 這樣說的原因是,可能還有些小問題呢 ),整個引擎只是用了五個 DLL,感覺非常輕巧,而且所用的 Library 都是 Open-Source 及免費的 ( 只要不改動核心部份 ) ,基本上整個 Ngan-GINE'3D 可說是接近零成本 ( 使用 Visual C++ ExpressPellesC,都是免費的 ),感覺非常的良好。

Thursday, May 24, 2007

令人討厭的OGRE

今天是假期,趁有空閒日子便想試試「人手規劃」Collision Map,當開始了一會兒後,發覺問題出現了,居然在 OGRE 中 Load 入的 Data,和原來的 Data 有不同,而不同的地方居然就是 " 法線 Normal ",令我想從最簡單的方法開始也不能。作了良久的修改,但問題始終不能解決,真的很可惡,到了最後,我卻要低頭,將 OGRE 中 Load Data 的部份刪除,要用回 Ngan-GINE 中的 Loader。

有時候,3rd Party 的引擎確實會令人感到討厭的。

Monday, May 21, 2007

Level Map Collision Detection

早前我說過,不想再用 Physics Engine 來做 Collision Detection,另外亦構思了一種方法來代替,在過去的週末,也正式開始了新構思的實驗。

我的方法其實很簡單,就是「人手規劃」方法,原先我的 Ngan-GINE'3D 中的設計,已經將 Render 和 Collision 的地圖作分開處理,這樣其實已經對人手規劃法埋下方便的伏線,加上我的 Collision 地圖資料已經是 Sector 形式儲存,用於人手規劃法時亦不需要改寫,在種種理由下,似乎不得不實驗一下這個「人手規劃」方法。

朋友問道:「會不會有 Precision 問題?」
我答:「不知道,但是數年前的 Final Spike 參賽版本,都是以這類形式製作,相信問題不大。」

Saturday, May 19, 2007

Friday, May 04, 2007

為什麼要 Physics Engine ?

我近來有個想法,就是不再用 Physics Engine 來做 Collision Detection,反而用最簡單 Point Plane 及 Polygon 的 Collision,為什麼我會這樣想呢?原因有而下幾點:

1) Time Step 問題,很難做到不同的 PC,有一樣的效果
2) 對 Low-end PC 是一種沉重的負擔
3) 程式變得複雜,導致難以控制
4) 如果遊戲中沒有 Physics game-play,變得沒意義

確實,沒有 Physics Engine,那麼 Collision 就要自己做,而近來除了想不再用 Physics Engine,亦想著要怎樣才可以代替她,而又可以盡量做到小問題,我的構想也差不多成型了,只要實踐來證實可行,希望有時間試試吧。

Tuesday, May 01, 2007

現實中的千與千尋

今天是假期,電視台亦在今早播放日本卡通電影「千與千尋」,我亦有重溫這套卡通。「千與千尋」是一套很有寓意的卡通,往往看後也會令我回想身邊的人和事,以及自己處事方法。

無知的父母,迷失的小孩,利慾的婆婆,沒家的白龍,被污染的河神,物質主義的無面人,被過份寵愛的嬰孩... 等等,環顧周圍,亦不難發現身邊都有剛才所說的人和事。但是世界並不會因為這些事而停下來,每一秒鐘也有不同的事情發生,我們會因為周遭有很多事發生,而遺忘了很多對自己重要的事情,就正如「千與千尋」中,忘掉了自己的名字,被迫留在神隱的國度。