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)友評論