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í)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式