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

利用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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值