您的位置:首页 > 运维架构

OpenGL学习笔记(三)

2008-03-20 09:25 489 查看
1、OpenGL的基本状态管理
void glEnable(GLenum cap);
void glDisable(GLenum cap);
这两个函数用来启用和关闭某些状态,有60多个状态的枚举值可用作cap参数。
GLboolean glIsEnabled(GLenum capability); 查询capability的状态是否被启用。
void glGetBooleanv(GLenum pname,GLboolean *params);
void glGetIntergerv(GLenum pname,GLint *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetPointerv(GLenum pname, GLvoid **params);
以上四个函数分别用bool,int,float,double和指针类型获得状态变量pname的值。
OpenGL将相关的状态变量划分为一个属性组,使用函数glPushAttrib()和glPopAttrib()可以一次性恢复和存储该属性组的所有状态变量。注意有些状态变量可以属于多个属性组(如GL_CULL_FACE就属于多边形属性组和启用属性组)。在OpenGL中,有两个不同的属性堆栈,矩阵堆栈(存储服务器状态变量的值)和客户属性堆栈(使用glPushClientAttrib()和glPopClientAttrib()函数来存取),使用属性组来完成属性相关操作,通常比用户自己编写的函数快。大约有20个不同的属性组,无论在客户机还是服务器上,属性都存储在堆栈中,

2、法线向量
法线向量(简称为法线)是垂直于表面的向量,在平面中,所有点的垂直方向都相同,但在曲面中各个点的法线方向可能不同。在OpenGL中,可以指定多边形每个顶点的法线。物体的法线向量定义了其表面的朝向,具体的说,是相对于光源的朝向。OpenGL使用这些向量来确定物体顶点将接受多少光。使用glNormal*()来设置法线向量,接下来当调用glVertex*()函数时,当前的法线将被赋给指定的顶点。

3、顶点数组
顶点数组用来提升OpenGL的渲染速度和性能。使用顶点数组来渲染几何体包括三个步骤:
(1) 启用数组。最多启用8个数组,它们用于存储不同类型的数据:顶点坐标、面法线、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标和多边行边界边标记。glEnableClientState(GLenum array)启用指定的数组。glDisableClientState(GLenum array)函数来禁用指定的数组。
(2) 将数据加入到数组中。对数组的存取是根据它们在内存单元地址(即指向内存单元的指针)进行的。在客户端/服务器模式下,数据存储在客户的地址空间中。用于指定数组数据的函数也有对应的8个,glVertexPointer(),glColorPointer(),glSecondaryColorPointer(),glIndexPointer,glnormalPointer(),glFogCoordPointer(),glTexCoordPointer(),glEdgeFlagPointer()。
(3) 使用数据来绘制几何体。OpenGL通过对指针解除引用来获得被启用的数组中的数据。数组存储在客户端,这一步获得数组的内容,将其发送给服务器,然后沿图形处理流水线传递,用于渲染。可以读取单个数组元素(索引位置)、一系列数组元素(顶点数组的一个子集)或一系列相邻的数组元素的数据。glArrayElement(GLint i);获得所有被启用的数组中的第i个顶点的数据。glDrawElements(),glMaltiDrawElements()和glDrawRangeElements()用于随机读取一系列的随机元素。glDrawArrays()用于存取数组中一系列相邻的元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: