宣傳語
OGRE創始人Steve Streeting作序推薦
免費打工仔嘔心力作
國內第一本OGRE編程經典
推薦序
當我在2001年開始做OGRE項目的時候,我的初衷只是想做一些可以幫助開發者(當然首先也是為了我自己)儘可能減少實時3D的開發難度而同時又增加開發靈活性的事情。這在那個時候確實不是什麼宏偉的計畫,而僅僅是出於個人角度的原本應該做的事情,而最終卻被全世界範圍內大量開發者所支持,這著實令我驚訝。我以前從沒有想過OGRE能在當今如此流行,更沒有想到我能有幸被邀請為本書做一個簡短的序言。即使我無從閱讀一本用中文撰寫的書籍,我依然非常欣慰地看到,在地球的另一側會有這樣一群人滿懷激情地加入到OGRE事業中,並且投入大量時間來完成此書,更重要的是,有這樣一群人,比如你,出於對OGRE的熱衷,來閱讀此書。
因此我要感謝本書作者為此而做出的不懈努力,並且希望你能從本書中收穫對OGRE更多的滿意,就像我設計之初所希望的那樣。哪天我們真應該見個面,或許你還可以教我一些有關3D的中文辭彙。
Since I began the Ogre project in 2001, my primary goal was to create something that helped developers (and by that I mean myself first of all!), to do what they wanted to with real-time 3D, with as little difficulty and with as much flexibility as possible. There really wasn't a grand plan at the time, just a personal vision of how I thought things should be done, which as it happens turned out to be very compatible with the visions of a lot of other people around the world too. This was a surprise to me - I never imagined Ogre would become as popular as it is today, and as such I'm very honoured to have been invited to write a small foreword for this book. Even though I won't be able to read it - since I can't read Chinese - it's very pleasing to know that there are people on the other side of the world who care enough about the project I started to invest their own time in writing such a book, and that there are people, like you, who want to read about it.
So my thanks go to the authors for their efforts, and I hope you all get as much satisfaction out of using Ogre as I did creating it. Should we meet one day, perhaps you can teach me some 3D-related words in Chinese.
I hope that sounds ok.
Good look with the book!
Best regards Steve
前言
2006年,我們翻譯了“PRO OGRE 3D PROGRAMMING”這本書,創建了OGRE 3D引擎的中文社區,並把這本書的電子版本提供給國內的朋友下載學習。幾年之後,OGRE 3D圖形引擎在中國已經遍地開花,包括九城、久游、吉比特、搜狐暢遊、麒麟遊戲,以及網域等遊戲公司都在不同程度地使用這款圖形引擎,同時也有越來越多的朋友開始關注它。得到電子工業出版社的首肯,筆者有幸能撰寫一本關於Ogre3D使用開發的圖書。
本書緣起
從2006年我們建立OGRE 3D中文社區開始,不斷地得到熱心朋友的幫助,翻譯了大量的OGRE 3D相關文檔,其中包括《Ogre手冊》、《基礎教程》、《中級教程》,以及相關的一系列文章,以至於今天筆者準備從頭撰寫一本OGRE 3D相關知識的書籍時,竟然發現大部分的知識內容已經可以在網路上找到,幾乎不可能再原創一本專注於OGRE 3D使用的書籍。
筆者絕對不敢冒險東拼西湊提供一本“學術腐敗”的論文集給大家看,與其重複那些網路上已有的知識,不如另闢蹊徑,即從代碼入手講解如何通過遊戲開發框架,在學會OGRE 3D引擎之後進一步完成完整的遊戲。
這本書不會告訴讀者圖形引擎的基礎,而是希望告訴讀者在了解一款圖形引擎之後還缺少哪些工具來完成一個完整的遊戲。本書定位於希望進一步了解如何以OGRE 3D為基礎開發一款完整遊戲的朋友們。
我們在光碟中提供了“PRO OGRE 3D PROGRAMMING”中文版本的下載地址,那裡詳細地介紹了OGRE 3D相關的知識和細節。希望讀者可以結合這兩本書來閱讀。在這裡需要感謝我的編輯袁金敏女士,正是因為她的肯定才讓筆者有信心來完成這本書。
基於以上定位,這本書應該是學習OGRE 3D遊戲開發的第2本書,幫助讀者從一位引擎研究者成為一位可以實戰的遊戲開發人員。讀者可能還沒有接觸OGRE 3D圖形引擎,偶然在書店中看到這本書,正在決定是否加入OGRE 3D的開發人員隊伍中來。這本書的第1章將會幫助讀者解決疑惑,從一個巨觀的角度來描述OGRE 3D圖形引擎的發展史及相關資源。我們儘量做到簡短和精闢,讓讀者站在書店的書架旁邊就能看完,決定是否有必要學習OGRE 3D,以及是否需要掏錢買這本書。如果發現其中有您感興趣的遊戲開發工具,那么本書一定在某一天會給您的工作帶來“雪中送碳”的效用。
本書閱讀指南
這本書的最大特點是依賴代碼來推進進度。從第2章開始的幾乎每一個課程都有相關的代碼工程提供給讀者參考,這樣做可以讓讀者更直觀地了解本書介紹的內容。
網上說行為學的研究表明,如果堅持21天,你就很可能改變或養成一個新的習慣。雖然我不是這方面的專家,但是還是按照《21天精通XXX》書籍的慣例把這個章節的課程劃分到3個星期中。每周講解一個完整工程,至少這樣做可使讀者很方便地安排自己的閱讀時間。
在每個星期的第1天(星期日),我們會講解一下本周課程的具體內容和背景知識,在接下來的星期一~星期六的課程中會把一個完整的工程分解成為6個部分逐漸完善並依次講解。
OGRE 3D把自身定位成一個純粹的圖形引擎,優秀的獨立性帶來的副作用是如果需要完成一款完整的遊戲,OGRE 3D並不足夠,還需要類似音頻引擎、網路引擎、輸入引擎等功能性庫,以及一個高效穩定且功能強大的框架。不論讀者是否做過完整的遊戲,都應該能感覺到一個好的框架對於一款遊戲是多么重要。本書將著重介紹這方面的知識,在第2章第1周的課程中,我們介紹讀者熟悉的OGRE 3D演示程式所使用的框架,並完成一款《打地鼠》遊戲。雖然這個框架不足以強壯到完成一款商業遊戲,但是至少可以幫助讀者了解框架在遊戲開發中的重要作用。
OGRE 3D中文社區除了有翻譯的大量的文檔之外,同時在做一件很有意義的工作,就是開發並完善一款商業強度且基於OGRE 3D思想的遊戲開發框架Orz(Open Resources Zone)。在其宣布開源的一年的時間裡,我們得到了業內很多朋友的肯定和支持(甚至包括海峽對岸的朋友)。
在第2周的課程中,我們採用Orz框架來代替OGRE 3D演示程式框架實現了《太空侵略者》這款經典遊戲。在這周的課程中我們採用快速開發方式來完成遊戲原型,沒有過多使用Orz框架中的高級特性。這樣做可以使讀者在不用掌握複雜背景知識的前提下,了解如何通過框架來提高遊戲的開發速度和質量。而在實際的商業套用中,Orz確實帶來了工作效率的大幅度提升。
如果讀者接觸了一些其他公司內部的開發框架,會發現Orz並不比這些商業的產品差,甚至在很多方面強於其他產品。
Orz框架有自己的野心,它不僅僅是一款幫助讀者提高開發效率的工具,還在框架設計上提供了“理想式分散式開發”的遊戲設計方法學基礎。我們通過強大的訊息系統、外掛程式體系及ID管理器等工具,儘可能減少開發人員之間的溝通成本,實現可以讓開發人員在很少協調成本的情況下合作開發巨大型遊戲的基礎。
基於這個理念,OGRE 3D中文社區曾經組織了一些開發人員各自完成自己的代碼,在沒有互相溝通的情況下實現了一個《搏擊俱樂部》的類遊戲。故而,我們在第3周的課程中以這個現實活動作為背景,講解如何採用“理想的分散式開發”模型來完成一款遊戲。在這裡我們使用了大量Orz的高級特性和工具,從一個更高的層次來審視Orz遊戲開發框架所帶來的“甜品”。
不知道這些“甜品”有沒有吸引讀者的胃口,如果沒有,我們在之後的第3章還準備了“大餐”,詳細地介紹了Orz框架的使用細節。
Orz在框架的設計上儘可能遵循MVC模式,我們相信一個良好的設計等於簡單的框架加上豐富的工具。在框架的設計過程中,我們儘量把一些遊戲開發的模組作為獨立的工具在相關章節中來依次講解,讀者可以有選擇地採用這些工具來簡化遊戲開發過程。如果讀者打算從頭構造一款遊戲,並準備採用完整的Orz框架,這裡也有對其中簡單框架的詳細介紹。當然和之前的課程一樣,我們不僅提供了所有Orz框架的代碼,還提供了與每一課程對應的例程。
我相信,在中國土壤中成長出來的遊戲開發人員,很多都希望實現一個網路MMO遊戲,而不是單機的“俄羅斯方磚”。
感謝熊小磊先生的無私奉獻,在Orz中確實存在這樣一個獨立的遊戲開發網路庫OrzAsio。OrzAsio是一個高效並可擴展的跨平台異步網路庫,目的是為用戶提供高效、可靠和靈活的網路程式開發組件,方便用戶構建高效且靈活的網路程式。而OrzAsio的一個重要目標是為大型多人線上遊戲開發網路模組,並能良好地滿足大吞吐量及高負載的網路遊戲伺服器需求。OrzAsio的網路底層基於boost::asio,這是一個高效、可擴展和跨平台的網路庫。如果關心我們的社區,讀者會了解熊小磊先生正在完成一個更加前衛且基於公共對象請求代理體系結構規範(CORBA規範)的網路遊戲的網路開發架構。
在本書的隨附光碟中提供了OrzAsio網路庫及其依賴工具Toolkit_Plus的文檔。
筆者希望讀者都能喜歡我們精心準備的大餐。如果您能開心享用,那是我們的榮幸。然而製作一款完整的遊戲並不是一本書能夠完全講清楚的事情,所以我們在這本書的最後提供了這個創造樂園的地圖。在本書的附錄中我們提供了Boost庫、設計模式及OGRE 3D的簡單概述。
致謝
好萊塢奧斯卡的獲獎者都會在最重要的時間講一些感謝的話,我們要說的話如下。
謝謝我現在和之前的老闆及同事的支持與鼓勵,當然請相信我並沒有在上班時間來寫作,也沒有耽誤工作進度。
感謝OGRE 3D社區提供了這么好的軟體,雖然引擎的核心開發人員大部分都不懂中文,但是在這本中文書中我還是由衷地感謝他們。
謝謝那些為OGRE 3D引擎在中國普及而努力的人們,Mega的遊戲開發小組、盛崇山老師、燕塵,以及謝建華(音譯)先生,讓我分享了你們的榮譽。
感謝熊小磊先生捐獻的網路庫和相應文檔,感謝Mega的遊戲開發小組的任曉宇先生提供《OGRE使用指南》部分章節的授權,感謝梁國棟的“附錄C”,感謝兄弟們找的錯字。
感謝我的家人對我的關心,感謝父母能容忍我的任性。感謝女朋友對我的支持,竟然接受我每天在外地寫稿子,而不是給他們打電話。
如果不是覺得我家裡人會看到這本書,那我一定第一個感謝的就是您——現在看到這裡的讀者。如果您買了這本書,那么便是在經濟上援助了我;如果您讓身邊的朋友閱讀了這本書,那就是在夢想上援助了我。
這個夢想是:
讓每個看電視的人都能開發遊戲。
目錄
第1章引言 1
1.OGRE 3D的起源 1
2.關於Orz遊戲開發框架 3
3.如何使用本書的隨附光碟 5
4.本書使用指南 7
第 2 章21天課程 8
準備工作 9
第1周·星期日從OGRE 3D演示框架開始 11
第1周·星期一第1個3D程式 13
第1周·星期二打地鼠 17
第1周·星期三地鼠出擊 23
第1周·星期四動起來 30
第1周·星期五擊中地鼠 35
第1周·星期六記錄在案 43
第2周·星期日Orz開發框架的簡單使用 47
第2周·星期一準備出發 48
第2周·星期二戰鬥機起飛 54
第2周·星期三侵略者來襲 60
第2周·星期四開火! 63
第2周·星期五擊中要害 69
第2周·星期六震耳欲聾 75
第3周·星期日搏擊俱樂部 78
第3周·星期一外掛程式系統 82
第3周·星期二有限狀態機 86
第3周·星期三A*尋徑 89
第3周·星期四事件驅動 94
第3周·星期五完備 98
第3周·星期六搏擊 102
第 3 章高級開發框架 105
3.1對象ID管理器 107
3.2任意類型存儲器 111
3.3訊息系統 115
3.4時鐘工具 131
3.5定時器管理器工具 133
3.6基於有限狀態機的邏輯管理工具 137
3.7單件工具 150
3.8自動列表工具 153
3.9異常處理工具 156
3.10動態庫及外掛程式管理工具 160
3.11Orz遊戲框架 163
3.12使用邏輯層 168
3.13系統層 173
3.14未來 177
附錄ABoost部分工具 179
附錄B部分設計模式概述 183
附錄COGRE 3D概述 189