OpenGL自制游戏引擎-GreateWindow

2019-06-24 10:47:51 浏览数 (1)

自制游戏引擎,学习OpenGL相关知识并进行实践,学习引擎底层知识,提高对游戏引擎的认识。

基于GLFW、GLEW的环境配置

这次我们使用下面的方式构建OpenGL环境 1.下载GLFW https://www.glfw.org/download.html 在glfw官网下载32Bit的package

These packages contain the GLFW header files, documentation and release mode static libraries, DLLs and import libraries for Visual C 2010-2019, MinGW-w64 and plain MinGW.

2.下载GLEW http://glew.sourceforge.net/

The OpenGL Extension Wrangler Library (GLEW) is a cross-platform open-source C/C extension loading library. GLEW provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform. OpenGL core and extension functionality is exposed in a single header file. GLEW has been tested on a variety of operating systems, including Windows

3.新建一个空的C 工程 添加一个CPP工程

4.相关库的配置 在工程右键选择属性 在C/C 中设置常规添加库文件的头文件

附加包目录

在链接器中将上面添加的头文件与工程进行链接

附加库目录.PNG

在链接器的输入中添加要具体添加的lib

添加附加依赖项.PNG

开一个视窗

1.初始化glfw

代码语言:javascript复制
glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//主版本号
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//子版本号
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//OPENGL核心版本,使用可编程流水线

2.创建一个窗口,设置window为当前线程的主要上下文

代码语言:javascript复制
//Open GLFW Window
    GLFWwindow* window = glfwCreateWindow(800, 900, "Frist Window", NULL, NULL);
    if (window == NULL)
    {
        printf("Open Window Failed");
        return -1;
    }
    glfwMakeContextCurrent(window);//将window设置为当前thread的主要上下文

3.初始化glew

代码语言:javascript复制
glewExperimental = true;
    if (glewInit() != GLEW_OK)
    {
        printf("InitGLEW failed");
        glfwTerminate();
        return -1;
    }

4.设置窗口的Viewport,在RenderRoll循环渲染、等待系统消息

代码语言:javascript复制
glViewport(0, 0, 800, 600);
    //Ready engines
    while (!glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

Double buffer: 当我们只使用一个buffer的时候,pixel的渲染是从左到右从上到下的,会造成闪屏的问题。为了解决这个问题,使用两个Buffer。 frontBuffer:包括最终的显示在屏幕上的输出结果。 backBuffer:全部的渲染指令 当全部渲染指令完成的时候,将backBuffer转换到frontBuffer,图像将直接展现给我们。

5.添加一个退出按键

代码语言:javascript复制
void  ProcessInput(GLFWwindow* window) {
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
    {
        glfwSetWindowShouldClose(window, true);
    }
}

6.清除屏幕颜色缓冲区 在Render循环中添加清空Buffer的操作,否则渲染的buffer会和前一帧重叠

代码语言:javascript复制
while (!glfwWindowShouldClose(window))
    {
        ProcessInput(window);

        glClearColor(1.0f, 0, 0, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

参考资料: 1.《OpenGL编程指南》 2.https://learnopengl.com/Getting-started/Hello-Window 3.https://www.bilibili.com/video/av24353839

0 人点赞