一、OpenGL 簡介
OpenGL(Open Graphics Library), 是一個跨平台的全局性圖像處理API, 幾乎可以用於所有操作系統中。OpenGL提供了一套能夠顯示複雜三維圖形的高效的底層硬體介面(API)。在業內廣泛應用於計算機圖形、虛擬現實、遊戲開發等領域。
OpenGL 是由 Silicon Graphics 構建,是一種用於圖形計算機的 API。最初設計是作為硬體加速3D 圖形的備選渲染API。SILICON GRAPHICS 還維護著這個庫,並推動它的發展。OpenGL 為 C、C++、Python 和 Java 提供了語言綁定。它可被 實現在 PC、工作站、「超級計算機」和遊戲主機。現在 OpenGL 已經被很多圖形界面所使用,比如 Windows 的 Aero 和 Apple 的 Aqua。
#include #include #include
二、OpenGL 開發工具與庫
除了有些必要的程序設計工具和圖形開發工具以外,常用的 OpenGL 開發工具有 glxgears、gears、glmark2、glxinfo。
OpenGL 的庫分為系統提供的庫和第三方提供的庫兩類。
其中,系統提供的庫在安裝完 Mesa 以後自動安裝,比如一些頭文件和鏈接庫。而第三方提供的庫通常是為方便使用 OpenGL 的開發人員而設計的,如 GLUI界面庫、DevIL遊戲圖形文件處理庫等等。
三、OpenGL 編程步驟
使用 OpenGL 進行程序編寫的基本步驟如下:
1.創建窗口
//創建窗口API glutCreateWindow(name);
2.指定上下文
//設置特定於窗口的OpenGL上下文 glutSetWindow(window);
3.窗口調整、視角設定
glViewport(x, y, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(xMin, xMax, yMin, yMax, near, far);
4.繪製圖形
//設置繪圖顏色和繪製方式 glColor3f(red, green, blue); glBegin(GL_TRIANGLES); glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3); glEnd();
5.渲染輪廓
glFlush();
6.加入用戶控制
glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMotionFunc(motion);
四、OpenGL 常見應用
OpenGL 因其豐富的圖形渲染功能而被應用於各種領域。其中,較為常見的應用包括遊戲開發、科學計算等。
1.遊戲開發
OpenGL 在遊戲引擎上得到了廣泛的應用。遊戲開發者可以使用 OpenGL API 來繪製高質量的 2D/3D 圖形、怪物、角色或者背景等元素。
2.科學計算
OpenGL 同樣可以通過拓展的科學計算庫 GLSL 那個與圖形處理器 (GPU) 交互進行向量和矩陣的運算,從而讓編程工作更加實用和簡單。不同領域下的較大規模的科學計算在共享計算資源的處理器基礎上,常會使用 GPU 的處理能力進行加速運算,從而提高計算效率。
五、代碼示例
以下為一個繪製簡單三角形的代碼示例:
#include #include #include void display(void) { // 繪製顏色緩衝區 glClear(GL_COLOR_BUFFER_BIT); // 繪製三角形,默認為白色 glBegin(GL_TRIANGLES); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); glVertex2f(0, 0.5); glEnd(); glutSwapBuffers(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400, 400); glutCreateWindow("OpenGL 第一個窗口"); glutDisplayFunc(display); // 背景顏色為藍色,glClearColor設置背景緩衝區顏色, 但僅是清除當前窗口與更新窗口時所產生的背景,不會影響其他窗口 glClearColor(0.0, 0.0, 1.0, 0.0); glutMainLoop(); return 0; }
原創文章,作者:AIIVI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/332839.html