#include <stdio.h>
#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>
GLuint eboID;
GLuint vboID;
GLuint vaoID;
GLfloat vertices[] = {
0.5f, 0.5f, -1.0f, // 右上角
0.5f, -0.5f, -1.0f, // 右下角
-0.5f, -0.5f, -1.0f, // 左下角
-0.5f, 0.5f, -1.0f // 左上角
};
GLuint indices[] = {
// 起始于0!
0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
void ChangeSize(int w, int h)
{
if (h == 0)
h = 1;
glViewport(0, 0, w, h);
}
void SetupRC()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glGenBuffers(1, &eboID);
glGenBuffers(1, &vboID);
glGenBuffers(1, &vaoID);
//首先绑定vaoID,之后所有设置都存储在vaoID中
glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
//注意:这里是可以的,因为glVertexAttribPointer将注册eboID作为它的VBO,因此这里可以安全的解绑
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBindVertexArray(vaoID);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("OpenGL");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
glDeleteVertexArrays(1, &vaoID);
glDeleteBuffers(1, &vboID);
glDeleteBuffers(1, &eboID);
return 0;
}
VBO-EBO-VAO-01
最新推荐文章于 2023-06-08 17:42:44 发布