如何使用“顶点阵列”对象
How to use Vertex Array objects?
我正在尝试使用"OpenGL Superbible第7版"一书学习使用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?
每当我试图编译它时,它都会给我一个编译器错误,说glCreateArrays没有声明。
glCreateVertexArrays
是一个OpenGL函数,已经使用了一年多了。如果你的程序不能用它编译,那么OpenGL加载库很可能已经过时了。下载一个更新的,或者切换到一个未损坏的。
像这样-
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/
相关文章:
- 顶点阵列与类问题
- 我的OpenGL顶点阵列将其抽象成课程不再起作用
- 为什么我的顶点缓冲区对象出现访问冲突错误?
- 带顶点阵列的OpenGL照明
- 顶点阵列GLFW崩溃C 程序
- 使用顶点阵列、四边形阵列来创建四边形网格
- 为什么我的 openGL 顶点缓冲区对象不会绘制任何内容?
- 用于VBO-OpenGL的顶点阵列
- 使用客户端顶点阵列在没有VBO的情况下在opengl 3.1+中进行渲染
- 为什么在调用 glDrawArray 之前不需要绑定顶点缓冲区对象?
- 动态打包 OpenGL 顶点缓冲区对象的数据
- Opengl 通过使用顶点缓冲区对象
- 顶点缓冲区对象(删除进程)opengl
- 使用openGL顶点阵列的白屏
- 如何使用“顶点阵列”对象
- OpenGL顶点缓冲区对象未显示
- 旋转顶点阵列对象不起作用
- OpenGL顶点阵列,根据用户输入绘制
- 为什么此顶点缓冲区对象无法更新
- OpenGL更新顶点阵列/缓冲区