笔者初入写文章,写的不怎么好,不懂的欢迎评论留言,笔者会认真解释
看着步骤太多,其实很简单,每个步骤就两三行代码左右。
一般看文档看一步做一步记不住什么意思,所以建议读者先一步一步看看这些步骤,不要觉得字多眼花缭乱而走神
其实每一步就像你和那个开车一样,从??到??需要注意的步骤
- 配置环境(很简单,一会放链接)
- 导入头文件
- 初始化(gl版本等)
- 创建窗口(设置窗口改变视口大小等)
- 创建链接到上下文然后
glewInit();
- 创建VAO、VBO
->
绑定VAO、VBO->
顶点绑定VBO - 写顶点着色器与片段着色器源码
- 创建顶点着色器与片段着色器对象
- 对象绑定顶点着色器与片段着色器源码
- 编译顶点着色器与片段着色器对象
- 创建着色器程序对象
- 顶点着色器与片段着色器绑定到着色器程序对象
- 链接着色器程序
- 释放不需要的顶点着色器与片段着色器对象
- 配置顶点解析方式
- 启用三角形的顶点属性
- 渲染:绑定VAO、使用着色器、绘制顶点、交换缓冲区
效果图
这里写目录标题
配置环境与导入头文件
/*导入头文件*/
#include <GL/glew.h>
#include <GLFW/glfw3.h>
初始化与创建窗口
首先调用
glfwInit();
这个函数是必须的
接下来是配置GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint的第一个参数代表选项的名称,第二个参数接受一个整型,用来设置这个选项的值。
前面两次调用是在设置GLFW的版本,就是3.3,如果你用的GLFW不是这个版本你也可以按照你的版本进行修改
创建窗口对象
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
我们要对window
进行判断是否为NULL,为真就是创建失败了,还是空指针
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
设置视口
在设置视口时,不希望窗口大小改变后图像的大小依然是原来的大小,所以glfw提供了一个glfwSetFramebufferSizeCallback
函数,当每次窗口大小发生改变时,就会回调参数里的函数,当然传递参数需要我们新定义
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
然后传参
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
链接到状态机与VAO、VBO
将创建好的窗口链接到状态机上,这样渲染出来的图像是在这个窗口显示的
glfwMakeContextCurrent(window);
接下来开始写关于glew的代码了,首先初始化glew
glewInit();
然后我们创建VAO与VBO对象
unsigned int VAO,VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
我们传入1表示我们只创建1个对象
接下来我们将VBO绑定到GL_ARRAY_BUFFER目标上
glBindBuffer(GL_ARRAY_BUFFER, VBO);
输入顶点
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
将顶点数据复制到缓冲的内存中(GL_ARRAT_BUFFER)
glBufferData(GL_ARRAY_BUFFER