Android OpenGLES 开发错误总结

函数

final float[] verticesData = {
	// position         // color
	 0.5f,  0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
	-0.5f,  0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
	-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
	 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f
};

final int[] indicesData = {
	0, 1, 2,
	2, 3, 0
};

1、glVertexAttribPointer

glVertexAttribPointer 函数告诉OpenGL该如何解析顶点数据

GLES20.glVertexAttribPointer(
	a_Color_Location, 
	3, 
	GLES20.GL_FLOAT, 
	false, 
	6 * 4, 
	3 * 4
);

函数的参数非常多,只关心后面两个:

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

在这里插入图片描述

  • stride
    步长(Stride),它告诉我们在连续的顶点属性组之间的间隔。

对于仅连续联系排列的位置数据构成的数组,由于下个位置数据在3个float之后,我们把步长设置为 3 * sizeof(float) 。要注意的是由于我们知道这个数组是紧密排列的(在两个顶点属性之间没有空隙)我们也可以设置为0来让OpenGL决定具体步长是多少(只有当数值是紧密排列时才可用)。一旦我们有更多的顶点属性,我们就必须更小心地定义每个顶点属性之间的间隔。

  • pointer
    这个参数的类型是 void* ,所以需要我们进行这个奇怪的强制类型转换。它表示位置数据在缓冲中起始位置的偏移量(Offset)。由于颜色数据不在数组的开头,所以这里是3 * 4 。

2、glDrawElements

GLES20.glDrawElements(
	GLES20.GL_TRIANGLES, 
	6, 
	GLES20.GL_UNSIGNED_INT, 
	0
);
void glDrawElements(
	GLenum mode,  
	GLsizei count,  
	GLenum type,  
	const GLvoid *indices
);
  • type
    索引的类型必须是 GL_UNSIGNED_BYTEGL_UNSIGNED_SHORTGL_UNSIGNED_INT 之一。

  • indices
    指向存储索引的位置的指针。可以指定EBO中的偏移量(或者传递一个索引数组,但是这是当你不在使用索引缓冲对象的时候),但是我们会在这里填写0。


待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值