Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. 提供新版 Edge 的 HoloLens 2 Insider Preview
    2021/01/20 08:55
  2. Facebook Oculus Quest 2 開箱文
    2021/01/13 14:19
  3. GitLab 手動執行 pipeline 的預輸入變數
    2021/01/04 11:14

Blog 最新回應

  1. 謝謝你提供的資訊...
    2021/01/17 17:40
  2. MSVC 也是有在進步的 XD...
    2020/12/24 15:55
  3. “如果不想另外定義一個 struct 的........
    2020/12/24 15:49

Keyword 關鍵字

iFlyover git Pandas Vulkan javascript OpenVR Python C++11 OpenMP Windows MR HTC Vive 資訊地圖 OpenNI2 OpenXR Docker GitLab ASUS Xtion HTC Vive Focus xml PHP Oculus Rift S C++17 資料視覺化 HoloLens 2 OpenGL CUDA OpenNI HTC Vive Pro Oculus NiTE2 VR Valve Index Oculus Quest 2 Boost Java 3d print 開放資料 開放資料 Kinect OpenCL Qt OpenCV svn C++ WebGL CubeX Pandas C++14 C++14 Docker C++20 3D立體 VR Python MR

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

OpenGL 3.x 教學: 第0章: 準備OpenGL的開發環境(下)

接下來就是開始撰 寫程式, 建立 OpenGL 的 Framework。 一般 OpenGL 的程式流程是這樣的:

  1. Initial OpenGL Canvas
  2. Load 繪圖所需的資料 / 建立儲存資料的資料結構
  3. Initial OpenGL state 與 各種 OpenGL buffer objects
  4. Draw and Display
  5. 接 受各種事件,根據事件變更資料結構的內容、OpenGL State 或是 OpenGL buffer objects
  6. 反覆流程 4 與流程 5 直至程式結束

而流程 5 的事件種類 ( 如鍵盤按鍵、滑鼠、Timer、視窗縮放等),就取決於 GLUT、SDL、QT 這些 API 支援的程度而定。

以下先以 GLUT 為例的主程式:

int main( int argc, char* argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutCreateWindow( argv[0] );

glewInit();

init();
initGL();

glutDisplayFunc( display );
glutReshapeFunc( reshape );
glutKeyboardFunc( keyboard );

glutMainLoop();
}

其中下面的片段,是執行前述流程 1 的程式碼,負責設定 OpenGL Canvas 的一些參數後,產生 Canvas 。

glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutCreateWindow( argv[0] );

GLUT_RGBA 代表的是這個 Canvas 包含 RGB 以及 Alpha Channel 。

GLUT_DOUBLE 代表的是要求 Canvas 分為前景跟背景,這樣就可以同時顯示前景並更新背景影像,就不會因為只有一個前景而被看到畫一半的影像。

而這個參數會隨著使用的 API 為 GLUT、SDL、QT 等而能夠使用的參數會略微不同,詳細可以再去查各個 Function 的參數說明。

接 下來在 Windows 底下,使用 GLEW 將 OpenGL 1.1 之後的 Function 顯露出來,後面才能使用。

glewInit();

然後就是對應流程 2 與流程 3 的 Function,在 Function 裡面填入讀取資料與設定 然後產生 OpenGL Buffer Objects。

init();
initGL();

設定顯示的 Function 為 void display(),OpenGL 繪圖的動作可以寫在這裡。

glutDisplayFunc( display );

接著設定各種Event 所對應的處理Function ,例如 void reshape( int width, int height ) 是處理視窗大小改變時會執行的Function。而keyboard( unsigned char key, int x, int y )是處理鍵盤按鍵之後的反應。

glutReshapeFunc( reshape );
glutKeyboardFunc( keyboard );

最後便是讓程式透過 glutMainLoop 一直在流程 4 與流程 5 反覆執行。

glutMainLoop();

這樣就完成一個可以開始寫 OpenGL 來畫圖的開發環境與樣版程式了。

GLUT 範例程式下載

SDL範例程式下載 (Reference and Modify from NeHe OpenGL Basecode)

張貼者:柏穎於2010/03/09 18:07 下午有0則回應,瀏覽次數:6,684次

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail