• OpenGL之窗口的创建


    1. #include
    2. #include
    3. using namespace std;
    4. // 我们可以对窗口注册一个回调函数(Callback Function),它会在每次窗口大小被调整的时候被调用。这个回调函数的原型如下
    5. void framebuffer_size_callback(GLFWwindow * window,int width,int height){
    6. glViewport(0,0,width,height);
    7. }
    8. // glfwGetKey函数,它需要一个窗口以及一个按键作为输入。这个函数将会返回这个按键是否正在被按下
    9. void processInput(GLFWwindow *window)
    10. {
    11. if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    12. glfwSetWindowShouldClose(window, true);
    13. }
    14. int main(int argc, char const *argv[])
    15. {
    16. // 初始化的glfw;
    17. glfwInit();
    18. // 设置窗口的相关属性
    19. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
    20. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
    21. glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
    22. // 创建对应的窗口
    23. GLFWwindow * window = glfwCreateWindow(800,600,"learningGL",NULL,NULL);
    24. if(!window){
    25. cout << "failed to create a window" << endl;
    26. // 销毁所有现在的窗口和光标
    27. glfwTerminate();
    28. return -1;
    29. }
    30. // 指定窗口的上下文(context)设为调用线程的当前上下文
    31. glfwMakeContextCurrent(window);
    32. // 告诉OpenGL渲染窗口的尺寸的大小
    33. // glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。
    34. glViewport(0,0,800,600);
    35. // 我们还需要注册这个函数,告诉GLFW我们希望每当窗口调整大小的时候调用这个函数:
    36. glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
    37. // glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出
    38. // glfwPollEvents函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)
    39. // glfwSwapBuffers函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
    40. while (!glfwWindowShouldClose(window))
    41. {
    42. processInput(window);
    43. // glClearColor来设置清空屏幕所用的颜色
    44. glClearColor(1.0f, 0.5f, 0.3f, 1.0f);
    45. // glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲
    46. // 可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT
    47. glClear(GL_COLOR_BUFFER_BIT);
    48. glfwSwapBuffers(window);
    49. glfwPollEvents();
    50. }
    51. glfwTerminate();
    52. return 0;
    53. }

  • 相关阅读:
    c语言指针运算
    第十五章 I/O(输入/输出)流
    微信的个人号接口
    A星(A*、A Star)路径规划算法详解(附MATLAB代码)
    FDTD script command(源/监视器)
    企业微信自建应用手动授权,获取用户详细信息
    c++学生成绩管理系统
    23种设计模式之备忘录模式(Memento Pattern)
    共享模型之管程
    Cesium 问题:鼠标移出地球,但移动中生成的内容还在球上
  • 原文地址:https://blog.csdn.net/qq_44632658/article/details/133097572