理解OpenGL物件

2021-09-25 21:27:30 字數 1736 閱讀 3137

opengl庫是用c語言寫的,同時也支援多種語言的派生,但其核心仍是乙個c庫。由於c的一些語言結構不易被翻譯到其它的高階語言,因此opengl開發的時候引入了一些抽象層。「物件(object)」就是其中乙個。

在opengl中乙個物件是指一些選項的集合,它代表opengl狀態的乙個子集。比如,我們可以用乙個物件來代表繪圖視窗的設定,之後我們就可以設定它的大小、支援的顏色位數等等。可以把物件看做乙個c風格的結構體(struct):

struct object_name ;
// opengl的狀態

struct opengl_context

;

// 建立物件

gluint objectid = 0;

//這句只產生乙個物件id,不分配視訊記憶體

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);

這一小段**展現了你以後使用opengl時常見的工作流。我們首先建立乙個物件,然後用乙個id儲存它的引用(實際資料被儲存在後台:視訊記憶體的後台緩衝區)。然後我們將物件繫結至上下文的目標位置(例子中視窗物件目標的位置被定義成gl_window_target)。接下來我們設定視窗的選項。最後我們將目標位置的物件id設回0,解綁這個物件。設定的選項將被儲存在objectid所引用的物件中,一旦我們重新繫結這個物件到gl_window_target位置,這些選項就會重新生效。

1.建立乙個opengl物件 用乙個id儲存它的引用,實際資料被儲存在後台這個後台指的是視訊記憶體的後台緩衝區,類似vbo資料一樣

2.我們將物件繫結至上下文的目標位置,這個目標位置指的是:gl_window_target

上圖中context是我們的opengl狀態機,然後下面的object都是一些opengl的物件,箭頭表示繫結到狀態機上,也就是執行:glbindobject(gl_window_target, objectid);  context中存了很多目標位置

上面說的目標位置類似緩衝區的繫結點:

//建立緩衝區名稱

gluint pixbuffobjs[1];

glgenbuffers(1,pixbuffobjs)

在opengl中有許多不同的繫結點,每個繫結點表示這個緩衝區的用途,我們可以把每個繫結點看做乙個在同一時刻只能繫結乙個物件的槽,下圖列出了這些繫結點:

opengl微發展理解

1.什麼是opengl?一種程式,可以與介面和圖形硬體互動作用 乙個開放的標準 2.軟體管道 請看上圖 apllication層 表示你的程式 呼叫渲染命令。如opengl api abstraction層 表示畫圖介面 如opengl api或者directx api 的實現 device dri...

opengl的矩陣理解

矩陣真的是乙個很神奇的數學工具,雖然單純從數學上看,它並沒有什麼特別的意義,但一旦用到空間中的座標變換,它就 一遇風雲便成龍 大顯神威了。簡單的工具實現了複雜的功能,便預示著要理解它我們還是要花上點功夫的。下面就簡單介紹一下opengl中的轉換矩陣。1 轉換矩陣的原理 opengl中的轉換矩陣是這樣...

opengl微發展理解

1.什麼是opengl?一種程式,可以與介面和圖形硬體互動作用 乙個開放的標準 2.軟體管道 請看上圖 apllication層 表示你的程式 呼叫渲染命令。如opengl api abstraction層 表示畫圖介面 如opengl api或者directx api 的實現 device dri...