創作內容

3 GP

[私人記錄用]使用OpenGL於C++的隨手記

作者:新手方│2017-11-16 00:12:47│巴幣:6│人氣:1129
因課程作業需要,故使用Codeblocks建立C++專案寫OpenGL小遊戲
以下是我個人的筆記
之後再整理成教學

0.Code::Blocks

說明:
IDE。系上使用此IDE做為C++的開發工具。

  • 有更動專案的BuildSetting的話一定要點選File->Save Project
  • 快捷鍵
    • CRTL+SHIFT+C(X):註解(反註解)
    • F8:Start(Stop)Debug
    • F9:Build&Run

1.C++ Class(與慣用之C#的不同之處)

直接於Codeblocks新增class會自動做好標頭檔與實做檔案
使用時直接#include ".h檔案"即可

  • C++抽象函式沒有abstract可以用,直接將函式virtual即可讓此class變為抽象類別覆蓋也只須宣告函式就好,不用override
  • 建構子宣告方式
(標頭檔)
ClassName(...);
(實做檔)
ClassName::ClassName(...){
....
}
  • 函式用法為
(標頭檔)
void FunctionName(....);
(實做檔)
void ClassName::FunctionName(...){
....
}
  • 例如OBJ繼承自Model ,(標頭檔)就會如下
class OBJ : public Model{
....(記得直接實做Model的virtual函式,編譯器在Build時才會告訴你。)
}
  • Namespace與class間使用::隔開
  • 使用原生vector時起手式如下,原因尚未查明
#include <vector>
using std::vector;
  • 只要此class中有function含有virtual修飾詞(即為抽象函式)就是抽象類別
  • 抽象函式的宣告後要加上=0
    • 父類別中宣告
      • virtual type FUNCTYON(type _t)=0;
  • 實做抽象函式有兩種
    • 1.即是C#中直接override原函式,因為函式在子類別的名下可以使用子類別的變數及函式
      • 子類別宣告:type FUNCTION(type _t) override;
      • 子類別實做:type ChildrenClassName::FUNCTION(type _t){...}
    • 2.直接實做在父類別的函式。
      • 不用在子類別宣告
      • 實做:type ParentClassName::FUNCTION(type _t){...}

2.GLM(openGL Mathematics)

說明
OpenGL函式庫
支援各種陣列與向量這樣。

使用方式(不更動本機編譯器設定):
  1. 直接下載glm的檔案(通常會是glm-0.9.9-a2之類的名稱)解壓縮至專案目錄中
  2. 在Codeblocks左側的"Manager"欄中對專案按右鍵
  3. 選取build Option....
  4. 左邊選Debug,右邊選擇Search directories分頁中的Compiler。
  5. 點選下方"Add"按鈕,選擇"該專案底下的glm目錄"
  6. 按下OK後,它會問你要不要維持相對路徑,點選是。

3.FreeGlut(延伸自原版GLUT的函式庫)(已棄用)

說明
這貨是用來作視窗的,功能較Winform等等的功能陽春
但可以擺脫小黑窗,使其成為Debug專用(可使用傳統方式印訊息於其上)

該函式庫會直接跟gl的函式做連動

安裝方式:
此影片的第三種方式

使用方式:
該影片的第二種方式產出的源碼

筆記:
key 函式是使用者輸入的函式。
  • 按鍵比對全用小寫。

display是刷新的函式
  • 再對物件作變換時,因為OpenGL會將鏡頭拉回0,0,0的關係,請把glPushMatrix()放前面,glPopMatrix()放後面。
resize是螢幕尺寸變更時後的函式
  • 尚未研究

3.GLEW(OpenGL Extension Wrangler)

說明

使用現代OpenGL的函式庫,當作OpenGL的延伸吧!
值得注意的是如要使用它,不能使用gl.h相關的標頭檔

安裝方法

去官網抓win32版本的binary
然後跟上面影片一樣
BuildSetting的設定

Search Directories
link 分頁新增其目錄的 lib\Release\Win32
Complier分頁新增其目錄的 include

Linker Setting
+glew32s
+glu32
+gdi32

  • 起手式(init那邊請務必使用官方的寫法)
    • 如與glfw一起使用後初始化遇到問題請點此

4.GLFW

說明

取代freeglut的存在。
寫視窗的東西,生命周期與freeglut不同。

5.OpenGL

  • 起手式
  • API無法使用
    • glGenBuffersARB類:在main.h中添加#define GL_GLEXT_PROTOTYPES(Freeglut的bug)
  • Draw


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3790467
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:自製遊戲

留言共 1 篇留言

粒子
建議用gitbook作筆記啦XDD
不過貼在這裡剛好我也看到就是w

03-12 22:07

新手方
沒想到竟然會有人回應XD
雖然做完了但做得不好所以也懶得做教學&做gitbook了......03-13 00:47
我要留言提醒:您尚未登入,請先登入再留言

3喜歡★newhandfun 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【遊戲】 2016121... 後一篇:MySQL官方文件筆記(...

追蹤私訊切換新版閱覽

作品資料夾

kkll7952巴友們
+ 3月-4月遊戲製作進度+簡報分享 + https://home.gamer.com.tw/creationDetail.php?sn=5919640看更多我要大聲說9小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】