我正在尝试使用“OpenGL Superbible 7th edition”一书来学习使用OpenGL 4.5。它解释VAO的方式是:
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。如果glCreateVertexArrays不是opengl函数,那么你如何使用VAO?
答案 0 :(得分:2)
每当我尝试编译它时,它会给我一个编译错误,说明没有声明glCreateArrays。
glCreateVertexArrays
是一个OpenGL功能,现在已经有一年多了。如果您的程序无法使用它进行编译,那么OpenGL loading library已过期的可能性很大。下载更新的或更换为未损坏的。
答案 1 :(得分:-2)
喜欢这个 -
GLuint VAO;
glGenVertexArrays(1, &VAO); // Generate a vertex array.
glBindVertexArray(VAO); // bind it
我不知道确切的细节,但是你绑定之后所做的一切都将是 存储在VAO内部。
您可以为顶点位置创建一个缓冲区,为颜色创建一个缓冲区。
这样的事情 -
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 - http://learnopengl.com/