先安装vs,cmake,glfw。
将文件加入工程后,引入头文件。
#include<glad/glad.h>
#include<GLFW/glfw3.h>
首先先创建一个窗口,这个是必须要有的。
int main()
{
glfwInit();//调用glfwInit函数初始化GLFW。
glfwwindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwwindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwwindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint函数配置GLFW,第一个参数代表选项的名称,有很多GLFW_开头的
//枚举值,第二个参数接受一个整形,用来设置这个选项的值。
return 0;
}//初始化
该函数的所有的选项以及对应的值都可以在 GLFW’s window handling 这篇文档中找到。
GLFWwindow* window =glfwCreateWindow(800,600,"LearnOpenGL",NULL,NULL);
if(window==NULL)
{
std::cout<<"Failed to create GLFWwindow"<<std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
创建完一个GLFW对象后就可以用GLAD来管理OpenGL的函数指针,在此之前我们要初始化。
if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)
{
std::cout<<"Failed to initialize GLAD"<<std::endl;
return -1;
}
现在设置视口大小,也就是渲染窗口尺寸和大小。
glViewport(0,0,800,600);
//前两个参数控制窗口左下角的位置
//第三个和第四个控制渲染窗口的宽度和高度
这个视口大小要随着窗口大小的改变而改变,我们要爱护测一个回调函数,它会在每次窗口大小被调整的时候被调用。
void framebuffer_size_callback(GLFWwindow* window,int width,int height)
{
glViewport(0,0,width,height);
}
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
我们可不希望只绘制一个图像之后我们的应用程序就立即退出并关闭窗口。我们希望程序在我们主动关闭它之前不断绘制图像并能够接受用户输入。因此,我们需要在程序中添加一个while循环,我们可以把它称之为渲染循环(Render Loop),它能在我们让GLFW退出前一直保持运行。
while(!glfwWindowshouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
- glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出,如果是的话该函数返回
true
然后渲染循环便结束了,之后为我们就可以关闭应用程序了。 - glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
- glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中
-
双缓冲(Double Buffer)
应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 这是因为生成的图像不是一下子被绘制出来的,而是按照从左到右,由上而下逐像素地绘制而成的。最终图像不是在瞬间显示给用户,而是通过一步一步生成的,这会导致渲染的结果很不真实。为了规避这些问题,我们应用双缓冲渲染窗口应用程序。前缓冲保存着最终输出的图像,它会在屏幕上显示;而所有的的渲染指令都会在后缓冲上绘制。当所有的渲染指令执行完毕后,我们交换(Swap)前缓冲和后缓冲,这样图像就立即呈显出来,之前提到的不真实感就消除了
被用来绘制,并且将会作为输出显示在屏幕上。
最后我们在main函数调用glfwTerminate函数来释放内存。
现在可以输出一个黑框框了。
请到这里参考源代码。