OpenGL基礎圖形程式設計(四)基礎程式結構
四、OpenGL基礎程式結構
用OpenGL編寫的程式結構類似於用其他語言編寫的程式。實際上,OpenGL是一個豐富的三維圖形函式庫,編寫OpenGL程式並非難事,只需在基本C語言中呼叫這些函式,用法同Turbo C、Microsoft C等類似,但也有許多不同之處。
本指南所有的程式都是在Windows NT的Microsoft Visual C++整合環境下編譯連線的,其中有部分標頭檔案和函式是為這個環境所用的,例如判別作業系統的標頭檔案“glos.h”。此外,為便於各類讀者同時快速入門,在短時間內掌握OpenGL程式設計的基本方法和技巧,指南中例子儘量採用標準ANSI C呼叫OpenGL函式來編寫,而且所有例程都只採用OpenGL附帶的輔助庫中的視窗系統。此外,這樣也便於程式在各平臺間移植,尤其往工作站UNIX 作業系統移植時,也只需改動標頭檔案等很少很少的部分。下面列出一個簡單的OpenGL程式:
例4-1 OpenGL簡單例程(Simple.c)
下面具體分析整個程式結構:首先,在程式最開始處是OpenGL標頭檔案:<GL/gl.h>、<GL/glaux.h>。前一個是gl庫的標頭檔案,後一個是輔助庫的標頭檔案。此外,在以後的幾章中還將說明OpenGL的另外兩個標頭檔案,一個是<GL/glu.h>實用庫的標頭檔案,另一個是<GL/glx.h>X視窗擴充庫的標頭檔案(這個常用在工作站上)。接下來是主函式main()的定義:一般的程式結構是先定義一個視窗:
然後是視窗內清屏:
再接著是在視窗內畫一個物體:
從表面上看,上述程式程式碼很簡單,實際上已經用到了預設的投影形式(正射投影)。再看glFlush()函式,表示強制繪圖完成。最後一句_sleep(1000),引數單位為毫秒,整句意思是保持現有狀況一秒鐘,然後結束程式執行。這個函式是VC++的庫函式。
總而言之,OpenGL程式基本結構為定義視窗、清理視窗、繪製物體、結束執行。
用OpenGL編寫的程式結構類似於用其他語言編寫的程式。實際上,OpenGL是一個豐富的三維圖形函式庫,編寫OpenGL程式並非難事,只需在基本C語言中呼叫這些函式,用法同Turbo C、Microsoft C等類似,但也有許多不同之處。
本指南所有的程式都是在Windows NT的Microsoft Visual C++整合環境下編譯連線的,其中有部分標頭檔案和函式是為這個環境所用的,例如判別作業系統的標頭檔案“glos.h”。此外,為便於各類讀者同時快速入門,在短時間內掌握OpenGL程式設計的基本方法和技巧,指南中例子儘量採用標準ANSI C呼叫OpenGL函式來編寫,而且所有例程都只採用OpenGL附帶的輔助庫中的視窗系統。此外,這樣也便於程式在各平臺間移植,尤其往工作站UNIX 作業系統移植時,也只需改動標頭檔案等很少很少的部分。下面列出一個簡單的OpenGL程式:
例4-1 OpenGL簡單例程(Simple.c)
#include <GL/gl.h>
#include <GL/glaux.h>
#include "glos.h"
void main(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("simple");
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glRectf(-0.5,-0.5,0.5,0.5);
glFlush();
_sleep(1000);
}
這個程式執行結果是在螢幕視窗內畫一個紅色的方塊。下面具體分析整個程式結構:首先,在程式最開始處是OpenGL標頭檔案:<GL/gl.h>、<GL/glaux.h>。前一個是gl庫的標頭檔案,後一個是輔助庫的標頭檔案。此外,在以後的幾章中還將說明OpenGL的另外兩個標頭檔案,一個是<GL/glu.h>實用庫的標頭檔案,另一個是<GL/glx.h>X視窗擴充庫的標頭檔案(這個常用在工作站上)。接下來是主函式main()的定義:一般的程式結構是先定義一個視窗:
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("simple");
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA)設定視窗顯示模式為RGBA方式,即彩色方式,並且圖形快取為單快取(SINGLE
BUFFER)。 auxInitPosition(0, 0, 500, 500)定義視窗的初始位置,前兩個引數(0, 0)為視窗的左上角點的螢幕座標,後兩個引數(500,500)為視窗的寬度和高度。auxInitWindow("simple")是視窗初始化,字元引數是視窗名稱。然後是視窗內清屏:
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一句將視窗清為黑色,第二句將顏色緩衝區清為glClearColor(0.0, 0.0, 0.0,
0.0)命令所設定的顏色,即同視窗背景顏色一致。再接著是在視窗內畫一個物體:
glColor3f(1.0,0.0,0.0);
glRectf(-0.5,-0.5,0.5,0.5);
很明顯,第一句設定物體顏色,函式中前三個引數分別為R、G、B值,最後一個引數是Alpha值,範圍都從0至1;第二句繪製一個二維矩形。注意:OpenGL是針對三維圖形而言,因此用作OpenGL程式設計繪製物體必須意識到任何一個物體都是三維的,具有空間性,而顯示於螢幕上的物體都是三維物體在二維平面上的投影。從表面上看,上述程式程式碼很簡單,實際上已經用到了預設的投影形式(正射投影)。再看glFlush()函式,表示強制繪圖完成。最後一句_sleep(1000),引數單位為毫秒,整句意思是保持現有狀況一秒鐘,然後結束程式執行。這個函式是VC++的庫函式。
總而言之,OpenGL程式基本結構為定義視窗、清理視窗、繪製物體、結束執行。
相關文章
- OpenGL基礎圖形程式設計(二)OpenGL概念建立程式設計
- OpenGL基礎圖形程式設計(三)WindowsNT下的OpenGL程式設計Windows
- OpenGL基礎圖形程式設計(一)OpenGL與3D圖形世界程式設計3D
- Windows程式設計系列:圖形程式設計基礎Windows程式設計
- Shell程式設計基礎學習之四:語法結構程式設計
- OpenGL shader 程式基礎
- 程式設計基礎程式設計
- 網路程式設計基礎-socket基礎程式設計
- 程式設計基礎四大件程式設計
- Socket程式設計基礎程式設計
- Go程式設計基礎Go程式設計
- Java程式設計基礎Java程式設計
- Shell程式設計-基礎程式設計
- C程式設計基礎C程式程式設計
- shell程式設計基礎程式設計
- Java 基礎02Java程式設計基礎Java程式設計
- 5-Windows程式設計 -繪圖基礎Windows程式設計繪圖
- 3D遊戲程式設計與設計4——遊戲物件與圖形基礎3D遊戲程式設計物件
- Python多程式程式設計基礎——圖文版Python程式設計
- Java程式設計基礎29——JavaSE總結Java程式設計
- Kotlin 基礎-程式結構(上)Kotlin
- SVG 基礎圖形SVG
- 程式設計基礎知識程式設計
- shell程式設計基礎二程式設計
- 【程式設計基礎】輸出程式設計
- 【socket程式設計基礎模板】程式設計
- 網路程式設計基礎程式設計
- QML程式設計 基礎 小白程式設計
- JNI程式設計基礎(一)程式設計
- 【Java基礎】通用程式設計Java程式設計
- linux程式設計基礎Linux程式設計
- pl/sql程式設計基礎SQL程式設計
- python程式設計基礎Python程式設計
- Java圖形設計和多媒體基礎Java
- 《java程式設計基礎》java的基礎知識(三)Java程式設計
- 《計算機基礎與程式設計》第四周學習總結計算機程式設計
- [Java 基礎]Java 程式的基本結構Java
- Golang併發程式設計基礎Golang程式設計