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()用于存取数组中一系列相邻的元素。
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()用于存取数组中一系列相邻的元素。
相关文章推荐
- OPENGL学习笔记(三)
- OpenGL学习笔记1:环境配置和基本流程
- OpenGL学习笔记6:高级纹理知识
- LearnOpenGL学习笔记8:光照基础
- opengl vc2005平台学习 学习笔记(一)--环境的搭建
- 【OpenGL 学习笔记03】点画多边形
- OpenGL ES学习笔记之五
- OpenGL入门学习笔记一
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Opengl学习笔记——顶点数组
- OpenGl学习笔记4之通用的视图变换函数(glLoadIdentity,glMatrixMode)
- OpenGL学习笔记: (1)mac下OpenGL环境搭建
- OpenGL 学习笔记(3)绘制几何物体
- OpenGL学习笔记0(综合整理)
- OpenGL学习笔记--渲染yuv纹理
- OpenGL学习笔记(10)抗锯齿
- OpenGL 学习笔记(2)创建第一个图形
- opengl学习笔记2-1-基本的运行框架
- OpenGL 学习笔记一
- OpenGL2.0学习笔记【二】——(第二章)矩形的绘制