OpenGLES---缓冲区

{
	1:顶点缓冲区 GL_ARRAY_BUFFER
	2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER
	3:帧缓冲区 GL_FRAMEBUFFER/GL_RENDERBUFFER
	4:封装
}
 

{1:顶点缓冲区 GL_ARRAY_BUFFER
	
	OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生

	struct VX{
		float x, y, z;
		float u,v;
		float r, g, b,a;
	};

	float zOff=-2.1f;
	VX vertexs[] ={
		{ -1.0f,-1.0f, zOff,	0.0f,0.0f,	1.0f,1.0f, 1.0f,1.0f },
		{  1.0f,-1.0f, zOff,	1.0f,0.0f,	1.0f,1.0f, 1.0f,1.0f },
		{  1.0f, 1.0f, zOff,	1.0f,1.0f,	1.0f,1.0f, 1.0f,1.0f },

		{ -1.0f,-1.0f, zOff,	0.0f,0.0f,	1.0f,1.0f, 1.0f,1.0f },
		{  1.0f, 1.0f, zOff,	1.0f,1.0f,	1.0f,1.0f, 1.0f,1.0f },
		{ -1.0f, 1.0f, zOff,	0.0f,1.0f,	1.0f,1.0f, 1.0f,1.0f },
	};

	unsigned vbId; //数据id

	{创建数据
		glGenBuffers(1,&vbId);
		glBindBuffer(GL_ARRAY_BUFFER,vbId); //绑定/取消缓冲区
		glBufferData(GL_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据
		glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区
	}

	{使用数据
		glBindBuffer(GL_ARRAY_BUFFER,vbId);//绑定/取消缓冲区
		glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(VX),(void*)0);
		glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(VX),(void*)(3*sizeof(float)));
		glVertexAttribPointer(shader._color,   4,  GL_FLOAT,   false,  sizeof(VX),(void*)(3*sizeof(float)+2*sizeof(float)));
		glDrawArrays(GL_TRIANGLES,0,6);//三角形 (三个点画一个三角形)
		glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机
	}

	切记:缓冲数据在什么地方用在什么地方制空,不指空的话,下面的数据全是这个缓冲数据

	注意:
		glBufferData(,size,,) size->sizeof(vertexs)是数据大小不是偏移量大小
		glVertexAttribPointer (,,,,stride,);stride->sizeof(VX)是偏移量大小不是数据大小

}

{2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER
	OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生

	unsigned ibId; //数据id
	{创建数据
		glGenBuffers(1,&ibId);
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId); //绑定/取消缓冲区
		glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); //绑定/取消缓冲区
	}

	{使用数据
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId);//绑定/取消缓冲区
		glDrawElements(绘制模式,绘制数据大小,数据类型,);
		glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机
	}

	{code
		struct Vertex {
			float x, y, z;
			float u,v;
			float r, g, b,a;
		};
		Vertex positionData[] = {
			-1.0f, 1.0f,-1.0f,		0.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上左后
			-1.0f, 1.0f, 1.0f,		0.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上左前
			1.0f, 1.0f,-1.0f,		1.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上右后
			1.0f, 1.0f, 1.0f,		1.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上右前
			-1.0f,-1.0f,-1.0f,		0.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下左后
			-1.0f,-1.0f, 1.0f,		0.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下左前
			1.0f,-1.0f,-1.0f,		1.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下右后
			1.0f,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
opengles是一种用于在移动设备和嵌入式系统上实现2D和3D图形渲染的图形库。而gl-transitions是一个开源的OpenGL库,用于创建平滑过渡效果,可以应用于图像、视频等多种媒体内容。 要将gl-transitions移植到opengles上,需要进行以下步骤: 1. 确定opengles版本:gl-transitions可能使用的是OpenGL的较新版本,而opengles可能只支持较旧的版本。因此,首先需要确定opengles版本,并了解其与OpenGL之间的差异。 2. 了解gl-transitions的实现:深入了解gl-transitions的实现方式和代码结构,理解其对OpenGL的使用方式和功能。 3. 理解opengles的API:熟悉opengles的API,包括顶点/片段着色器、缓冲区对象、纹理对象等。理解opengles的渲染管线和数据传递方式,以便能够正确地将gl-transitions移植到opengles上。 4. 逐步移植:根据gl-transitions的实现和opengles的API,逐步将gl-transitions的代码移植为opengles可用的代码。这可能涉及到对着色器代码的修改、纹理对象的创建和绑定、缓冲区对象的使用等。 5. 调试和测试:移植完成后,进行调试和测试以确保移植后的代码在opengles上正常工作,并且能够正确地渲染出所需的过渡效果。 需要注意的是,由于较新版本的OpenGL可能具有一些opengles不支持的功能,因此在移植过程中可能需要做一些功能的调整或替代。此外,移植过程中可能还需要考虑设备的性能和兼容性问题,确保移植后的代码能够在目标设备上流畅地运行。 总结起来,将gl-transitions移植到opengles上需要对opengles的API有很好的了解,并根据它的渲染方式和数据传递方式对gl-transitions的代码进行适当的修改和调整。这样才能确保移植后的代码能够在opengles上正常运行并呈现出所需的过渡效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值