全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2566
推到 Plurk!
推到 Facebook!

Game Engine

 
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-16 10:56:25 IP:211.76.xxx.xxx 未訂閱
不知道delphi在遊戲開發上,有沒有幾個比較容易上手的game engine? 這裡提供roleworld(含source)的元件,希望大家介紹幾個這方面相關的訊息 http://www.geocities.com/marcalvaprojects/ Hi! Many weeks have passed since I announced RoleWorld beta 0.8. While building RuinedWorld, a new RPG with artificial intelligence and a topic quite scatterbrained, several ideas came to my head. For that reason I decided to slow the appearance of RoleWorld v1.0 and get devoted to reconstruct most of the engine. The hard work has been worth: beta 0.9 brings new characteristics such as graphic effects, saving of resources and more FPS! Now I am working on the final version 1.0 that needs to refine the details and to add more tools. I am also writing a quick reference utility. Meanwhile beta 0.9 is available for download and it can be installed on Delphi 4. The components are freeware and they are accompanied by a little demo. If you need a version for another Delphi just tell me and I will try compile it. Comments and bug reports will be greatly appreciated. ======================= 二星級新手,問基礎問題請勿見笑 ^^
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-22 12:05:53 IP:61.216.xxx.xxx 未訂閱
此為轉載文章:Develop Your 3D Engine 背景: 這是Delphi 3D 的3D Engine Dev.系列tutorial。(www.delphi3d.net) This site is written and maintained by Tom Nuydens. 從基本的view system到高級的PVS(Possible Visible Set),LOD(Level of Detail)都有介紹,難能可貴的是寫的深入淺出,別以為Tom Nuydens是某個傳奇人物,他22歲,也是剛剛大學畢業,真是不盡牛人滾滾滾來啊! 我的翻譯: 我最近在看Computer Graphics ,搜到這個站,發現很有用,所以本著learning by doing && share && just for fun的態度翻譯(歡迎指正),並加上了一些我的理解和一些Expand(Maths ,some new figures etc.)。So,The Original Delphi 3D Engine Dev. Tutorial Series copyright by Tom Nuyden and this Translation and The Expanded Part copyright by John_Cash:).(底下沒標fig 的圖都是我用畫板畫的,苦吧?:(,so, all rights reserved ) 這是一個長達24篇的教程...長啊... ========================================= Issue 2 : Visibility determination algorithms(可見性判別算法) 可見性判別---3D Engine 的核心 什麼是可見性判別? <!--[if gte vml 1]> 3D繪製時要盡量避免重繪,如上圖中六面體只有三個面可見,所以其餘三個面繪製前應當刪除(back face culling)。這只是簡單的例子,想像一下,Quake中一關有多少面,要不用VD的話,即使是用硬件繪製也受不了,就能理解可見性判別的重要性了。 VD的策略選擇會極大的影響Engine的效率。很明顯,要是每一點都重繪的話,你的Engine就會花大量的時間畫看不見的面,從而導致效率的損失;另一方面,要是你追求完美,連一點也不願意重繪的話(software rendering 時這點的確很重要),你就要權衡VD算法和部分重繪的代價了。不僅僅是繪製需要考慮VD,在繪製前的視變換(viewing transformation,指從世界坐標系變換到用戶坐標系)也很費時,就要盡量減少需要變換的面,當然我們並不需要變換那些看不見的面。 又很多種刪除不可見多邊形的方法。下面從最基本的開始討論,後面會涉及到一些高級技術 Basic algorithms 剔除不可見多邊形最直接,最簡單的方法就是背面刪除(back face culling)了。背面刪除基於下面的假設:"多邊形是封閉多面體的一個面,並且只有一面可見"。想像一下六面體的面,不可見的面有什麼特點呢?----該面的法線和用戶視線夾角大於90度。可以用點積表示如圖,當點積結果<0時,表示該面不可見。 <!--[if gte vml 1]> 下一步要做的就是,把你背後的那些面刪掉。怎麼刪?在用戶坐標下所有頂點Z<0的那些面。 還有要做的嗎?當然。最後一步就是視見體(view frustum)刪除了。 <!--[if gte vml 1]> 圖中淺灰色的即為View Frustum,老外有時管這叫view pyramid,由六個四邊形圍成。其中深灰色三角形1,在view Frustum 中,不被刪除,而2就需要被刪了。具體判斷使用平面方程: S(x,y,z)=Ax By Cz-D 要是你線性代數還沒忘的話,就應當能理解,(A,B,C)給出了平面法線,S(x,y,z)結果就是(x,y,z)點到平面的距離。OK,把待判斷的多邊形的所有頂點帶入S(x,y,z),根據正,負,0值,就可以判斷其在平面外,內,上(這與多邊形法線的定義有關),從而決定多邊形是否被剔除。 注:要是你真忘了的話,我來推一下: 向量形式的平面可以記做:N*(X - P)=0 N為法線,P為平面任一點。 將X(x,y,z),N(A,B,C)帶入,得:Ax By Cz=N*P。 其中*為點乘。 Octrees(八叉樹) 上面的刪除算法,效率還是不高的話,就要用到高級點的技術了。八叉樹,本身是二叉樹的3D版本。用來將空間遞歸的劃分成立方體子空間(和BSP(Binary Space Partition)類似)。例如:(從z軸向下看) <!--[if gte vml 1]> 如果可以確定一個子空間不可見的話,那該空間內的所有多邊形就可以刪除了。麻煩的是,對於可見的子空間內的多邊形,Octree並沒有提供可見性判別的方法(當然要是劃分的太細的話,很可能得不償失,遞歸,遞規,…..,還想調試嗎?)。另外,octree的劃分方法很明顯適合於直角坐標,你要是用幾何坐標的話,可能沒那麼easy。:) Portal rendering(入口) 什麼是portal? 空間分割成凸多面體時,一個面切下去,有可能切空了。也就是說,這個面將原來的子空間一分為二時,沒有切到多邊形,這個面就成為一個portal。 <!--[if gte vml 1]> 圖中,左右兩個子空間就通過一個portal連起來了(和門的作用差不多)。右圖說明,portal是一個不需要繪製的多邊形,不阻擋視線。 Portal Rendering 比基本算法多做的就是view frustum 中多邊形的刪除。由於劃分得到的子空間都是凸多面體,所以不存在多邊形的排序問題(想像一下,站在一個凸多面體內,當然所有面的繪製順序沒有關係,因為所有面都可見)。算法從觀察者所在的區域開始,繪製所有多邊形,該區域若存在portal,將這個portal剪裁到視見體內,接著繪製該portal連接的區域。當兩個portal相遇時,就需要將後一個剪裁到前一個portal中。如圖: <!--[if gte vml 1]> 當然,如果一個portal最終不可見,那麼它連接的區域也就不可見了。 Dynamic LOD 地形繪製的Engine中常常用到Dynamic LOD(動態 Level of Detail),用來簡化遠處的幾何體的繪製。比如三角洲裡邊,遠處的地形就會繪製的粗一些,隨者你走近,地形就會越來越細緻(三角形越來越多)。通常可以用octree來實現,如圖: <!--[if gte vml 1]> (這張圖來自:www.gametutorials.com) 另一種類似的技術叫:real-time tessellation 是指模型使用不同的精細度以適應不同的要求。 實際上,這兩種技術都用於減少要顯示的多邊形數量(/質量),而非可見性判別。 Conclusion 這就是幾種常用的算法,需要更詳細的內容,可以去flipcode.com gamedev.net gamasutra.com gametutorials.com 看看。當然一個Engine 可以混用多種技術,比如BSP和octree的混合,octree和 portal 的混合,etc.。 下一次:Portal Rendering。(著名的《Duke Nukem Forever》永遠的毀滅公爵 就用的是 portal Engine)。
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-24 23:12:24 IP:211.76.xxx.xxx 未訂閱
F sir,不知道有沒有在RPG方面比較好的東西呢? 就是像如果同個問題有幾個選項,回答不同會導致不同結果 不知道有沒有什麼樣的東西開發這個比較快? ======================= 二星級新手,問基礎問題請勿見笑 ^^
x803198
一般會員


