1. 程式人生 > >教你一步一步用OpenGL寫遊戲——前言

教你一步一步用OpenGL寫遊戲——前言

關於這套教程

這是一個系列的教程。在這套教程裡,我將會把之前用OpenGL+Qt做過的一款遊戲和大家分享,並且從頭到尾一步步分析整個遊戲的實現過程和架構設計。
關於寫這些東西的目的,我想大概有三點吧:其一是想把自己寫過的這個遊戲重新梳理一遍,認真重構重構,真正理解其中用到的技術和演算法,更加深入地把握軟體專案開發技巧以及各種設計模式的運用;其二是想借CSDN這個平臺和廣大網友討論和學習,畢竟是閉門造車做出來的東西,不拿出來給外人看是不知道好壞的;其三算是我的一點感恩之心吧。以前自己一直做伸手黨,只知道看別人的文章,卻從來不自己動手寫點有價值的乾貨。這次打算趁暑假的空閒時間,以我寫的那個遊戲為例寫幾篇教程,希望能幫助大家更好的理解OpenGL和Qt,以及遊戲程式設計方面的一些知識。

關於Paradise

Paradise就是我上面提到的那款遊戲。這是一款3D建築遊戲,玩家可以用各種方塊建立屬於自己的世界。想必大家此刻都想到了一款大名鼎鼎的遊戲:MineCraft。是的,Paradise可以說就是MineCraft的建築模式,我也是在玩過MineCraft之後才有了靈感的。去年暑假的時候開始寫這個遊戲,大概花了一個多月的時間終於完成。今年5月份的時候又在之前程式碼的基礎上改了許多,最終完成了當前這個遊戲版本。下面是遊戲截圖:


這裡寫圖片描述
圖1 選單介面


這裡寫圖片描述
圖2 設定介面


這裡寫圖片描述
圖3 幫助介面


這裡寫圖片描述
圖4 世界選擇介面


這裡寫圖片描述
圖5 遊戲內介面


這裡寫圖片描述
圖6 遊戲截圖一


這裡寫圖片描述
圖7 遊戲截圖二

玩法
1.使用“WASD”鍵移動視角,移動的同時按住“shift”鍵可以加速;
2.移動滑鼠旋轉視角;
3.按滑鼠左鍵建立物塊,按滑鼠右鍵破壞物塊;
4.使用滾輪或者按下數字鍵1-9選擇當前物塊型別;
5.按F鍵將攝像機移動到當前物塊附近;
6.按E鍵開啟物塊庫介面;
7.按B鍵開啟批量建立介面;
8.按O鍵開啟場景編輯器介面;
9.按空格鍵播放下一首背景音樂。

技術梳理

  • 基礎框架
    原生OpenGL + Qt

  • 第三方庫
    Assimp
    FreeImage
    glm

  • 技術特色
    支援Geometry Instancing
    支援Frustum Culling
    支援三種燈光系統(方向光源、點光源、聚光燈光源)
    支援Shadowmapping
    支援滑鼠拾取
    支援MSAA抗鋸齒

其實從本質上來說,Paradise更像是一個簡單的遊戲引擎,或者說一個3D地形編輯器。使用者可以用最簡單的立方體塊,一點一點建立一個複雜豐富的虛擬世界。雖然Paradise的可玩性可能並不高,但在寫這個程式的過程中我卻學習到了很多東西,有很多收穫。在這一點上,Paradise對我來說是意義非凡的。

如果你想學習OpenGL,或者想用OpenGL寫點有意思的東西,那就跟我來吧!

相關推薦

OpenGL遊戲——前言

關於這套教程 這是一個系列的教程。在這套教程裡,我將會把之前用OpenGL+Qt做過的一款遊戲和大家分享,並且從頭到尾一步步分析整個遊戲的實現過程和架構設計。 關於寫這些東西的目的,我想大概有三點吧:其一是想把自己寫過的這個遊戲重新梳理一遍,認真重構重構,真

在VS 2017中配置OpenGL

在VS2017環境中配置OpenGL,我們分三步:配置GLFW、配置GLAD、匯出專案模板。 配置GLFW 1.首先下載GLFW,點選這裡,進入Github下載。 或者 點選這裡從百度雲下載,提取碼為yavo。(注:該連結由中國大學MOOC萬琳老師計算機圖形學課程討論區提供)。 2.然後安裝Cmake後,在.

手把手安裝Hbase,次成功!

ati eight detail soft ack ase http bold font 手把手教你安裝Hbase,一次成功!手把手教你安裝Hbase,一次成功!

20分鐘配好臺服務器

static 後臺 tel jdk下載 代理 down ros 後臺服務 bsp 老曹(曹越)—— 頁面仔,哇哈哈哈 所有軟件和服務均安裝在/usr/local下 mysql5.7直接apt-get安裝 安裝mysql:apt-get install mysql-s

C——如何得到個數的每

//1.1.在螢幕上輸出以下圖案: //* //*** //***** //******* //********* //*********** //************* //*********** //********* //******* //***** //*** //* //

技本功丨騷操作:如何用支菸的時間來個日誌採集工具

作者:良辰 袋鼠雲日誌團隊 後端開發工程師 我放下了手中的鍵盤,陷入沉思, 作為一個優秀的程式猿最重要的就是 氣~勢~ 泰山崩於前的鎮~定~   我用最快的速度掃描了一遍現行的 filebeat、fluentd、flume、 scribe等解決方案, 發

