顶点数据随笔

顶点数组用于优化内存和效率,通过激活、指定数组数据和解引用进行几何渲染。主要包括激活顶点数据、指定数组大小类型及偏移量、解引用单个元素或数据列表等步骤,实现高效图形绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顶点数组主要用于减少函数调用,和顶点的重复处理,从而达到优化内存和效率的目的。


顶点数组进行几何渲染需要三个步骤:

1、激活顶点数据,主要包括8:顶点坐标、表面法向量、RGBA颜色、辅助颜色、颜色索引、雾坐标、纹理坐标、多边形的边界标志。

启用函数:void glEnableCientState(glenum array)

禁用函数:void glDisableCientState(glenum array)

传入参数:

GL_VERTEX_ARRAY:顶点坐标

GL_NORMAL_ARRAY:表面法向量

GL_COLOR_ARRAY:RGBA颜色

GL_SECONDARY_COLOR_ARRAY:辅助颜色

GL_INDEX_ARRAY:颜色索引

GL_FOG_COORD_ARRAY:雾坐标

GL_TEXTURE_COORD_ARRAY:纹理坐标

GL_EDGE_FLAG_ARRAY:多边形的边界标志

2、指定数组数据:

void glVertexPointer(GLint size, GLenum type, GLsizei strike, const GLvoid *pointer);
void glColorPointer(GLint size, GLenum type, GLsizei strike, const GLvoid *pointer);
void glSecondaryColorPointer(GLint size, GLenum type, GLsizei strike, const GLvoid *pointer);
void glIndexPointer(GLenum type, GLsizei strike, const GLvoid *pointer);
void glNormalPointer(GLenum type, GLsizei strike, const GLvoid *pointer);
void glFogCoordPointer(GLenum type, GLsizei strike, const GLvoid *pointer);
void glTexCoordPointer(GLint size, GLenum type, GLsizei strike, const GLvoid *pointer);
void glEdgeFlagPointer(GLsizei strike, const GLvoid *pointer);
参数说明:

size :表示每个坐标中的元素数量。

type :pointer中的坐标数据类型。

stike :pointer表示顶点间的偏移量,若为0则紧密相连。

pointer :连续存放顶点单项数据的数组,从第一个坐标的第一项数据开始。

说明:主要从 pointer 中遵循一定的规则,从哪儿(pointer )开始,单个顶点的数据个数(size),顶点间的跨距(strike),获取指定类型的顶点列表。

3、解引用和渲染:

说明:解引用的函数中默认设置当前顶点的属性和状态。取出的顶点将是对应了所有状态和属性的顶点。

1). 解引用单个数组元素

void glArrayElement(GLint ith)

参数说明:

ith : 获取指定的数组数据中的第 ith 个数据

获取当前启用数组中的第 ith 个数据。获取的数据类型与 指定数组数据 中的类型相同。通常在 glBegin() 与 glEnd() 间调用。

2). 解引用数据列表

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)

参数说明:

mode : 只接受与 glBegin()相同的参数,指定绘制类型。

count : 指定indices中使用顶点的数量。

type : 指定 indices 的数据类型。

indices : 使用的索引数组,保存执行 指定数组数组 中的顶点索引。

通过指定索引和绘制类型,相当于在一个 glBegin() 与 glEnd()中使用顶点。

3). 解引用数据列表的列表

void glMultiDrawElements(GLenum mode, GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)

参数说明:

mode : 只接受与 glBegin()相同的参数,指定绘制类型。

count : indices 中存放的对应的索引列表长度。

type : 指定 indices 的数据类型。

indices  : 用于存放索引列表的列表。索引列表数组

primcount : count 的长度
相当于一个 glDrawElements() 的集合,indices  中的所有列表。

4). 解引用范围数据列表

void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid *indices)

参数说明:

mode : 只接受与 glBegin()相同的参数,指定绘制类型。

start : indices中从该位置开始

end : indices中从该位置结束

count : 指定indices中使用顶点的数量。

type : 指定 indices 的数据类型。

indices : 使用的索引数组,保存执行 指定数组数组 中的顶点索引。

只是指定了索引数组中的起始和结束,需要保证范围的有效性。

5). 解引用数组序列

void glDrawArray(GLenum model, GLint first, GLsizei count)

参数说明:

mode : 只接受与 glBegin()相同的参数,指定绘制类型。

first : 从启用的数组中的第 first 个开始。

count : 使用的数据元素个数,即 first + count -1 为元素的结束索引。

直接从顶点数组数据中通过索引范围指定数据。

6). 解引用数组序列的序列

void glMultiDrawArray(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)

参数说明:

mode : 只接受与 glBegin()相同的参数,指定绘制类型。

first : 数组元素序列的起始索引位置序列。

count : 数组元素序列的数量序列。

primcount: 数组元素序列的数量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值