### OpenGL ES API 速查知识点解析 #### 一、`glGenTextures` — 生成纹理名 **函数名称**: `glGenTextures` **用途**: 用于生成纹理名称,这些纹理名称可以用来标识和操作OpenGL中的纹理。 **参数**: - **n**: 整数类型,表示需要生成的纹理名的数量。 - **textures**: 数组类型,用于存储由OpenGL生成的纹理名称。 **功能说明**: - 当调用`glGenTextures(n, textures)`时,OpenGL会生成`n`个纹理名称,并将这些名称存储在`textures`数组中。需要注意的是,这些生成的纹理名称并不一定是连续的整数,但OpenGL确保它们是唯一的且未被使用的。 - 生成的纹理没有预设的维度,它们的维度会在首次绑定到某个纹理目标时确定(例如通过`glBindTexture`函数)。这意味着这些纹理可以根据其首次绑定的纹理目标(例如GL_TEXTURE_2D、GL_TEXTURE_CUBE_MAP等)自动获取相应的维度。 - 如果之前已经通过`glGenTextures`生成了一组纹理索引,并且这些纹理不再需要使用,可以通过调用`glDeleteTextures`来释放这些纹理资源。 **错误处理**: - 若`n`为负数,则会触发`GL_INVALID_VALUE`错误。 #### 二、`glViewport` — 设定视口 **函数名称**: `glViewport` **用途**: 设置OpenGL渲染的目标视口区域。 **参数**: - **x, y**: 整数类型,分别指定视口矩形左下角的x轴和y轴坐标,默认值分别为(0, 0)。 - **width, height**: 整数类型,分别指定视口的宽度和高度。当OpenGL上下文首次与窗口关联时,这两个值会默认设置为窗口的实际宽度和高度。 **功能说明**: - `glViewport`函数负责定义OpenGL渲染输出的最终显示区域。它指定了从规范化设备坐标到窗口坐标系统的仿射变换。 - 视口的宽度和高度会被限制在一个特定范围内,这个范围取决于具体的OpenGL实现。可以调用`glGet`函数并传入`GL_MAX_VIEWPORT_DIMS`参数来查询当前环境下的最大视口尺寸范围。 - 在计算窗口坐标时,如果`(Xnd, Ynd)`表示规范化设备坐标,那么窗口坐标`(Xw, Yw)`可以按照以下公式计算得出: \[ Xw = (Xnd + 1) \times (\text{width} / 2) + x \] \[ Yw = (Ynd + 1) \times (\text{height} / 2) + y \] **错误处理**: - 如果`width`或`height`中的任何一个为负值,将会触发`GL_INVALID_VALUE`错误。 #### 三、`glVertexAttribPointer` — 定义顶点属性数组 **函数名称**: `glVertexAttribPointer` **用途**: 指定顶点属性数组的数据格式和位置信息,以便OpenGL能够正确地处理顶点属性数据。 **参数**: - **index**: 整数类型,指定要修改的顶点属性数组的索引值。 - **size**: 整数类型,指定每个顶点属性包含的组件数量。必须为1、2、3或4。 - **type**: 枚举类型,指定数组中每个组件的数据类型。可选值包括`GL_BYTE`、`GL_UNSIGNED_BYTE`、`GL_SHORT`、`GL_UNSIGNED_SHORT`、`GL_FIXED`、`GL_FLOAT`等。 - **normalized**: 布尔类型,指定当访问固定点数据时是否需要将其归一化。 - **stride**: 整数类型,指定连续顶点属性之间的字节偏移量。如果设置为0,则表示属性值紧密排列。 - **pointer**: 指针类型,指向数组中第一个顶点属性的第一个组件。 **功能说明**: - `glVertexAttribPointer`函数允许开发者指定顶点属性数组的数据格式和位置信息,这对于高效地处理复杂的顶点属性(如位置、颜色、纹理坐标等)非常重要。 - `size`参数定义了每个属性值所包含的组件数量,例如位置通常由3个分量(x, y, z)组成,而颜色则通常由4个分量(r, g, b, a)组成。 - `type`参数指定了每个组件的数据类型,例如可以是整数类型的`GL_SHORT`或浮点数类型的`GL_FLOAT`。 - `normalized`参数控制着当固定点数据被访问时的行为。如果设置为`GL_TRUE`,则整数类型的值会被映射到[-1, 1](对于有符号整数)或[0, 1](对于无符号整数)区间内;如果设置为`GL_FALSE`,则值会被直接转换为浮点数。 - `stride`参数定义了连续顶点属性之间的偏移量,这使得顶点属性可以存储在同一个数组中或不同的数组中。 - `pointer`参数指向数组中第一个顶点属性的第一个组件。如果一个非零的缓冲对象被绑定到了`GL_ARRAY_BUFFER`目标上,那么`pointer`将被解释为此缓冲对象中的字节偏移量。 **注意事项**: - 如果使用的是`GL_FLOAT`类型,且`normalized`设置为`GL_FALSE`,则不需要额外的归一化处理,因为浮点数已经处于正确的数值范围。 - `stride`参数的设置对于优化性能至关重要,特别是在处理大量顶点数据时。合理的`stride`值可以减少不必要的内存读取操作,从而提高渲染效率。 - 在使用`glVertexAttribPointer`前,需要确保相应的顶点属性数组已经被正确启用(例如通过`glEnableVertexAttribArray`函数)。
剩余15页未读,继续阅读
- 粉丝: 22
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助