前言:
如果你决定学习opengl了,就大概了解了opengl是什么,以及大致知道有一堆着色器,我的学习是依据中文文档来学习的,配置GLFW+GLAD部分我就跳过了,我想网上有一堆配置教程,如果你配置成功了,那我们就开始吧
GLFW+GLAD
学习之前大概梳理一下:首先opengl很多东西都是由显卡提供的,那么GLFW就是自己实现窗口的部分(支持上下文窗口),但是刚刚有说opengl大多都是显卡提供的,GLFW更像是应用层面的虚假实现,需要指针调用到显卡提供的函数才可以真正实现,所以GLAD就是用来链接它们的
窗口
按照文档顺序,第一天学习窗口的创建,代码链接如下:Code Viewer. Source code: src/1.getting_started/1.2.hello_window_clear/hello_window_clear.cpp
从main函数开始理解它
int main() {
glfwInit(); //初始化GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); //Mas OS X系统可用
1>我们需要使用glfw库,所以先对它进行初始化,用了glfwInit()函数
2>glfwWindowHinit(target,Hint);这个函数主要两个参数,一个是目标,一个是指示的值(值可以是数字或者宏),version的两行表示版本,表示是3.3版本,最后那个profile是opengl的配置,为核心模式,当然有很多模式可以配置,你也可以尝试,最后注释的是苹果系统需要添加的
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if(window == NULL){
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
3>用GLFW创建一个窗口,宽高和窗口名称,后两个设置为NULL即可
4>判断窗口是否创建成功,失败则关闭glfw终端,成功则将当前窗口设置成主线程
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
5>刚刚有说glfw创建好的窗口任然只是空实现,需要GLAD接到显卡,这段代码几乎是固定的,只要需要实现则一定会使用,加载opengl所以函数指针
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.6f, 0.2f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
6>不能让窗口绘制好了就立刻关闭,如果没有这段代码,你的窗口将会闪一下就消失,一般来说保证刷屏率在1/24就会相对流畅,processInput()是我们自己定义的代码后面再讲,clear的两行一行是设置color的颜色,另一个则是使用该设置
7>交换buffers,显示内部是有两个缓存区相互交替工作的,前缓存区显示,后缓存区被我们所绘制,一旦绘制好了,后缓冲区将成为前缓存区被显示,而刚刚的显示缓存有将变成后缓存区被我们所绘制
8>检查是不是有某些事件(如按下×)
glfwTerminate();
return 0;
}
9>关闭glfw终端,main函数结束
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
10>自己写的函数,判断是否有esc按下,如果有的话window会返回true,那么循环窗口的while就不成立,窗口就会被关闭
最后实现的效果如下:

这样就创造出来画布和画笔,至于剩下的明天再继续吧
5867





