基於C/S架構的3D對戰網絡遊戲C++框架 _04客戶端詳細設計與OpenGL、Qt基礎

本系列博客主要是以對戰遊戲爲背景介紹3D對戰網絡遊戲經常使用的開發技術以及C++高級編程技巧,有了這些知識,就能夠開發出中小型遊戲項目或3D工業仿真項目。linux

筆者將分爲如下三個部分向你們介紹(每日更新):算法

一、實現基本通訊框架,包括對遊戲的需求分析、設計及開發環境和通訊框架的搭建;數據庫

二、實現網絡底層操做,包括建立線程池、序列化網絡包等;編程

三、實戰演練,實現相似於CS反恐精英的3D對戰網絡遊戲;windows

技術要點:C++面向對象思想、網絡編程、Qt界面開發、Qt控件知識、Boost智能指針、STL算法、STL、容器、Boost網絡庫、OpenGL座標變換、OpenGL加載3D模型、MD2模型加載、MDL模型加載網絡

 

好了,下面就讓咱們來開始今天的學習之旅,今天咱們將進行客戶端的詳細設計,同時帶你們熟悉OpenGL的相關知識及使用和Qt的相關知識及應用,爲了深刻的學習和研究,這個遊戲框架的客戶端我沒有選擇用Cocos、Unity、UE等遊戲引擎直接進行製做,而是選擇了Qt和OpenGL,對Unity引擎進行實戰遊戲開發感興趣的能夠關注我後續會發表的其餘博客,感謝你們的支持~。框架

 

1、OpenGL基礎

(1)什麼是OpenGL:函數

  OpenGL是一套應用程序編程接口(API),藉助這個API咱們開發人員就能夠開發出對圖形硬件具備訪問的能力的程序。咱們可使用OpenGL開發出運行效率較高的圖形程序或遊戲,由於OpenGL很是接近底層硬件而且OpenGL使得咱們沒必要去關注圖形硬件的細節。既然咱們開發人員沒必要關注圖形硬件的細節,那麼咱們須要關注什麼呢?咱們須要關注OpenGL如何繪製,按照專業術語就是根據物體的規格參數及相關屬性,藉助虛擬照相機和光照生成一幅該物體的圖像。OpenGL程序與平臺是無關的,因此OpenGL API中不包含任何輸入函數或窗口函數,緣由是由於這兩種函數都要依賴於特定的平臺,例如Windows,Linux或是其餘系統。 學習

  OpenGL API是過程性的,不是描述性的,即OpenGL不是面向對象的,因此OpenGL沒法利用面向對象的特性,例如重載,繼承等,可是咱們可使用面向對象的程序與OpenGL的實現進行連接就能夠了。做爲開發人員來講,咱們不須要去描述場景的性質和外觀,而是去肯定一些操做步驟,爲些操做步驟是爲實現必定圖形或圖像所服務的。咱們在實現這些步驟時能夠調用OpenGL中的一些命令,能夠利用這些命令繪製點、直線、多邊形或是其它圖形,還能夠調用這些命令實現光照、着色,動畫等各類效果。動畫

  OpenGL的實現能夠是軟件實現,也能夠是硬件實現。軟件實現是對OpengGL函數調用時做出的響應並建立二維或三維圖像的函數庫,那麼硬件實現則是經過設置可以繪製圖形或圖像的圖形卡驅動程序。通常來講,硬件實現要比軟件實現快得多。咱們都應該熟悉,在Windows上,是由圖形設備接口將圖形或圖像顯示在屏幕上或是其餘顯示設備上的。OpenGL的實現就軟件實現來講,在Windows上會根據程序命令的要求,生成相應的圖形或圖像,而後會將這個圖形或圖像移交給圖形設備接口,由圖形設備接口將圖形或是圖像顯示在咱們的屏幕上或是其餘顯示設備。這樣一說,咱們可能會明白一點OpengGL原來是在應用程序和圖形設備接口之間運做,但我感受還不能準確地這樣說。你們看下下面的圖對OpenGL的工做原理可能會理解得更明白一點: 

  

  上圖是OpenGL的軟件實現的工做原理。須要注意的是上圖中的構造圖形是經過軟件進行構造的。

  OpenGL的硬件實現與軟件實現稍微有些不一樣,硬件實現是將OpenGL的調用傳遞給硬件驅動程序,而硬件驅動程序不會將生成的圖形或圖像傳遞給圖形設備接口,而是直接與顯示設備通訊,直接將圖形或圖像結果傳遞給顯示器或其餘顯示設備。以下圖所示:

 

  OpenGL在繪製圖形時是基於一個被稱爲流水線模型的模式。也就是說其中的幾何圖形在程序中經過描述空間位置或頂點來指定其形狀並由程序生成,這些頂點在流經一系列模塊時,每一個模塊在圖形的基本組成部分(在這裏稱爲圖元)通過時對其實施一種或多種操做。模塊負責對流經的圖元實施一種或多種操做變換,例如:旋轉、平移、縮放及對攝像機進行定位等。

 (2)OpenGL的組成

  OpenGL中包含許多對圖形圖像處理的函數,主要包括如下幾種:

  圖元函數:指定要生成圖形或圖像的圖元。主要有兩種類型,一種是繪製二維或三維的幾何圖元,如點,線,多邊形等;另外一種是離散型的實體,例如:位圖。

  屬性函數:屬性函數主要是控制圖元的外觀及樣式,例如:對圖元的顏色、線型、光照及紋理等效果處理。

  觀察函數:觀察函數主要是對攝像機屬性的操做。咱們能夠操做攝像機顯示圖形或圖像近距或是遠距效果。

  控制函數:可以讓咱們啓用或是彬各類OpenGL的特性。

  查詢函數:可讓咱們查詢OpenGL狀態變量的值。

  輸入與窗口控制函數:這個自己不屬於OpenGL,可是因爲咱們會常常在程序中輸入輸出或是窗口控制操做,因此,這些函數仍是比較重要的。

2、Qt基礎

(1)什麼是QT:
  Qt是1991年奇趣科技開發的一個跨平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者創建藝術級的圖形用戶界面所需的全部功能。Qt很容易擴展,而且容許真正地組件編程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等圖形界 面庫和 Windows 平臺上的 MFC,OWL,VCL,ATL 是同類型的東西。

(2)爲何選用QT:

  1.支持各大主流桌面操做系統:mac、windows、linux
  2.提供大量的庫:xml、數據庫、線程、網絡、容器、智能指針、正則、OpenGL等等
  3.C++開發,執行速度比Java和C#快得多
  4.堪稱典範的開發文檔
  5.支持LGPL免費受權
  6.快速實用的UI設計器
  7.單根繼承和元對象系統,彌補了C++的一些不足
  8.優美的接口,清晰的代碼,是最漂亮的C++庫之一
  9.強大的內存管理

 

3、遊戲客戶端設計

(1)思考:

  根據以前對客戶端的分析和設計,咱們如何對客戶端進行一個詳細設計?

(2)類圖:

 

4、3D場景模塊設計

(1)思考:

  根據對3D界面的顯示需求以及3D場景模塊的關接口需求,應該從哪些方面考慮該模塊的詳細設計?

(2)類圖:

 

 

 

  歡迎你們學習交流,若有不足懇請批評指正,轉載請註明出處,感謝您的支持。若是您也喜歡個人博客能夠持續關注我,讓咱們一塊兒成長,共同進步。

  生活很精彩 剔除雜質,留下對編程的窮極探索 純粹追求。

相關文章
相關標籤/搜索