1. 程式人生 > >opengl入門(ubuntu版)(一)

opengl入門(ubuntu版)(一)

原帖地址

我寫的東西大部分是我學習的體會或是工作中遇到問題,所以很多東西可能不是很“精準”,但我儘量做到好理解、好使用。
如果想比較系統學習opengl可以先從一本叫《opengl超級寶典》的書入手,而且我建議對於沒有任何opengl的基礎的人要看這本書的第四版。因為,opengl在發展過程中以opengl2.0為分界,經歷了一個由固定管線到可程式設計管線的變化,書的第四版還考慮了這個過度性,所以好理解一些,第四版以後乾脆不講固定管線的內容,我覺得不好上手。另外從實用的角度上說,還有很多古老的程式碼是以固定管線為基礎的,對於一些要求不高的場合,固定管線的方式也更方便、簡潔。
另外,如果能弄到英文版的書,我建議讀英文版的,我個人覺得調理更清晰一些。另外,程式碼都是英文寫的,閱讀英文書籍的時候,會積累一些專業性的單詞,對於將來理解他人(尤其是開源專案)程式碼是很有好處的。

1.opengl相關庫的安裝

首先,ubuntu14.04版本已經預設安裝了opengl的核心庫,如果你的ubuntu沒有,可執行如下命令:

$ sudo apt-get install libgl1-mesa-dev*

這會給出一個有關ubuntu的gl庫的列表,你可以選擇一個安裝。我的ubuntu是14.04.1,安裝了libgl1-mesa-dev-lts-utopic。
然後,安裝如下庫:

$ sudo apt-get install build-essiontial
$ sudo apt-get install libglu1-mesa-dev
$

sudo apt-get install freeglut3-dev

其中freeglut3是glut的一個開源實現(glut本身沒有開源實現,所以有兩個人就自己做了一套叫freeglut),而libglu是libgl庫的進一步封裝,提供一些易用的介面。
可以這樣解釋gl、glu、glut三者的關係,gl是最基本的庫,但提供的函式介面用起來很複雜,可能畫一條線就要呼叫7、8個介面,glu就把一些常用gl的介面呼叫封裝為一個介面,增加易用性。而glut提供了一個與平臺無關的視窗系統。至於什麼是視窗系統,如果沒有一定的背景知識,也很不好解釋,所以現在無需明白,在後面深入學習了opengl的相關概念之後,就可以很快明白。

2.一個簡單的例子

配置完相應的環境後,我們可以先跑一個簡單的例子,測試環境配置是否正確。

#include <GL/glut.h>

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    //glBegin(GL_POINTS);
    //glEnd();
    glRectf(-0.5f,-0.5f,0.5f,0.5f);
    glFlush();

    return;
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(0, 0); 
    glutInitWindowSize(300, 300);
    glutCreateWindow("OpenGL 3D View");
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

將以上程式碼儲存為test.c檔案,然後執行如下編譯命令:

$ gcc ./test.c -lGL -lGLU -lglut

編譯成功後會生成一個a.out檔案,執行這個檔案會得到如下結果。
這裡寫圖片描述

可以看出我們成功繪製了一個白色的正方形。