关于glVertexAttribPointer第6个参数(void*)pointer-偏移量的理解

关于attribute pointer的理解请看上一篇文章

gl3官方文档的解释:

void glVertexAttribPointer(	GLuint 	index,
                        	GLint 	size,
	                        GLenum 	type,
	                        GLboolean 	normalized,
	                        GLsizei 	stride,
	                        const GLvoid * 	pointer);

Parameters

index

Specifies the index of the generic vertex attribute to be modified.

size

Specifies the number of components per generic vertex attribute. Must be 1, 2, 3, 4. Additionally, the symbolic constant GL_BGRA is accepted by glVertexAttribPointer. The initial value is 4.

type

Specifies the data type of each component in the array. The symbolic constants GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, and GL_UNSIGNED_INT are accepted by both functions. Additionally GL_HALF_FLOAT, GL_FLOAT, GL_DOUBLE, GL_INT_2_10_10_10_REV, and GL_UNSIGNED_INT_2_10_10_10_REV are accepted by glVertexAttribPointer. The initial value is GL_FLOAT.

normalized

For glVertexAttribPointer, specifies whether fixed-point data values should be normalized (GL_TRUE) or converted directly as fixed-point values (GL_FALSE) when they are accessed.

stride

Specifies the byte offset between consecutive generic vertex attributes. If stride is 0, the generic vertex attributes are understood to be tightly packed in the array. The initial value is 0.

pointer

Specifies a offset of the first component of the first generic vertex attribute in the array in the data store of the buffer currently bound to the GL_ARRAY_BUFFER target. The initial value is 0.

偏移量(const void*)pointer代表的是从atrribute pointer的哪里开始读取数据。

比如一组atrribute pointer内部有6个GL_FLOAT,分别是3个位置坐标和3个颜色通道,那我们在布置VAO时怎么告诉OpenGL我的颜色GL_FLOAT在哪呢?

以上图VAO2为例,我们会想:一共有15组attribute pointer,一组attribute pointer是6*GL_FLOAT(步长stride,单位是字节)大小,颜色前面有3个位置GL_FLOAT(偏移量pointer,单位是字节),颜色自己有3个GL_FLOAT(向量大小size,以类型为单位,比如GL_FLOAT)。那么VAO配置函数应该写为

glVertexAttribPointer(	
    0,
	3,
	GL_FLOAT,
	GL_FALSE,
	6*sizeof(GL_FLOAT),
	(const void*)3*sizeof(GL_FLOAT);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值