OpenGL | Learn From Basic Examples - IndexBuffer-Uniforms

Example 1 - Index Buffer

  • Reuse existing vertices.

重用缓冲区的顶点

1.1 Source Code

	// 顶点信息
	float positions[] = {
		0.0f, 1.0f,		// 0
		0.5f, 0.0f,		// 1
       -0.5f, 0.0f,		// 2
	    0.0f,-1.0f		// 3
	};

	// 索引数组
	unsigned int indices[] = {
		0, 1, 2,	// 第一个三角形顶点索引
		2, 3, 1		// 第二个三角形顶点索引
	};

	/*	顶点缓存		*/
	// 缓存id
	GLenum bufferId;
	// 申请缓存
	glGenBuffers(1, &bufferId);
	// 选择当前缓存
	glBindBuffer(GL_ARRAY_BUFFER, bufferId);
	// 缓存中的数据赋值
	glBufferData(GL_ARRAY_BUFFER, sizeof(positions), &positions, GL_STATIC_DRAW);

	// 启用(状态机的)顶点属性
	glEnableVertexAttribArray(0);
	// 设置顶点的布局,第一个参数为属性索引,对应glEnableVertexAttribArray(0)
	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
	
	// 启用(状态机的)顶点属性
	glEnableVertexAttribArray(0);
	// 设置顶点的布局,第一个参数为属性索引,对应glEnableVertexAttribArray(0)
	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
	
	/*	索引缓存		*/
	GLenum indexBufferObject;
	glGenBuffers(1, &indexBufferObject);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferObject);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), &indices, GL_STATIC_DRAW);

1.2 Notes

  • 使用indexBuffer前需先将顶点存入缓存中。
  • glDrawArrays(GL_TRIANGLES, 0, 3);改成glDrawElements(GL_TRIANGLES, sizeof(indices), GL_UNSIGNED_INT, nullptr);

Example 2 - Uniform

1.1 Source Code

	/*	定义Uniform	*/
	int uniformLocation = glGetUniformLocation(shaderProgram, "u_color");
	assert(uniformLocation != -1);
	glUniform4f(uniformLocation, 0.5f, 0.5f, 0.5f, 1.0f);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值