2006-10-11

[產品開發] 意外:新增雜湊 (Hash) 排序法

原本是為了改一個「頭比身體慢移動」的問題,所以更換了「參考物件」之後的運算法---把物件按照參考次序,重排圖像更新順序,例如:頭部參考身體,則身體必須先計算位置,才可計算頭部位置,否則就會頭比身體「慢一個畫面」,發生好像頭沒黏住身體而在晃動的狀況。

現在頭是黏得緊緊的,卻發現因為選單的參考順位非常複雜,加上還有透明與「指定要在前 (GASS Code : ZFront true;)」的指令作用,選單上面有使用 Color Key 或 Alpha Channel 的圖像,變成了「先畫」,導致「半透明」的部分寫入了 Z Buffer,底下的選單「後畫」,無法覆蓋這半透明的部分---圖形周圍形成破洞的地方,變得可直接「看透」到選單後面的東西---這是 Direct X Z Buffer 一個無解的死罩門,當然是醜陋又不對的!


(點圖放大即可發現左邊的圖案邊緣鏤空可看到背景,右邊則是正常該有的樣子)


(點圖放大即可發現左邊的圖案邊緣鏤空可看到背景,右邊則是正常該有的樣子)

雖然玩家不一定會因這種問題而退貨,但必然會產生「劣質品」的感覺,心中頗有微詞。

縱使趕著要結案,仍然沒辦法,只好乖乖回頭改 GASS 3D 工具的 C++ 部分。

還好不知道為何天外飛來靈感,自從學寫程式二十多年以來,因為太難挑戰,而一直不敢動手寫的雜湊排序法(以前覺得寫了好像也沒什麼機會用),居然瞬間有了解決方案!

趁著中秋假期,反正總統府管制交通,沒辦法去永和上班,就在家把這個「個人程式庫」過去一直缺席的排序法完成---算是了了多年的心願!

這種需要「快速排序、大量資料重複使用相同索引」的東西,用這種「天外飛來的雜湊排序法」處理後,果然問題迎刃而解!

而且,這種方法經過改良,配合「組合語言位元搜尋」,速度快、也沒有雜湊法「碰撞」或「浪費空間」的問題,不用再屈就「只有二元樹」的窘境,相信以後可以利用的地方還很多。(註:有時候若有大量「遞增 / 遞減索引」資料連續加入二元樹---尤其在物件座標排序這種事上面---速度都會慢得好像在用泡浮排序法!而且,「重新整理成『完美樹』後再搜尋」所耗去的時間,也不會比「不整理直接搜尋」快到哪裡去!

沒有留言:

將目前〔網頁 / 文章〕加入書籤: