OpenGL是什么
在我们编写openGL程序之前,我们首先需要知道什么是OpenGL。
将OpenGL作为一个API
OpenGL 通常被认为是应用程序接口(API)。OpenGL API有不同编程语言的实现版本。但是,它们最终使用的都是最底层的C语言的接口。
在C语言的API中,定义了很多typedefs,#define,以及函数。typedefs用于定义openGL里面使用到的基本的数据类型,如GLint,GLfloat等。
复杂的数据结构,如struct,在openGL中没有直接暴露给用户,都是隐藏在一系列的API背后。这样有利于将OpenGL API改写成非C语言实现的版本。
在C++中,如果你想要一个包含整型,浮点型和字符串的类型,你会采取下面的措施实现:
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的方式实现,如下:
// 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的方式创建以及赋值的。
opengl自己拥有存储所有opengl对象的存储空间。因此,用户只能够通过引用的方式来访问对象。几乎所有的opengl对象都会被绑定到一个非符号整型(GLuint)。对像会被类似于glGen*的函数创建,星号表示的对象的类型。第一个参数表示有多少个对象要被创建,第二个参数用来接受创建的对象的名字。
大多数对象首先需要被绑定到上下文,才能够被更改。很多对象可以被绑定到上下文的不同的位置,这就允许一个对象以不同的方式被使用。这些不同的位置被称为“targets”,所有的对象都拥有一个合法的目标列表,有些对象仅有一个目标。在上面的例子中,GL_MODIFY是
网友评论

