C++ 如何使用顶点数组对象?
我正试图通过《OpenGL超级圣经第七版》一书来学习使用OpenGL 4.5。它解释VAOs的方式如下:C++ 如何使用顶点数组对象?,c++,opengl,C++,Opengl,我正试图通过《OpenGL超级圣经第七版》一书来学习使用OpenGL 4.5。它解释VAOs的方式如下: GLuint compile_shaders(){ GLuint vertex_shader; GLuint fragment_shader; GLuint program; //shader code //create and compile vertex shader vertex_shader=glCreateShader
GLuint compile_shaders(){
GLuint vertex_shader;
GLuint fragment_shader;
GLuint program;
//shader code
//create and compile vertex shader
vertex_shader=glCreateShader(GL_VERTEX_SHADER); //create shader object
glShaderSource(vertex_shader,1,vertex_shader_source,NULL); //puts shader code in object
glCompileShader(vertex_shader); //compiles shader source code
//create and compile fragment shader
fragment_shader=glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader,1,fragment_shader_source,NULL);
glCompileShader(fragment_shader);
//create program, attach shaders, and link it
program=glCreateProgram(); //creates program to attach shader objects
glAttachShader(program,vertex_shader); //attaches shader to program
glAttachShader(program,fragment_shader);
glLinkProgram(program); //links all shader objects in program
//delete shaders because program already has them now
glDeleteShader(vertex_shader); //deletes shader (code is already in program)
glDeleteShader(fragment_shader);
return program;
}
//startup
GLuint program=compile_shaders();
GLuint vertex_array_object;
glCreateVertexArrays(1,&vertex_array_object);
glBindVertexArray(vertex_array_object);
//drawing
glUseProgram(program);
glDrawArrays(GL_TRIANGLES,0,3);
每当我试图编译它时,它都会给我一个编译器错误,说明没有声明glCreateArrays。如果GLCreateVertexArray不是opengl函数,那么如何使用VAOs?像这样-
GLuint VAO;
glGenVertexArrays(1, &VAO); // Generate a vertex array.
glBindVertexArray(VAO); // bind it
GLuint posVerBuffer;
//Position
glBindBuffer(GL_ARRAY_BUFFER, posVerBuffer);
glBufferData(GL_ARRAY_BUFFER, position.size() * sizeof(glm::vec3), &position[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); // Position
// Similar for the color
我不知道确切的细节,但你在绑定后所做的一切都将是
存储在VAO内部
可以为顶点位置和颜色创建一个缓冲区
类似这样的事情-
GLuint VAO;
glGenVertexArrays(1, &VAO); // Generate a vertex array.
glBindVertexArray(VAO); // bind it
GLuint posVerBuffer;
//Position
glBindBuffer(GL_ARRAY_BUFFER, posVerBuffer);
glBufferData(GL_ARRAY_BUFFER, position.size() * sizeof(glm::vec3), &position[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0); // Position
// Similar for the color
完成后,请解开它
glBindVertexArray(0);
现在每次你想画这个特定的VAO,你只要把它绑起来
glBindVertexArray(VAO);
本教程介绍所有内容,并教授现代OpenGL-
每当我试图编译它时,它都会给我一个编译器错误,说明没有声明glCreateArrays
glCreateVertexArrays
是一个OpenGL函数,已经使用了一年多了。如果你的程序不能用它编译,那么你的程序很可能已经过时了。下载一个较新的函数或切换到一个未损坏的函数。他正在尝试使用ARB_direct_state_access函数,这是OpenGL的核心,从4.5开始使用。名为glCreateVertexArrays
的函数不是吗?@BDL:他发布的实际代码使用了正确的函数名。;)