發表:8
回覆:28
積分:17
註冊:2002-12-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-25 02:55:04 IP:218.166.xxx.xxx 未訂閱
引言: F sir,不知道有沒有在RPG方面比較好的東西呢? 就是像如果同個問題有幾個選項,回答不同會導致不同結果 不知道有沒有什麼樣的東西開發這個比較快? ======================= 二星級新手,問基礎問題請勿見笑 ^^
如果你是新手,建議先練習寫一些小遊戲,先從2D開始 2D學的東西就很多了,像貪吃鉈這樣的小遊戲 就要處理碰撞,障礙點,簡單的地圖編輯器不僅要編輯地圖,還要編輯隨機的豆子 (給你的寵物小蛇蛇吃的),還要寫一個蛇蛇長大的公式,速度的公式 雖然看起好像很簡單,不過對一個沒寫過遊戲的新手,也很難一次就寫的很好 建議版主出一個題目來個小遊戲交流,而且一定要放上程式碼,讓有興趣的網友多多交流
flyup
資深會員


發表:280
回覆:508
積分:385
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-25 03:08:06 IP:61.216.xxx.xxx 未訂閱
引言: F sir,不知道有沒有在RPG方面比較好的東西呢? 就是像如果同個問題有幾個選項,回答不同會導致不同結果 不知道有沒有什麼樣的東西開發這個比較快? ======================= 二星級新手,問基礎問題請勿見笑 ^^
建議用搜尋引擎找找,我想你要的參考資料會更多! < src="http://spc.tn.edu.tw/k032/images/leaf[1].gif">
系統時間:2024-11-21 19:35:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!