OpenGL学习笔记(三)

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()用于存取数组中一系列相邻的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值