你好三角形

  • 顶点数组对象:Vertex Array Object,VAO
  • 顶点缓冲对象:Vertex Buffer Object,VBO
  • 元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO

在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。

顶点缓冲对象是我们在[OpenGL](https://learnopengl-cn.github.io/01 Getting started/01 OpenGL/)教程中第一个出现的OpenGL对象。就像OpenGL中的其它对象一样,这个缓冲有一个独一无二的ID,所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象:

unsigned int VBO;
glGenBuffers(1, &VBO);

有了这些信息我们就可以使用glVertexAttribPointer函数告诉OpenGL该如何解析顶点数据(应用到逐个顶点属性上)了:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

glVertexAttribPointer函数的参数非常多,所以我会逐一介绍它们:

  • 第一个参数指定我们要配置的顶点属性。还记得我们在顶点着色器中使用layout(location = 0)定义了position顶点属性的位置值(Location)吗?它可以把顶点属性的位置值设置为0。因为我们希望把数据传递到这一个顶点属性中,所以这里我们传入0

总结:
1,配置环境,注意系统位数与库的位数相同,lnk-input要添加库的名称,预处理定义设置要添加GLEW_STATIC,代码生成设置要设置运行库,头文件glew在glfw的前面。

2,设置windowHint以来适配顶点数组
3,注意glfwMakeContextCurrent要在glewInit的前面

4,顶点着色器索引着色器的初始化数组,设置绑定顶点数组vao。
5,设置顶点着色器,分配buffer缓冲区,设置bufferdata
6,设置索引着色器,注意GLint有所不同

7, 设置顶点的属性与布局

8,写shader
9,写读shader的函数
10,使用shader
11,设置全局变量
12,绑定顶点数组

13,重新使用shader,设置全局变量,绑定顶点数组,绑定索引缓冲区
14,drawcall

opengl与imgui:

对于调试,如果我们想要图形,我们想要帧率,如果我们想要某种我们可以点击触发某些东西的按钮,imgui是不错的选择