OpenGL是什么
在我們編寫openGL程序之前,我們首先需要知道什么是OpenGL。
將OpenGL作為一個API
OpenGL 通常被認為是應用程序接口(API)。OpenGL API有不同編程語言的實現(xiàn)版本。但是,它們最終使用的都是最底層的C語言的接口。
在C語言的API中,定義了很多typedefs,#define,以及函數(shù)。typedefs用于定義openGL里面使用到的基本的數(shù)據(jù)類型,如GLint,GLfloat等。
復雜的數(shù)據(jù)結構,如struct,在openGL中沒有直接暴露給用戶,都是隱藏在一系列的API背后。這樣有利于將OpenGL API改寫成非C語言實現(xiàn)的版本。
在C++中,如果你想要一個包含整型,浮點型和字符串的類型,你會采取下面的措施實現(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的方式實現(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");
上述的例子中,并不是真實的opengl的命令,僅僅用來說明,在opengl中一個對象是怎么通過api的方式創(chuàng)建以及賦值的。
opengl自己擁有存儲所有opengl對象的存儲空間。因此,用戶只能夠通過引用的方式來訪問對象。幾乎所有的opengl對象都會被綁定到一個非符號整型(GLuint)。對像會被類似于glGen*的函數(shù)創(chuàng)建,星號表示的對象的類型。第一個參數(shù)表示有多少個對象要被創(chuàng)建,第二個參數(shù)用來接受創(chuàng)建的對象的名字。
大多數(shù)對象首先需要被綁定到上下文,才能夠被更改。很多對象可以被綁定到上下文的不同的位置,這就允許一個對象以不同的方式被使用。這些不同的位置被稱為“targets”,所有的對象都擁有一個合法的目標列表,有些對象僅有一個目標。在上面的例子中,GL_MODIFY是
網(wǎng)友評論