【OpenGL】Shader个人学习笔记(3)Index Buffers

本文介绍了如何使用OpenGL的Index Buffers来避免顶点重复,提高复杂项目的绘制效率。通过为不同的顶点标号,只声明不重复的顶点,然后在渲染循环中使用glDrawElements代替glDrawArrays,以GL_TRIANGLES模式和无符号整数索引绘制。
摘要由CSDN通过智能技术生成

利用Index Buffers来避免vertex重复

可以把不同的点进行标号,我们就可以只声明不重复的的点来绘制三角形,这样可以提高绘制的效率,在复杂项目中体现更为明显

float positions[] = {//逆时针绘制

		-0.5f, -0.5f, //0
		 0.5f, -0.5f, //1
		 0.5f,  0.5f, //2

		  //0.5f, 0.5f,
		 -0.5f, 0.5f, //3
		 //-0.5f,-0.5f
	};//vertex shader 会调用三次

	unsigned int indices[] = {
		0,1,2,
		2,3,0
	};

如果想用index buffers来绘制,需要新的ibo变量

unsigned int ibo; // index buffer object
GLCall(glGenBuffers(1, &ibo));
GLCall(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo));
GLCall(glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned int), indices, GL_STATIC_DRAW)); // indices 里有六个元素,必须是 unsigned 的
//stride 实际上是一个点(比如说一个2维点是两个顶点组成,所以在这里是两个 float 类型长度)

还有需要更改的地方就是在 while (!glfwWindowShouldClose(window))循环里的DrawCall

instead of 【glDrawArray(GL_TRIANGLE, 0, 6)】

应该使用  glDrawElements(GL_TRIANGLES, 6/* 代表indices

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值