freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

從零開始做3d地圖編輯器(基于qt與ogre)(編輯修改稿)

2025-06-12 19:22 本頁面
 

【文章內(nèi)容簡介】 _OBJECT。 只有加入了 Q_OBJECT,你才能使用 QT 中的 signal 和 slot 機制。這點很重要,不然你編譯的時候會報 “找不到 slot”的錯誤。 然后在 protected: 前加入: view plaincopy to clipboardprint? private slots: void SetText ()。 private slots: void SetText ()。 slot 同樣也分 private、 public、 protected,意義和 c++一樣。 CPP 中加入相應(yīng)執(zhí)行: view plaincopy to clipboardprint? void MainWidget:: SetText () { m_pLabel setText(Test)。 } void MainWidget:: SetText () { m_pLabel setText(Test)。 } 把 connect 改成: view plaincopy to clipboardprint? connect(m_pButton, SIGNAL(clicked()), this, SLOT(SetText ()))。 connect(m_pButton, SIGNAL(clicked()), this, SLOT(SetText ()))。 編譯運行,這時點擊按鈕就會改變文字了。就這么簡單。 信號 也可以自定義,不過信號自定義相對來說用武之地稍微小一點,定義的方式和 slot 定義差不多,都得在頭文件中定義,舉個例子:點擊按鈕后文本改變,觸發(fā)一個新信號,這個信號會把文字又變回來。 在頭文件中加入: view plaincopy to clipboardprint? signals: void TextChanged ()。 signals: void TextChanged ()。 再增加一個 Slot 用來對這個信號進行反饋。在 private slots:后加入 view plaincopy to clipboardprint? void RecoverText ()。 void RecoverText ()。 CPP 中加入執(zhí)行: view plaincopy to clipboardprint? void MainWidget::RecoverText() { m_pLabel setText(Hello)。 } void MainWidget::RecoverText() { m_pLabel setText(Hello)。 } 注意信號是不需要加執(zhí)行代碼。 然后修改 SetText()函數(shù)加入觸發(fā)新信號的代碼: view plaincopy to clipboardprint? emit TextChanged()。 emit TextChanged()。 最后加入新的 connect: view plaincopy to clipboardprint? connect(this, SIGNAL(TextChanged()), this, SLOT(RecoverText()))。 connect(this, SIGNAL(TextChanged()), this, SLOT(RecoverText()))。 編譯運行,結(jié)果和我們想要的一樣。 注:信號和槽都是可以有參數(shù)的。 有關(guān) QT 的基礎(chǔ)知識就介紹到這里,具體控件的使用方法,請自行參考助手。 五、 OGRE 基礎(chǔ)知識 友善提醒:如果你對 OGRE 比較了解,請自覺跳過此節(jié)。 本節(jié)并不打算提供 詳細的入門教程,只是對 OGRE 的簡單介紹,如果需要 OGRE 的詳細資料,請自行使用網(wǎng)絡(luò)功能。 OGRE 是什么 Ogre 是一款開源的圖形渲染引擎,它的全名叫( Objectoriented Graphics Rendering Engine),目前在開源圖形渲染引擎這一塊排名第一,由于它功能齊全(跨平臺,支持 DX 和 OPENGL)、知名度高,而且不斷更新,所以國內(nèi)學(xué)習(xí)資料也比較多,在網(wǎng)絡(luò)游戲在一塊已有不少游戲公司已經(jīng)使用過或者正在使用 OGRE(《天龍八部》、《成吉思汗》等),部分公司招聘要求 里面也明確表示熟悉 OGRE 者優(yōu)先,所以說學(xué)習(xí) OGRE 是前景可觀的。 OGRE 可以做什么 首先 OGRE 只是一個圖形渲染引擎,連輸入輸出都使用第三方的 OIS,目前大部分應(yīng)用都在游戲、 VR。但是如果你需要用它來做網(wǎng)絡(luò)游戲,你還需要網(wǎng)絡(luò)庫、 UI 庫、音頻音效庫等。 如何學(xué)習(xí) OGRE OGRE 自 以來,拋棄了它的 ExampleApplication 的框架,開始使用 SampleBrower 加 dll 的方式來表示例子,我個人認為雖然看起來更專業(yè)了,但是對于新人入門來說,難度比 ExampleApplication 還高,盡管ExampleApplication 就已經(jīng)讓新人暈頭轉(zhuǎn)向了! 那么怎么去學(xué)習(xí) OGRE 呢,有一本書是必備的,名字叫《 PRO OGRE 3D PROGRAMMING》(現(xiàn)在已經(jīng)有愛好者翻譯的中文版了),這本書是 OGRE 入門的圣典,推薦方法是先仔細地看一遍,然后再重頭開始碼例子,為什么推薦這樣做,因為我發(fā)現(xiàn)有些人在學(xué)習(xí) Opengl 的時候,看完 glbegin,glend 就不看 了,甚至還動手寫引擎,人家紅寶書后面明確地表明盡量不要使用 glbegin,glend! 官方手冊也是必看的,里面對一些模塊進行了詳細的講解,材質(zhì)腳本說得挺細。 個人推薦 OGRE 入門掌握順序: A、 渲染窗體管理(初級:初始化,銷毀) B、 OIS 輸入輸出(初級:兩種模式(回調(diào)、緩沖)、按鍵處理) C、場景管理(初級:管理器選擇,節(jié)點管理、實體管理) D、材質(zhì)(初級:材質(zhì)使用、材質(zhì)腳本) E、資源管理(初級:資源組、資源 ) D、動畫(初級:骨骼動畫) E、面片相關(guān)(初級:表層、公告板、粒子) 基本掌握這些就可以做些簡單的游戲了,然后在這基礎(chǔ)之上再慢慢探索 OGRE 的龐大的世界。 幾個學(xué)習(xí)的地方: OGRE 官方網(wǎng)站: 、官方論壇、 Addon 論壇、 wiki 是學(xué)習(xí) OGRE 的好地方。 中文社區(qū) : 也聚集了不少 OGRE 的愛好者。 游戲資源網(wǎng)也是一個學(xué)習(xí)游戲開發(fā)的不錯的網(wǎng)站。 請充分利用你手頭上面的搜索工具,百度適合搜索國內(nèi)中文資料, google 適合搜索英文資料。 第二章 編輯器的基本框架 一、幾個問題 前面說了很多編輯器之外的東西,真正要動手做編輯器了,也不能一股腦地就開始了,這之前必須要問自己幾個問題: 這個地圖編輯器有什么基本功能? 導(dǎo)入導(dǎo)出文件格式? A、 3D 地圖編輯器的基本功能 正如開篇所說,編輯器制作有兩種趨勢,其中一種是大而全的世界編輯器,這種方式可以帶給極大的成就感,正合很多 新人的意,但是我覺得一開始給自己(特別是新人)設(shè)定一個龐大的計劃是件空洞而不現(xiàn)實的事情,一個編輯器越是大而全它的應(yīng)用方向就越窄,越不利用拓展,使用就越費勁,問題 BUG 也就越集中,維護成本也就越高。 其實可以從小做起,先來分析基本需求: 所謂地圖編輯器,地圖編輯是其基礎(chǔ)功能,一般地圖都是在地形(平面)上面放置演員(把它叫作演員是不希望和 OGRE的實體概念沖突),那么我們就確定了我們兩個需求:地形編輯、演員管理。 那么這兩個需求又引申出新的需求,地形不能是光模吧,演員不能永遠是編輯器預(yù)設(shè)的幾個 模型吧,所以我們又需要實體、紋理加載與刪除的功能。加載之后的紋理和實體總應(yīng)該有個地方可以瀏覽吧,不然怎么選擇使用? 好了,因為我們的目標(biāo)暫時是做一個基本框架。所以我們暫時確定以下基本需求: 添加刪除瀏覽實體、紋理 地形編輯 演員管理 除了基本需求外,我們還有另外一些編輯器本身的一些需求: 菜單、工具欄、狀態(tài)欄。 日志管理。 日志管理是一個很重要的東西,它得支持兩種方式,一種是導(dǎo)成文本,另一種是在編輯器里面實時看到,為什么要提供這兩種東西呢,如果沒有文本,有時候掛的時候你看不到為什么掛,如果沒有實時地看到每次去看文本又很麻煩。 B、文件格式 導(dǎo)入導(dǎo)出文件格式是一個很糾結(jié)的問題,現(xiàn)在一般流行幾種方式: 純二進制數(shù)據(jù),優(yōu)點是讀取速度非???,幾乎無浪費數(shù)據(jù),缺點是不易被修改,如果沒有工具基本上幾乎不可能被改動(當(dāng)然你要約定某些字符串也是可以的),這種方法還有不少應(yīng)用。 自 定義格式,類似于 INI,優(yōu)點是終于可能手動修改了,缺點是得花不少時間去寫解析模塊,應(yīng)該是一種過渡解決方案,這種方案和上面那種有模糊的界定,區(qū)別在于這個擁有一個解析器。 XML,現(xiàn)在應(yīng)該是主流,優(yōu)點是編輯修改很方式,手改也行,工具也很多,還不用寫解析器,TinyXML,RapidXML 等都是不錯的解析器,缺點是效率低,在特定環(huán)境下會出現(xiàn)偶爾讀不出文件的情況(可能是解析器的問題)。 現(xiàn)在不少游戲使用兩種 1 和 3 兩種方式結(jié)合的方法,在編輯時使用 XML,結(jié)果用工具導(dǎo)成純二進制加密文件, 我也打算使用這種方法: 編輯器配置文件(需要對窗體的開關(guān)狀態(tài)進行存儲)和生成的地圖使用 XML。導(dǎo)入紋理、實體使用 OGRE 默認支持的格式。 二、基本框架布局 根據(jù)上一節(jié)的一些基本需求,做出一個簡單的布局如下圖: 窗體大?。?1024*768,太大了有點顯示器放不下!支持最大化,最小化,關(guān)閉按鈕,支持手動拖大拖小。 擁有菜單項(支持快捷鍵,圖標(biāo)): File : New, Open, Save, Save As, Exit Edit: Undo, Redo,Copy, Paste(這個功能 暫時保留 ) Window:Entity List, Texture List ,Node List, property,Log,(支持圖標(biāo) check) Help:About 工具欄擁有按鈕: New, Open, Save, Save As, Undo, Redo,Copy, Paste, Entity List, Texture List , Scene, property,Log,(部分支持 check) Dock 窗口 (支持自由拖動,重新排列,疊加,關(guān)閉,打開 ): EntityList, Texture List, Node List, property,(這四個都可以是左右兩側(cè)), log 窗口 (只能在下側(cè) ) 視口: OGRE 的顯示窗口,大小可以改變。我們這里暫時只提供一個窗口,通過狀態(tài)機加多個攝影機來管理瀏覽。 各個 Dock 窗口都擁有自己的小工具欄, Entity List\Texture List\Node list 都是樹型結(jié)構(gòu),欄目里面擁有相應(yīng)添加刪除的子功能。 屬性欄使用了 QT 的第三方庫,這個庫得另行下載,后面會有詳細介紹。 日志欄使用 QListWidget,提供 SystemLog 方法,添加日志后自動跳轉(zhuǎn)到最新。 狀態(tài)欄顯示鼠標(biāo)移上控件時的一些詳細說明。 三、窗體、菜單欄、工具欄、狀態(tài)欄 A、創(chuàng)建窗體 我還是按照 QT 基礎(chǔ)那節(jié)的內(nèi)容創(chuàng)建一個窗體類,不同的是這個窗體類現(xiàn)在繼承于 QMainWindow,它會使得封裝中央部件、菜單條和工具條以及窗口狀態(tài)變得更容易。 接下去,設(shè)置標(biāo)題和窗口大?。? view plaincopy to clipboardprint? setWindowTitle(Editor)。 //設(shè)置窗口標(biāo)題 resize( WINDOW_WIDTH, WINDOW_HEIGHT)。// 設(shè)置窗口大小 setWindowTitle(Editor)。 //設(shè)置窗口標(biāo)題 resize( WINDOW_WIDTH, WINDOW_HEIGHT)。// 設(shè)置窗口大小 其中 WINDOW_WIDTH 和 WINDOW_
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1