跳轉到內容

OpenGL 程式設計/基礎/結構

來自華夏公益教科書,開放的書本,開放的世界

設定新專案

[編輯 | 編輯原始碼]

根據您計劃使用的應用程式,您可能需要在開始之前設定一個新的 C++ 專案。 這方面的說明因程式而異,因此如果您不確定如何操作,請檢視程式的手冊。

許多 OpenGL 應用程式利用了一個跨平臺(Windows、Mac 和 Linux 相容)工具包,稱為 GLUT,它與 OpenGL 一起使用。 GLUT 用於繪製視窗並處理滑鼠和鍵盤事件,這是 OpenGL 本身無法做到的。 GLUT 有替代品,但 GLUT 是最簡單的跨平臺執行的 GUI 工具包,因此我們假設您已安裝 GLUT。

GLUT 有許多缺點,這與它的缺乏靈活性有關。 由於 GLUT 必須在三個截然不同的作業系統上以相同的方式工作,因此您沒有任何平臺特定的功能。 GLUT 本身無法利用作業系統提供的視窗小部件(按鈕、下拉選單)。 您的應用程式將無法更改視窗級選單(雖然上下文選單可以自定義)。 如果這些限制對您的專案是無法接受的,那麼您將不得不使用 GLUT 的替代方案。 這些將在本華夏公益教科書的後面部分討論。 現在,先用 GLUT 吧。

我的第一個 OpenGL 程式

[編輯 | 編輯原始碼]

開啟(或建立)您的 main.cpp 檔案。 您應該熟悉此檔案的基本格式

#include <iostream>
int main(int argc, char *argv[])
{
	return 0;
}

包含 OpenGL 標頭檔案

[編輯 | 編輯原始碼]

我們需要在這裡新增一些包含項,這樣我們才能在我們的應用程式中使用 OpenGL。 根據您安裝 OpenGL 的方式和位置,您可能需要稍微調整一下這些路徑。

#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glu.h>

這包括基本的 OpenGL 命令、GLUT 和一個稍後有用的實用工具包 GLU。 請注意,如果您的作業系統區分大小寫(例如 Linux),則在編譯之前必須將 GL 大寫。

如果使用 Visual Studio,請確保在任何 OpenGL 標頭檔案之前包含 windows.h。

建立視窗

[編輯 | 編輯原始碼]

現在我們有了庫,我們可以開始設計我們的介面,在我們的 int main() 函式中建立我們的視窗

#ifdef WIN32 //if using windows then do windows specific stuff.
#define WIN32_LEAN_AND_MEAN //remove MFC overhead from windows.h which can cause slowness
#define WIN32_EXTRA_LEAN

#include <windows.h>
#endif

#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glu.h>

void display() { /* empty function   required as of glut 3.0 */ }

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
	glutInitWindowSize(800,600);
	glutCreateWindow("Hello World");
	glutDisplayFunc(display);
	glutMainLoop();
	return 0;
}

我們首先呼叫 glutInit(),它啟動 GLUT 以供我們使用。 接下來,我們設定一個顯示模式。 現在,只需使用我們在這裡提供的 glutInitDisplayMode 設定。 您可能稍後會調整這些設定。 然後我們告訴 GLUT 我們希望視窗有多大; 800 x 600 現在可以了。 最後,我們使用 glutCreateWindow() 實際建立視窗,將視窗標題作為引數傳遞,並將程式的控制權交給 GLUT,透過 glutMainLoop()。 當您使用 GLUT 時,永遠不要忘記呼叫 glutMainLoop()!

您可能已經注意到到目前為止的一些事情:每個函式都以 glut- 為字首。 當我們開始實際使用 OpenGL 本身時,每個函式都將以一個簡單的 gl- 為字首。 這是為了組織。

嘗試編譯此應用程式。 希望您應該得到一個標題為“Hello World”的 800x600 視窗。 如果沒有,請參考本華夏公益教科書的安裝部分,並考慮重新安裝。

準備繪製東西

[編輯 | 編輯原始碼]

大多數簡單的 OpenGL 應用程式僅包含三個元素

  • 一個設定函式,它在您開始實際繪製之前配置所有內容。
  • 一個顯示函式,它進行實際的繪製,以及
  • int main(),我們已經在上面配置了大部分內容。 int main 只調用設定函式,並告訴 GLUT 在需要時使用顯示函式。

一些 OpenGL 程式碼可能看起來像這樣

#ifndef WIN32 //if using windows then do windows specific stuff.
#define WIN32_LEAN_AND_MEAN //remove MFC overhead from windows.h which can cause slowness
#define WIN32_EXTRA_LEAN

#include <windows.h>
#endif

#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glu.h>

void setup() { /* empty function  nothing to setup yet */ }
void display() { /* empty function   required as of glut 3.0 */ }

int main(int argc, char *argv[])
{
       glutInit(&argc, argv);
       glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
       glutInitWindowSize(800,600);
       glutCreateWindow("Hello World");

       setup();
       glutDisplayFunc(display);

       glutMainLoop();

       return 0;
}

這段程式碼本身並沒有繪製任何東西,因為 display() 是空的。

下一章 OpenGL_Programming/Basics/Rectangles

華夏公益教科書