OpenGL VAO的作用

glBindBuffer(GL_ARRAY_BUFFER, VBO);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
	glEnableVertexAttribArray(0);
	// texture coord attribute
	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
	glEnableVertexAttribArray(1);

一般我们绑定数据是通过以上代码
这里并没有使用VAO,当我在两个类中有不同的坐标数据时,我分别在两个类中调用了以上代码,这时我发现,按照执行的顺序,第一个类的数据被覆盖掉了,也就是第一个类中我想展现的图案并没有出来。

通过VAO就可以解决这个问题,在每个类中各生成一个VAO,每个VAO有各自的数据空间,这样就不会导致数据丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGLVAO(Vertex Array Object)是一种管理顶点数据的对象。它允许我们在渲染过程中定义和绑定顶点属性,从而简化了顶点数据的设置和使用。 使用VAO,我们可以将多个顶点属性(如位置、颜色、法线等)绑定到一个VAO对象中。当我们需要渲染一个物体时,只需绑定对应的VAO,然后使用它所包含的顶点属性进行渲染,这样可以节省大量的重复代码。 在OpenGL中,使用以下步骤来创建和使用VAO: 1. 生成VAO对象:使用glGenVertexArrays函数生成一个VAO对象的ID,例如: ```cpp GLuint vao; glGenVertexArrays(1, &vao); ``` 2. 绑定VAO对象:使用glBindVertexArray函数将VAO对象绑定到当前上下文中,例如: ```cpp glBindVertexArray(vao); ``` 3. 设置顶点属性:使用glVertexAttribPointer函数定义顶点属性的格式和位置,例如: ```cpp // 设置顶点位置属性 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)0); glEnableVertexAttribArray(0); // 设置顶点颜色属性 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color)); glEnableVertexAttribArray(1); // 设置其他顶点属性... ``` 4. 解绑VAO对象:使用glBindVertexArray函数将VAO对象解绑,例如: ```cpp glBindVertexArray(0); ``` 之后,要渲染使用了VAO的物体,只需简单地绑定对应的VAO对象,然后调用渲染函数即可。 需要注意的是,VAO只保存了对应的顶点属性设置信息,并不保存实际的顶点数据。实际的顶点数据可以保存在一个缓冲区对象(如VBO)中,并通过其他方式与VAO关联。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值