因課程作業需要,故使用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(...){
....
}
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函式庫
支援各種陣列與向量這樣。
使用方式(不更動本機編譯器設定):
- 直接下載glm的檔案(通常會是glm-0.9.9-a2之類的名稱)解壓縮至專案目錄中
- 在Codeblocks左側的"Manager"欄中對專案按右鍵
- 選取build Option....
- 左邊選Debug,右邊選擇Search directories分頁中的Compiler。
- 點選下方"Add"按鈕,選擇"該專案底下的glm目錄"
- 按下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
4.GLFW
說明
取代freeglut的存在。
寫視窗的東西,生命周期與freeglut不同。
5.OpenGL
- 起手式
- API無法使用
glGenBuffersARB類:在main.h中添加#define GL_GLEXT_PROTOTYPES(Freeglut的bug)
- Draw