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

OpenGL基础知识

2013-11-13 16:44 211 查看

OpenGL 数据类型

首先我们要讨论的是OpenGL的数据类型。因为OpenGL是一个跨平台的API,数据类型的大小会随使用的编程语言以及处理器(64位,32位,16位)等的不同而不同,所以OpenGL定义了自己的数据类型。当传递数据到OpenGL时,你应该坚持使用这些OpenGL的数据类型,从而保证传递数据的尺寸和精度正确。不这样做的后果是可能会导致无法预料的结果或由于运行时的数据转换造成效率低下。不论平台或语言实现的OpenGL都采用这种方式定义数据类型以保证在各平台上数据的尺寸一致,并使平台间OpenGL代码移植更为容易。下面是OpenGL的各种数据类型:GLenum: 用于GL枚举的无符号整型。通常用于通知OpenGL由指针传递的存储于数组中数据的类型(例如,GL_FLOAT用于指示数组由GLfloat组成)。GLboolean: 用于单布尔值。OpenGL ES还定义了其自己的“真”和“假”值(GL_TRUE和GL_FALSE)以避免平台和语言的差别。当向OpenGL传递布尔值时,请使用这些值而不是使用YES或NO(尽管由于它们的定义实际没有区别,即使你不小心使用了YES或NO。但是,使用GL-定义值是一个好的习惯。)GLbitfield: 用于将多个布尔值(最多32个)打包到单个使用位操作变量的四字节整型。我们将在第一次使用位域变量时详细介绍,请参阅 wikipediaGLbyte: 有符号单字节整型,包含数值从-128 到 127GLshort: 有符号双字节整型,包含数值从−32,768 到 32,767GLint: 有符号四字节整型,包含数值从−2,147,483,648 到 2,147,483,647GLsizei: 有符号四字节整型,用于代表数据的尺寸(字节),类似于C中的size_tGLubyte: 无符号单字节整型,包含数值从0 到 255。GLushort: 无符号双字节整型,包含数值从0 到 65,535GLuint: 无符号四字节整型,包含数值从0 到 4,294,967,295GLfloat: 四字节精度IEEE754-1985 浮点数GLclampf: 这也是四字节精度浮点数,但OpenGL使用GLclampf特别表示数值为0.0 到 1.0GLvoid:void值用于指示一个函数没有返回值,或没有参数GLfixed: 定点数 使用整型数存储实数。由于大部分计算机处理器在处理整型数比处理浮点数快很多,这通常是对3D系统的优化方式。但因为iPhone具有用于浮点运算的矢量处理器,我们将不讨论定点运算或GLfixed数据类型。GLclampx: 另一种定点型,用于使用定点运算来表示0.0 到 1.0之间的实数。正如GLfixed,我们不会讨论或使用它。控制器的 drawView: 方法根据常数kRenderingFrequency的值定期地被调用。kRenderingFrequency的初始值为15.0,表示  drawView: 方法每秒钟被调用15次。如果你希望改变渲染的频率,你可以在ConstantsAndMacros.h中找到此常数的定义
glLoadIdentity()
暂且将其视为OpenGL的“复位开关”。它将清除虚拟世界中的一切旋转,移动或其他变化并将观察者置于原点。
glClearColor(0.7, 0.7, 0.7, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 我们告诉OpenGL所有的绘制工作是在一个灰色背景上进行的。
GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT 这两个值进行逻辑或是通知OpenGL清除两个不同的缓存 – 颜色缓存(color buffer) 和 深度缓存(depth buffer)。 颜色缓存保存当前帧各像素的颜色。基本上就是你在屏幕上看到的。深度缓存(有时也称为“z-buffer”)保存每个潜在像素离观察者距离的信息。使用此信息可以确定一个像素是否需要被绘制出来。这两个缓存是OpenGL中最常见的缓存。还有其他一些缓存,如模板缓存(stencil buffer)和累积缓存(accumulation buffer),但现在我们暂时不讨论这些。我们现在只需记住在绘制一帧之前,必须清除这两个缓存以保证不会和以前的内容混杂。
glEnableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
此特性可能只需要setupView:方法中启动一次,但作为基本准则,我喜欢启动和禁止我使用的功能。你永远也不会知道是否另一段代码会做不同处理。如果你打开你需要的功能然后关闭它,产生问题的几率将大为减小。就例子来说,如果另一个类不使用顶点数组而使用顶点缓存的话,任何一段代码遗留了启动了的特性或没有显性启动其需要的特性,这一段或两段代码都会导致不可预知的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl