Hello Window

#include
#define GLEW_STATIC
#include 
#include 




//检查用户是否按下了返回键(Esc)键,在main函数的while渲染循环中加入判断
void processInput(GLFWwindow* window)
{
    //检查用户是否按下了返回键(Esc)(如果没有按下,glfwGetKey将会返回GLFW_RELEASE。如果用户的确按下了返回键,我们将通过glfwSetwindowShouldClose使用把WindowShouldClose属性设置为 true的方法关闭GLFW。下一次while循环的条件检测将会失败,程序将会关闭。
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}





int main()
{

    //---------------初始化-------------------------


    glfwInit();//初始化函数库
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//使用GLFW版本3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//使用core的prifile
    //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);


    //-------------打开一个GLFW的窗口-----------------
    GLFWwindow* window = glfwCreateWindow(800, 600, "QQ_LearnOpenGL", NULL, NULL);//开窗
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();//终止
        return -1;//返回错误
    }
    glfwMakeContextCurrent(window);//绑定并且作为上下文

    
    //------------初始化GLEW------------------------
    glewExperimental = true;//后面可能用到先设置为ture
    if (glewInit()!=GLEW_OK)//判断GLEW操作是否成功

    {
        std::cout << "Init GLEW failed" << std::endl;
        glfwTerminate();
        return -1;
    }

    //渲染之前必须告诉OpenGL渲染窗口的尺寸大小,即视口(Viewport)
    //这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标
    glViewport(0, 0, 800, 600);


    //-------------------渲染循环-----------
    while (!glfwWindowShouldClose(window))//检查到没有要关窗的意思时
    {
        processInput(window);//之前做检测,最后做输入
        glfwSwapBuffers(window);//会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上。
        //包含每一点像素颜色的秩序
        glfwPollEvents();//函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)


       //----------------新渲染防止上次渲染迭代进行清屏-------------------
        glClearColor(0, 0.5f, 0.5f, 1.0f);//glClearColor来设置清空屏幕所用的颜色(RGB,透明值)
        glClear(GL_COLOR_BUFFER_BIT);//们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。
       
    }


    //----------当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源---------
    glfwTerminate();

    return 0;
   
}

运行图片:

Hello Window_第1张图片

 

你可能感兴趣的:(OpenGL学习笔记)