維尼的蜂巢

Archive for the ‘2dstuff’ Category

kick the damn multi-thread’s ass

Posted by: kevinlin on: 七月 30, 2007

client端的網路我發現,多一個線程出來接收傳送訊息是必須的,但是呢!接收到的訊息必須要用postmessage去處理,不能收到就直接處理,當初設計時沒有想太多,收到message後馬上處理,結果network的thread跟主線程偶爾處理上會有碰撞,造成幾小時後就有一些未知錯誤,現在知道該怎麼作了。
話說網路庫裡提供了一個Callback function出去讓主程序用,這樣實作還蠻方便的。

2D的旋轉

Posted by: kevinlin on: 一月 19, 2007

遇到一個問題,是2D轉角度的問題,其實跟3D一樣
2D下一個向量p的旋轉的rotation matrix是
  cos(theta)  sin(theta)
 -sin(theta)  cos(theta)
所以 我們想算有一個點A 對 B作旋轉15度時 點A會跑到哪??
只要把 BA向量(B-A)算出來 乘上這個matrix
然後再用 (B-得到的向量) 就可以算出點A會跑到哪個座標上了

新版Blog

Posted by: kevinlin on: 十月 31, 2006

這Blog被機車餅乾改了介面,我也想要機車餅幹的那個theme,這個好醜而且我又有點懶不想自己改,這邊好像一個月前就弄好了,不過最近非常非常忙都沒來這邊看一下,不過主要也是想到要自己改一下這個theme就很懶,就不想上來了 
最近又在深研3D了,似乎每到了秋天就在研究3D,想把一些商業引擎,去蕪存菁的作一個自己的3D引擎,哈哈!!不過呢,那款u牌引擎有點龐大,要trace過大概頭髮都白了,所以首先先建構一個我自己的math library,這部分就簡單一點了,四處剪剪貼貼就有啦 把一些比較簡單還有耗CPU的改成MMX,像是矩陣相乘或者是比大小
目前想法,就跟某人說的一樣,是用vs2005寫新的3D引擎,儘可能的模組化,我可是要移植到xbox360的呢.基本上看過很多引擎,很多平台相關都會是獨立出來的,像win32的code還有directx的code,都是隨時要能抽換的,我深深覺得directx比openGL好一點點,要祈禱以後不會用到openGL….
3D引擎最重要的應該算是scene的管理了,好的SceneTree帶你上天堂,其實很多實現方法,我以前用STL的list,有人建議不要用STL,因為它算是黑盒子,你看不到裡面,這次試試看binaryTree,很簡單的資料結構,我再參考看看各大引擎用的是哪些.
SceneTree幹什麼的呢??它負責管理畫面裡面所有3D物件,ex:人物,攝影機,地形,天空,介面,任何幾何物件,粒子發射器,光…等等,其實我最有興趣的是Emitter(粒子發射器),看電影我就特別喜歡看科幻,有著炫麗的特效,所以我也一直想要作出一個非常炫的特效,看過U牌引擎之後,更加激起我要把它弄好的決心,哈哈….
之前做的2D引擎也是接近final了,持續的修正一些效能跟微調就好,最近花了好幾天重新修正了核心物件的繼承,應該可以省下10%記憶體空間,其實還艇多的 哈哈

物體的移動

Posted by: kevinlin on: 七月 28, 2006

//=====================================
/**
 等速運動用的間補
 @param start [in] 起點
 @param end  [in] 終點
 @param all  [in] 起點到終點經過的時間
 @param now  [in] 現在時間
 @return 以now為基礎的間補值
*/
//=====================================
float FlatSpeed( float start, float end, long all, long now )
{
 return (start + ((end – start) * now / all));
}
//=============================================
/**
 加速運動用的間補
 @param start [in] 起點
 @param end  [in] 終點
 @param all  [in] 起點到終點經過的時間
 @param now  [in] 現在時間
 @return 以now為基礎的間補值
*/
//===========================================
float AddSpeed( float start, float end, long all, long now )
{
 return ( (start)+((end)-(start)) * (((           (now)+1)*(now))>>1) / ((((all)+1)*(all))>>1) );
}
//=============================================
/**
 減速運動用的間補
 @param start [in] 起點
 @param end  [in] 終點
 @param all  [in] [...]

新的2D引擎

Posted by: kevinlin on: 六月 19, 2006

ButterFly的時代過去了
因為歷經太多次修改了,最後改到我不想改,所以要弄個新架構的2D引擎
以可擴充性高為主,分應用層跟引擎核心層
引擎核心有[audio][graphics][input][kernel][packer]等等
因為架構上要有彈性所以,未來只要增加一個C++的渲染核心,就可以移植到手機之類的平台,所以說上層幾乎完全不用修改程式碼就可以移植(需要修改的只是寫一寫跟作業系統相關的函數),而底層可以根據不同的OS實現不同的模組.耦合性很低,很容易擴展和維護
應用層比較值得探討,有[貼圖資源緩衝機制][渲染樹結構][界面][動畫][音樂音效]等等
 

2D的年代

Posted by: kevinlin on: 六月 6, 2006

現在作遊戲看到的資料都3d,要做2d的話,書上也叫你用3d去做2d(法向量永遠對著自己), 問過幾個人,他們都是2000年以前就做遊戲的人,他們就可以比較懂2D了,雖然用3d做2d沒什麼不好,而我完成的引擎也都這樣做,但畢竟老舊的電腦就會抗議,尤其X31真是無奈,以目前來說暗黑破壞神2、星海爭霸都是很棒的2D表現,所以呢現在都在研究組語MMX指令集,還有一些混色跟顯示的理論好來用軟體實做2D(軟體實做指CPU、硬體實作指顯示卡,玩過CS應該知道可以選擇:P),因為一般來說用CPU會慢一點所以要用MMX來加速一些演算法。
小時候我很早就接觸電腦了,大概在國小五年級,那時我有一台NB,因為大家都不會用,所以呢家裏請來了一個台大的來給我家教(那時我在台北),教電腦,一開始教我打字,然後那時用dos嘛,所以他幫我裝了一些軟體還有遊戲,我是每天玩遊戲玩的很高興,我記得那是大富翁2吧!!還有波斯王子(永遠的第一關),然後鍵盤上的英文字大概都記住後,教我用倚天中文還有文書處理的,最後還有畫畫的軟體,這些都在DOS下,教完後他去學校偷偷盜版了Win3.1給我裝到電腦上:P,Win3.1上面就玩玩接龍,然後不知道要幹嘛,最後不知道教什麼時,他開始教我程式了,我記得是gwbasic(那時還沒有qbaisc),那時程式要自己打行號的,大概這樣教了兩年,我那時很愛做CAI,就像是電腦唱歌啊(我把音樂課本的音譜都輸入了),還有加減乘除測驗,跟現在賣給小朋友的軟體一樣:P,只是我的沒有漂亮的圖案,那時應該去考個丙級軟體設計的技術士,我就成為台灣最小考取的了,哈哈。
國小畢業後,basic也都教完了他開始教我C,但是教了幾次後,我搬家了,然後老師找不到我新家,又加上我那時候有超任,還有NB也有些問題,結果後來都不了了之了,就沒有在上課了,也沒東西可以練習了。所以國中就這樣過去了,一值到國三才又有電腦。
我發現我錯過黃金時期了,如果能一直學下去,我就可以更厲害了,不過到了高中後,我為了參加ACM的競賽程式練習的還不錯:P,不過大學呢,環境不對,逢甲不是一個可以練程式的地方:P,所以很多人都用玩系統來練程式。不過總之呢,我的2D時代要來了,3D暫時先放著,我會追上你的。