OpenGL是什么
在我們編寫openGL程序之前,我們首先需要知道什么是OpenGL。
將OpenGL作為一個(gè)API
OpenGL 通常被認(rèn)為是應(yīng)用程序接口(API)。OpenGL API有不同編程語言的實(shí)現(xiàn)版本。但是,它們最終使用的都是最底層的C語言的接口。
在C語言的API中,定義了很多typedefs,#define,以及函數(shù)。typedefs用于定義openGL里面使用到的基本的數(shù)據(jù)類型,如GLint,GLfloat等。
復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如struct,在openGL中沒有直接暴露給用戶,都是隱藏在一系列的API背后。這樣有利于將OpenGL API改寫成非C語言實(shí)現(xiàn)的版本。
在C++中,如果你想要一個(gè)包含整型,浮點(diǎn)型和字符串的類型,你會(huì)采取下面的措施實(shí)現(xiàn):
struct Object { int count; float opacity; char *name; }// Create the storage for the objectObject newObject;// Put data into the objectnewObject.count = 5; newObject.opacity = 0.4f; newObject.name = "Some String";
在opengl中,采用api的方式實(shí)現(xiàn),如下:
// Create the storage for the object GLuint objectName;glGenObject(1, &objectName);// Put data in to the object glBindObject(GL_MODIFY, objectName);glObjectParameteri(GL_MODIFY, GL_OBJECT_COUNT, 5);glObjectParameteri(GL_MODIFY, GL_OBJECT_OPACITY, 0.4f);glObjectParameteri(GL_MODIFY, GL_OBJECT_NAME, "Some String");
上述的例子中,并不是真實(shí)的opengl的命令,僅僅用來說明,在opengl中一個(gè)對(duì)象是怎么通過api的方式創(chuàng)建以及賦值的。
opengl自己擁有存儲(chǔ)所有opengl對(duì)象的存儲(chǔ)空間。因此,用戶只能夠通過引用的方式來訪問對(duì)象。幾乎所有的opengl對(duì)象都會(huì)被綁定到一個(gè)非符號(hào)整型(GLuint)。對(duì)像會(huì)被類似于glGen*的函數(shù)創(chuàng)建,星號(hào)表示的對(duì)象的類型。第一個(gè)參數(shù)表示有多少個(gè)對(duì)象要被創(chuàng)建,第二個(gè)參數(shù)用來接受創(chuàng)建的對(duì)象的名字。
大多數(shù)對(duì)象首先需要被綁定到上下文,才能夠被更改。很多對(duì)象可以被綁定到上下文的不同的位置,這就允許一個(gè)對(duì)象以不同的方式被使用。這些不同的位置被稱為“targets”,所有的對(duì)象都擁有一個(gè)合法的目標(biāo)列表,有些對(duì)象僅有一個(gè)目標(biāo)。在上面的例子中,GL_MODIFY是
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式