您好,登錄后才能下訂單哦!
為什么那些引擎選擇 C++ 而不是 C,或者說在游戲引擎的開發中有哪些功能、特性是可以通過 C++ 開發而不可以通過 C 的?
我也曾經試著用C寫,可結果發現開發效率、代碼可讀性,都不是一個檔次的。最后才明白,發明C++的人確實是為了解決一些問題,而不是閑的蛋疼。
如何成為一個優秀的高級C++程序員
當初我是非常討厭C++語言的,我認為C++能做的C都能做,它只是個語法糖而已,簡單才是最美的,為什么我要去浪費時間研究那些詭異的特性。
后來慢慢的我對C++的態度變了,現在我覺得C++雖然不完美,但是夠用。它比C可讀性好,做到了開發效率和運行效率的折中,是我寫代碼的首選語言。
其 實并不是全部C++,最主要的架構核心部分C++而已,一個游戲引擎涉及到的內容超級龐大,又要搞效率高性能,又要好效果和易于擴展。高性能的關鍵核心代 碼會使用匯編實現,比如SIMD指令進行各種浮點數學運算,高開發效率比如工具層,會使用腳本等來實現。而只有C++這樣的全能語言才能做到在匯編和腳本 語言中間進行承上啟下。
也就是說C++在游戲引擎中負責最主要的架構部分。
這部分包含了最重要的工程組織,從底層的基礎庫: 擴展std/boost數據結構,封裝時間、IO/文件系統、多線程、反射、內存管理、數學庫。。。。到中間層:窗口、游戲循環、輸入設備/消息、圖形渲 染接口層抽象、實時圖形渲染管線設計、物理/碰撞檢測、尋路、骨骼、動作、模型。。。。再到通用最上層的世界空間層次組織、天空盒、植被、水、粒子特效、 相機、。。。。
C++的開發效率肯定是高于C的,高一倍沒壓力,所以可以用省下來的開發時間去做性能優化。
一般來說,沒有優化過的C++代碼用 Profiling工具壓榨出2~4倍的性能是很可能的。
而用C就算性能好,也沒好到C++的3~4倍,好10~30%就不錯了。
極端優化后的代碼,C要好于C++,但是相同時間內開發出來的代碼 C++性能會好于C,而且C++可讀性可維護性要遠遠好于C。
的確沒有什么不能通過C來做的。但C++更好。
因為游戲項目是個工程問題,關注開發效率。
而游戲引擎又是極端性能敏感的,關注執行效率。
這要求引擎程序有足夠的彈性。可宏觀分析,也可微觀干預。
C++具有C簡潔、直接和可移植的特性。
增加了語言層面的OO和一些良性范式。
在可控的資源損失前提下提高了生產力。
所以適合引擎開發。
C 語言可以說是一門設計的非常成功的語言。但是C語言沒有OOP的特性,在做一些大型項目的時候力不從心。一些大型的C項目,隨著項目的臃腫,人類基本沒辦 法維護這個項目了。要維護這么龐大的項目而又不出錯,只能加入一些OOP特性重構,有經驗的C程序員寫著寫著,很多概念就類似C++了。干脆直接轉C++ 算了。
但是C++卻是一門設計的非常不成功的語言。它為了實現大而全的功能,加入了非常多的特性,而這些特×××叉組合在一起就非常的復雜,人類非常難以駕奴它而且又容易出錯。這也是很多程序員很恨C++的原因。
要解決C++的這個問題,就是給C++訂一套規范。避免使用某些復雜特性,讓它變得足夠簡單和具有高可讀性。在C++11的標準下,配合自己公司定一個科學的內部規范,讓所有員工通過一個C++可讀性培訓。那么C++用起來就非常爽手了。
c++ 和c相比,生產效率要高一點。雖然在一些商業游戲引擎中不使用stl自帶的模版,但都實現了自己的一套模版庫,甚至實現了自己的string庫。如今的一 些商業3d引擎基本具備了跨平臺的能力,但是由于不同平臺的底層api(SIMD運算,文件讀寫,圖形渲染)不一致,因此要對各平臺/API的共有特性進 行抽象,這里c++比c更能勝任這樣的任務。(利益相關:目前在學習swift+Metal)
目前,流行的unrealengine4是完全c++寫的,unity3d 5雖然有用c#但在將來會通過il2cpp轉換成c++,實現運行效率的提升。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。