前端如何個人從零基礎開發完整的小程式專案,包括後臺視覺化資料庫。該專案實現了個人簡歷的增刪改查以及展示和轉發分享,以及收藏他人簡歷和檢視,還有最近瀏覽過的簡歷

GitHub:https://github.com/susuGirl/resume 微信小程式名:你的專屬簡歷(微信可直接搜尋出來檢視),教你前端如何一個人從零基礎開發完整的小程式專案,包括後臺視覺化資料庫。該專案實現了個人簡歷的增刪改查以及展示和轉發分享,以及收藏他人簡歷和檢視,還

微信小程式名:的專屬簡歷(微信可直接搜尋出來檢視),前端如何個人從零基礎開發完整的小程式專案,包括後臺視覺化資料庫。

微信小程式名:你的專屬簡歷(微信可直接搜尋出來檢視),教你前端如何一個人從零基礎開發完整的小程式專案,包括後臺視覺化資料庫。該專案實現了個人簡歷的增刪改查以及展示和轉發分享,以及收藏他人簡歷和檢視,還有最近瀏覽過的簡歷。 教程: GitHub:https://github.com/sus

[swift實戰入門]手把手編寫2048()

蘋果裝置越來越普及,拿著個手機就想搗鼓點啥,於是乎就有了這個系列,會一步一步教大家學習swift程式設計,學會自己做一個自己的app,github地址:https://github.com/scarlettbai/2048.git。 這篇文章需要大家瞭

別人的靈敏度永遠壓不住槍?手把手怎麼調節套適合自己的刺激戰場靈敏度

刺激戰場靈敏度到底怎麼調才適合自己?之前分享了好幾套刺激戰場主播的靈敏度,但是很多玩家用過之後表示不適合。其實大神的靈敏度也不一定適合每個人,跟你的手機機型、操作指法等都有關係,我想了一下,與其給你們靈敏度,不如教你們怎麼調節一套適合自己的靈敏度來得實用。   壓槍的三大要素

怎麼分割篇PDF文件

我們在寫作中,發現編寫的文字下拉出來顯示很多頁,篇篇翻閱似乎不是我們的初衷,相反我們更希望的就是將PDF文件拆分成多個文件,這樣即便是在手機上也能搜尋到精彩的主題。pdf分割軟體就可以將一個較大的PDF文件分割成多個獨立的頁面​。  具體操作步驟如下:  1、滑鼠雙擊開啟P

如何開發款實用的完整Android App,附原始碼

熱文導讀 | 點選標題閱讀作者:OCNYang連結:https://juejin.im/post

《你好哇,程式設計師》—如何成為名牛X的程式設計師

關注安大哥應該是從《漫談程式設計師系列》部落格開始,他的部落格語言幽默風趣,邏輯清晰,而且經常配以豐富的圖文,非常直觀和容易理解。 再後來瞭解到,安大哥剛好與我一樣也是從事C++開發,就又多了一個關注

部落格沒高質量配圖?python爬蟲繞過限制鍵搜尋下載圖蟲創意圖片!

目錄 前言 分析 理想狀態 爬蟲實現 其他注意 效果與總結 @(文章目錄) 前言 在我們寫文章(部落格、公眾號、自媒體)的時

如何在網頁上利用H5快速實現動畫效果

meta ole adding play tor margin time 方式 scrip 在web開發中,GIF動畫效果是隨處可見,比如常見的loading加載、人物奔跑的gif圖片等等,那麽這些都是怎麽實現的呢?其實實現的原理很簡單,簡而言之,這些所謂的動畫都是一幀一幀

手把手 打造 Win 10 好終端(媲美Mac)

自從win 10  Linux子系統釋出以來,受到廣大技術愛好者的歡迎。網上的很多教程已經可以80%的用來當成原生Linux系統來用。好用的命令列為win 10 操作增加了很多力量,方便快捷很多。但是終端由於cmd powershell 的限制,始終不完美。自己琢磨了一個解

如何辨別網站是Vue.js還是React.js

第一步:找個方式科學上網 第二步:開啟chrome應用商店,搜尋vue.js devtools或者React Developer Tools 第三部:開啟你想要判斷的網站,如果是Vue框架寫

idou老師學Istio 08: 調鏈埋點是否真的“零修改”?

容器 inbound 基金 傳遞 outbound 高級 號稱 檢查 mail 本文將結合一個具體例子中的細節詳細描述Istio調用鏈的原理和使用方式。並基於Istio中埋點的原理解釋來說明:為了輸出一個質量良好的調用鏈,業務程序需根據自身特點做適當的修改,即並非官方一直在

asp微信掃掃代碼,asp的實現調微信掃掃功能

code bar lis desc java scan 二維碼 卡號 open 最近一個客戶要求想在他的微信會員卡系統中實現調用微信掃一掃功能,掃描他的會員卡上的條形碼,讀出會員卡號來,研究了一會,發現並不難,下面上代碼: <div id="result"&g

移動網絡怎麽玩電信/網通區遊戲不卡!降低延遲!

適合 延遲 -o 賬號 ffffff text 教你 pro 器) 現在很多遊戲會分電信區網通區的幾個適合您網絡的選擇的區。 但是我發現移動網絡玩電信/網通區遊戲也是非常卡該怎麽辦呢! 小編這邊有個方法把您網絡切換時候您所玩區的網絡! 借助工具:飛豬IP代理(遊戲加速器)首