OpenGL 第一篇 入門

下面是個人學習的總結:

知識點:

1,Opengl   它是包含了一系列的 圖形 、 圖像的函數   並不是一個api    緊緊是由 khronos 組織 制定並維護 規範

2,規範 主要是  制定:  函數是如何執行   以及 函數的輸出值     

題外話: 至於內部每個函數的的具體實現   由opengl 庫的開發者決定,OpenGL 的開發者 一般都是 顯卡的生產商提供   也有一些愛好者改編的版本  

3, 

1) OpenGL 3.2  之前 都是 立即渲染模式 (固定渲染管線) 

2) OpenGL  3.3 之後 包括 3.3  使用的是  核心渲染模式    後期一直都是再3.3 基礎之上進行擴展

立即渲染模式  與 核心渲染模式  優缺點

1, 3.2 之前  容易理解  使用簡單   但是大多數功能都被隱藏了,很少能控制OpenGL的計算自由,靈活性差 效率低

2,3.3之後 使用了現代函數,靈活性高了  效率高了 但是學習更難了,需要去理解 OpenGL和圖形編程,可以讓人更深入的理解圖形編程,後續更高版本 都是在 3.3 基礎上進行擴展的      3.3 的規範完全移除了舊的特效

4,擴展  如果出來了 新的特性或 渲染上的大優化。 可以不必等待新的 OpenGL規範面試,我們就可以直接使用新的渲染特性  

if(GL_ARB_extension_name)

{

    // 使用硬件支持的全新的現代特性

}

else

{

    // 不支持此擴展: 用舊的方式去做

}

 

5,狀態機: OpenGL 是一個 巨大的狀態機, 可以通過一系列變量來描述 OpenGL 此刻應該如何運行

       OpenGL 的狀態  被稱爲 OpenGL 的上下文 context    通過改變 context 的變量 來修改渲染

6,OpenGL 的內核  是一個 C庫 

由於C庫的一些特性 很難被翻譯到其他的高級語言 所以 引入了一些抽象層   比如  對象Object 

對象包含了一些 選項的集合,它是一個 OpenGL 狀態的子集  可以給這個對象設置  大小 顏色等等

struct object_name {

    float  option1;

    int    option2;

    char[] name;

};

一個對象例子

// OpenGL的狀態

struct OpenGL_Context {

    ...

    object* object_Window_Target;

    ...     

};
// 創建對象

unsigned int objectId = 0;

//創建一個對象

glGenObject(1, &objectId);

// 綁定對象至上下文

glBindObject(GL_WINDOW_TARGET, objectId);

// 設置當前綁定到 GL_WINDOW_TARGET 的對象的一些選項  比如 寬  高

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);

// 將上下文對象設回默認  解綁這個對象

glBindObject(GL_WINDOW_TARGET, 0);

當我們需要操作繪製的時候,只需要設置 對象變量即可

當我們需要繪製某個對象的時候,只需要綁定 一個包含 對應模型數據的對象就可以了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章