1. 程式人生 > >手把手教你架構3D引擎高階篇系列三

手把手教你架構3D引擎高階篇系列三

Unity對於開發者來說是一個黑盒子,開發者只需掌握引擎提供的指令碼語言,能夠熟練運用就可以了,這導致了現在很多程式設計師對於C++程式設計或者說對於引擎只會一些表面的東西,深入的一概不知。久而久之,你就只是一個指令碼程式設計師,你能做的事情別人也能做,對於公司來說你就屬於可有可無的,薪資方面不會有大的長進,隨時可以被替代,而且對於個人發展也是不利的。為了自己的前途著想還是要學點引擎底層的技術,其實學習引擎對於寫邏輯的幫助還是非常大的。因為你瞭解了引擎底層的原理,在優化方面會助你一臂之力,總之,我們還是要學習引擎技術的。 前面給讀者介紹了引擎庫,本篇部落格我們需要將我們介紹的引擎庫編譯成靜態庫,將它們放到引擎中便於介面的呼叫。我們最終得到的是將所有的庫整合到一個工程裡面編譯,效果圖如下所示: 這裡寫圖片描述

移植BGFX渲染引擎

先看看BGFX圖形渲染庫,我們要做的事情是把BGFX作為圖形渲染庫移植到我們的引擎中,先把BGFX的標頭檔案放到工程裡面,包含內容: 這裡寫圖片描述 再把原始檔cpp放到工程裡面,對應的目錄如下所示: 這裡寫圖片描述 將標頭檔案和原始檔放到工程中的效果圖如下所示: 這裡寫圖片描述

我們還需要移植兩個庫檔案到我們的引擎中,bx庫檔案,下載地址:https://github.com/bkaradzic/bx 這裡寫圖片描述 將上圖中紅框的部分移植到引擎中,效果圖如下所示: 這裡寫圖片描述 再將bimg庫,一個影象庫移植到引擎中,下載地址:https://github.com/bkaradzic/bimg 效果如下所示: 這裡寫圖片描述 這樣我們的BGFX就完全移植到了引擎中,工程如下所示: 這裡寫圖片描述

我們的工程是靜態庫lib,這裡面需要設定如下所示: 這裡寫圖片描述

cmft

BGFX引擎移植完畢,接下來移植cmft一個生成cubemap的庫,網址: https://github.com/dariomanesku/cmft 在這裡給讀者展示移植的過程,我們在使用別人的庫時如何移植的,只把關鍵的地方拿過來使用,如下圖所示: 這裡寫圖片描述 在工程中的效果圖如下所示: 這裡寫圖片描述 該工程也是靜態庫lib,我們同樣需對其進行設定: 這裡寫圖片描述

crunch

crunch是一個圖片壓縮的庫,下載地址: https://github.com/BinomialLLC/crunch 我們將crunch移植到工程中,我們只需要將下圖中的程式碼移植到工程庫中: 這裡寫圖片描述

同樣它也是lib靜態庫,這裡就不用 對上面進行設定了。

lua

lua作為指令碼語言被各大公司使用,這也讓它名聲大噪,作為程式設計師開發,掌握一門指令碼語言也是必備的,程式碼下載地址:https://github.com/LuaDist/lua 同樣我們也需要把程式碼移植到引擎中,將下面標註紅框的程式碼移植到工程中即可。 這裡寫圖片描述 在工程中的效果如下所示: 這裡寫圖片描述

該工程也不需要額外的設定,但是要將其設定成lib靜態庫。

recast

同樣需要將其程式碼移植到工程專案中,移植時將下圖中標註紅框的程式碼移植到引擎中。 這裡寫圖片描述 在工程中的示意圖如下所示: 這裡寫圖片描述 該工程同樣需要設定成lib靜態庫,這個需要設定一下,如下圖所示: 這裡寫圖片描述

SDL

SDL庫是一個輸入,輸出庫,下載地址:https://www.libsdl.org/download-2.0.php 這個將其程式碼直接移植到專案中即可。 在工程中的效果圖如下所示: 這裡寫圖片描述 該庫也是靜態庫lib,同樣需要設定一下: 這裡寫圖片描述

Shaderc

在這裡還需要注意一個問題,就是關於Shader的編譯,大家知道我們寫的Shader指令碼在引擎中需要解釋的,我們在移植BGFX時,沒有將這部分移植進來,所以我們還要返回到BGFX庫中,它的程式碼裡偶第三方庫程式碼,也需要將其移植到專案工程中,看下圖所示的: 這裡寫圖片描述 除了將其設定成靜態庫lib外,我們同樣需要對工程進行設定,如下圖所示: 這裡寫圖片描述 這裡寫圖片描述 在專案工程中顯示如下所示: 這裡寫圖片描述

整個第三方庫完成移植完成後,我們將其編譯成lib靜態庫lib,編譯完成後,我們會檔案得到lib靜態庫檔案,如下所示: 這裡寫圖片描述

總結

第三方的庫編譯是很重要的,開發者必須要掌握的,這也我們後續開發做好準備,後續我會把程式碼庫整理髮布出來。