自制游戏引擎,学习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