OpenGL学习(1)-基础知识(3)
2013-06-28 23:39
253 查看
OpenGL特性
OpenGL被定义为 图形硬件的一种软件接口,本质上是一个3D图形和模型库,具有高度可移植性,速度远远快于光线追踪器或软件渲染引擎。
OpenGL扩展机制
OpenGL允许提供商通过它的扩展机制进行创新。
使用OpenGL
OpenGL是一种过程性而不是描述性的图形API, 程序员并不需要描述场景和它的外观,而是事先确定一些操作步骤,实现一定的外观或效果。OpenGL并不包含任何负责窗口管理、用户交互或是文件I/O的函数,每个宿主环境提供一些函数实现这些功能,并负责实现一些方法,向OpenGL移交窗口绘图的控制。
GLUT
GLUT代表OpenGL实用工具箱(OpenGL utility toolkit),不同于GLU(OpenGL utility library,OpenGL实用库)。
Windows中GLUT的开发已中断,由freeglut取代,所有基于GLUT的Windows实例程序都利用了freeglut函数库。
使用GLUT可以不必了解任何特定平台的基本GUI编程,我们不能依赖GLUT来完成应用程序的所有任务,但GLUT是非常优秀的学习和演示工具,隐藏了窗口创建和OpenGL环境初始化等平台特定的细节。
GLEW
GLEW(The OpneGL Extension Wrangler Library) ,GLEW is a simple tool that help C/C++ developers initialize extensions and write portalbe applications.
OpenGL API主要通过扩展机制来发展,这种扩展机制能够用来获得指向任何加入OpenGL 1.0之后任何版本核心的OpenGL函数的函数指针,有一个实现OpenGL 3.3 API完全存取的简单方法,就是使用一个 自动初始化 所有新函数指针 并 包含所需类型定义、常量和枚举值的扩展加载库,不止一种这样的扩展加载库可供选择,其中一种维护最好的开源库是GLEW。
GLEW被预先封装在了GLTools库中,GLTools库就是基于GLEW库的。
GLTools
一些有用并且可重用的函数,所有程序员在编写几乎所有OpenGL时都要用到。
GLTools包含一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL 3.3 中用来产生和渲染一些简单3D对象的函数,以及对视觉平截头体、相机类和变换矩阵进行管理的函数的充分支持。
OpenGL数据类型
为使OpenGL代码更易于从一个平台移植到另一平台,OpenGl定义了数据类型,这些数据类型可以映射到所有平台上的特定最小格式。
使用OpenGL定义的变量类型,可以使代码避免因为类型在变量表示上不一致所带来的影响。
OpenGL变量类型和最小位宽
OpenGL数据类型
最小位宽 描述
GLboolean
1 布尔值,真或假
GLbyte
8 有符号8位整数
GLubyte
8 无符号8位整数
GLuchar
8 字符串
GLshort
16 有符号16位整数
GLushort
16 无符号16位整数
GLhalf
16 半精度浮点值
GLint
32 有符号32位整数
GLuint
32 无符号32位整数
GLsizei
32 无符号32位整数
GLenum
32 无符号32位整数
GLfloat
32 32位浮点数
GLclampf
32 [0,1]范围内的32位浮点数
GLbitfield
32 32位
GLdouble
64 64位双精度数
GLclampd
64 [0,1]范围内的64位浮点数
GLint64
64 有符号64位整数
GLuint64
64 无符号64位整数
GLsizeiptr
本地指针大小 无符号整数
GLintptr
本地指针大小 有符号整数
GLsync
本地指针大小 同步对象句柄
所有数据类型都以GL开头,表示OpenGL,OpenGL规范要求的最小存储空间见表,虽然某些数值超出表中范围是可能的,但只有大小在指定范围内的数值对OpenGL来说才是有意义的 。
有些是更具描述性的名称,如size表示一个数值长度或者深度,GLsizei 是一个OpenGL变量类型,表示整数形式的size参数。
clamp表示这个值的范围将“截取”在0.0~1.0范围内。
GLboolen表示真假。
GLenum表示枚举变量
GLbitfield表示那些包含二进制位段的变量。
OpenGL错误
OpenGL内部保留了一组错误标识,共4个,每个标识代表一种不同类型错误。
可调用glGetError函数,观察哪些标识被设置
GLenum glGetError(void);
如果被设置的标识不止一个,glGetError仍然只返回一个唯一值,当函数被调用时候,这个值随后被清除,然后在再次被调用时返回错误标识或GL_NO_EOORO,通常,我们在一个循环中调用glGetError函数,持续检查错误标识,直到返回GL_NO_ERROR。
OpenGL错误代码
错误代码
描述
GL_INVALID_ENUM
枚举参数超出范围
GL_INVALID_VALUE
数值参数超出范围
GL_INVALID_OPERATION
在当前状态中操作非法
GL_OUT_OF_MEMORY
没有足够内存来执行这条命令
GL_NO_ERROR
没有错误
如果一个错误是由于对OpenGL的非法调用所致,这条命令或函数调用将会被忽略就,但接受指向内存的指针作为参数的函数可能会由于指针无效导致崩溃。
确认版本
查询OpenGL的渲染引擎(OpenGl驱动程序)的生产商和版本号,调用glGetString来返回与它们的版本号和生产商有关信息。
const GLubyte *glGetString(GLenum name) ;
函数返回一个静态字符串,描述GL函数库中所请求信息。
glHint
一种OpenGl实现常包含两种方法执行一个特定任务,一种是快速方法,在性能上稍妥协;另一种是慢速方法,着重改进视觉质量。
glHint函数允许我们指定偏重于视觉质量还是速度,以适应不同类型操作需求。
void glHint( GLenum target, GLenum mode) ;
target参数指定希望进行修改的行为类型,mode参数告诉OpenGL最关心的是质量还是速度,或是并不关心,使用默认行为。
注:所有OpenGL实现都不要求必须在glHint函数调用上保持一致,是OpenGl中唯一一个行为完全依赖生厂商的函数。
OpenGL状态机
影响几何图形绘制的变量的集合称为 管线的状态。
状态机是一个抽象的模型,表示一组状态变量的集合,每个状态变量可以有各种不同的值,或只能打开或关闭。
OpenGL使用了一种状态模型(或称状态机)来追踪所有的OpenGL状态变量,当一个状态呗设置之后,它就一直保持这个状态,直到其它函数对它进行修改为止。
如,深度测试要不打开,要么关闭,打开深度测试的几何绘图将会 被检查 以确保在进行渲染之前 总会在任何位于它后面的对象 前方;深度测试关闭后进行的几何图形绘制,则会在不进行深度比较的情况下进行绘制。
void glEnalbe( GLenum capability ) ;
打开状态变量
void glDisable( GLenum capability ) ;
把状态设置为关闭 如void glEnalbe(GL_DEPTH_TEST);
GLboolean glIsEnalbe( GLenum capability ) ;
测试状态变量是否打开
许多OpenGL可设置变量的值,设置后一直保持,直到再次被修改,可以在任何时候查询状态的值,可以查询布尔型、整形、单精度浮点型、双精度浮点型的变量值
函数原型如下
void glGetBooleanv( GLenum pname, GLboolean *params ) ;
void glGetDoublev( GLenum pname, GLdouble *params) ;
void glGetFloatv( Glenum pname, GLfloat, *params) ;
void glGetIntegerv( GLenum pname, GLint *params) ;
每个函数返回单个值,或是一个数组,把一些值存储到指定的地址中。
OpenGL被定义为 图形硬件的一种软件接口,本质上是一个3D图形和模型库,具有高度可移植性,速度远远快于光线追踪器或软件渲染引擎。
OpenGL扩展机制
OpenGL允许提供商通过它的扩展机制进行创新。
使用OpenGL
OpenGL是一种过程性而不是描述性的图形API, 程序员并不需要描述场景和它的外观,而是事先确定一些操作步骤,实现一定的外观或效果。OpenGL并不包含任何负责窗口管理、用户交互或是文件I/O的函数,每个宿主环境提供一些函数实现这些功能,并负责实现一些方法,向OpenGL移交窗口绘图的控制。
GLUT
GLUT代表OpenGL实用工具箱(OpenGL utility toolkit),不同于GLU(OpenGL utility library,OpenGL实用库)。
Windows中GLUT的开发已中断,由freeglut取代,所有基于GLUT的Windows实例程序都利用了freeglut函数库。
使用GLUT可以不必了解任何特定平台的基本GUI编程,我们不能依赖GLUT来完成应用程序的所有任务,但GLUT是非常优秀的学习和演示工具,隐藏了窗口创建和OpenGL环境初始化等平台特定的细节。
GLEW
GLEW(The OpneGL Extension Wrangler Library) ,GLEW is a simple tool that help C/C++ developers initialize extensions and write portalbe applications.
OpenGL API主要通过扩展机制来发展,这种扩展机制能够用来获得指向任何加入OpenGL 1.0之后任何版本核心的OpenGL函数的函数指针,有一个实现OpenGL 3.3 API完全存取的简单方法,就是使用一个 自动初始化 所有新函数指针 并 包含所需类型定义、常量和枚举值的扩展加载库,不止一种这样的扩展加载库可供选择,其中一种维护最好的开源库是GLEW。
GLEW被预先封装在了GLTools库中,GLTools库就是基于GLEW库的。
GLTools
一些有用并且可重用的函数,所有程序员在编写几乎所有OpenGL时都要用到。
GLTools包含一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL 3.3 中用来产生和渲染一些简单3D对象的函数,以及对视觉平截头体、相机类和变换矩阵进行管理的函数的充分支持。
OpenGL数据类型
为使OpenGL代码更易于从一个平台移植到另一平台,OpenGl定义了数据类型,这些数据类型可以映射到所有平台上的特定最小格式。
使用OpenGL定义的变量类型,可以使代码避免因为类型在变量表示上不一致所带来的影响。
OpenGL变量类型和最小位宽
OpenGL数据类型
最小位宽 描述
GLboolean
1 布尔值,真或假
GLbyte
8 有符号8位整数
GLubyte
8 无符号8位整数
GLuchar
8 字符串
GLshort
16 有符号16位整数
GLushort
16 无符号16位整数
GLhalf
16 半精度浮点值
GLint
32 有符号32位整数
GLuint
32 无符号32位整数
GLsizei
32 无符号32位整数
GLenum
32 无符号32位整数
GLfloat
32 32位浮点数
GLclampf
32 [0,1]范围内的32位浮点数
GLbitfield
32 32位
GLdouble
64 64位双精度数
GLclampd
64 [0,1]范围内的64位浮点数
GLint64
64 有符号64位整数
GLuint64
64 无符号64位整数
GLsizeiptr
本地指针大小 无符号整数
GLintptr
本地指针大小 有符号整数
GLsync
本地指针大小 同步对象句柄
所有数据类型都以GL开头,表示OpenGL,OpenGL规范要求的最小存储空间见表,虽然某些数值超出表中范围是可能的,但只有大小在指定范围内的数值对OpenGL来说才是有意义的 。
有些是更具描述性的名称,如size表示一个数值长度或者深度,GLsizei 是一个OpenGL变量类型,表示整数形式的size参数。
clamp表示这个值的范围将“截取”在0.0~1.0范围内。
GLboolen表示真假。
GLenum表示枚举变量
GLbitfield表示那些包含二进制位段的变量。
OpenGL错误
OpenGL内部保留了一组错误标识,共4个,每个标识代表一种不同类型错误。
可调用glGetError函数,观察哪些标识被设置
GLenum glGetError(void);
如果被设置的标识不止一个,glGetError仍然只返回一个唯一值,当函数被调用时候,这个值随后被清除,然后在再次被调用时返回错误标识或GL_NO_EOORO,通常,我们在一个循环中调用glGetError函数,持续检查错误标识,直到返回GL_NO_ERROR。
OpenGL错误代码
错误代码
描述
GL_INVALID_ENUM
枚举参数超出范围
GL_INVALID_VALUE
数值参数超出范围
GL_INVALID_OPERATION
在当前状态中操作非法
GL_OUT_OF_MEMORY
没有足够内存来执行这条命令
GL_NO_ERROR
没有错误
如果一个错误是由于对OpenGL的非法调用所致,这条命令或函数调用将会被忽略就,但接受指向内存的指针作为参数的函数可能会由于指针无效导致崩溃。
确认版本
查询OpenGL的渲染引擎(OpenGl驱动程序)的生产商和版本号,调用glGetString来返回与它们的版本号和生产商有关信息。
const GLubyte *glGetString(GLenum name) ;
函数返回一个静态字符串,描述GL函数库中所请求信息。
glHint
一种OpenGl实现常包含两种方法执行一个特定任务,一种是快速方法,在性能上稍妥协;另一种是慢速方法,着重改进视觉质量。
glHint函数允许我们指定偏重于视觉质量还是速度,以适应不同类型操作需求。
void glHint( GLenum target, GLenum mode) ;
target参数指定希望进行修改的行为类型,mode参数告诉OpenGL最关心的是质量还是速度,或是并不关心,使用默认行为。
注:所有OpenGL实现都不要求必须在glHint函数调用上保持一致,是OpenGl中唯一一个行为完全依赖生厂商的函数。
OpenGL状态机
影响几何图形绘制的变量的集合称为 管线的状态。
状态机是一个抽象的模型,表示一组状态变量的集合,每个状态变量可以有各种不同的值,或只能打开或关闭。
OpenGL使用了一种状态模型(或称状态机)来追踪所有的OpenGL状态变量,当一个状态呗设置之后,它就一直保持这个状态,直到其它函数对它进行修改为止。
如,深度测试要不打开,要么关闭,打开深度测试的几何绘图将会 被检查 以确保在进行渲染之前 总会在任何位于它后面的对象 前方;深度测试关闭后进行的几何图形绘制,则会在不进行深度比较的情况下进行绘制。
void glEnalbe( GLenum capability ) ;
打开状态变量
void glDisable( GLenum capability ) ;
把状态设置为关闭 如void glEnalbe(GL_DEPTH_TEST);
GLboolean glIsEnalbe( GLenum capability ) ;
测试状态变量是否打开
许多OpenGL可设置变量的值,设置后一直保持,直到再次被修改,可以在任何时候查询状态的值,可以查询布尔型、整形、单精度浮点型、双精度浮点型的变量值
函数原型如下
void glGetBooleanv( GLenum pname, GLboolean *params ) ;
void glGetDoublev( GLenum pname, GLdouble *params) ;
void glGetFloatv( Glenum pname, GLfloat, *params) ;
void glGetIntegerv( GLenum pname, GLint *params) ;
每个函数返回单个值,或是一个数组,把一些值存储到指定的地址中。
相关文章推荐
- OpenGL学习二--基础知识
- OpenGL蓝宝书学习系列(一):3D图像的基础知识
- OpenGL学习(1)-基础知识(2)
- JavaEE进阶知识学习-----SpringBoot基础知识-4-数据库知识
- Java--线程基础知识学习初步记录(1)
- 学习总结:JavaScript基础知识汇总
- Hadoop学习笔记十二 YARN基础知识
- java基础知识学习2
- Java基础——Applet学习的知识
- 【spring】【转】Spring学习笔记1——基础知识
- java基础知识回顾之java Thread类学习(十一)--join方法的理解
- 计算机基础知识学习(网络必备)强烈推荐!!!
- Linux基础知识的学习(一)
- Linux运维学习历程-第一天-基础知识
- 学习笔记:Java的一些基础小知识之JVM与GC
- CSS基础知识学习笔记
- R语言学习之基础知识一
- java基础学习---java对象序列化基础知识
- c语言学习之基础知识点介绍(十二):结构体的介绍
- JS 面试知识学习历程(第二天) -- JS基础知识(上)