安装vs2017:参考vs2017下载和安装。
安装cmake3.12.3:cmake是一个工程文件生成工具。用户可以使用预定义好的cmake脚本,根据自己的选择(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。可以从它官方网站的下载页上获取。这里我选择的是Win64安装程序,如图所示:
然后就是运行安装程序进行安装就行。
配置glfw3.2.1:glfw是创建opengl上下文,以及操作窗口的工具库。配置流程如下:
1.可以从它官方网站的下载页上获取。这里我们下载的是3.2.1版本的glfw源码工程。如图所示:
2.解压glfw的源码工程压缩包,在解压后的工程中新建一个build目录用来存放vs工程。然后使用cmake的gui来生成vs工程。生成过程如图所示:
3.在build目录中找到GLFW.sln文件,用vs2017打开。因为cmake已经配置好了项目,所以我们直接点击Build Solution(生成解决方案)按钮,然后编译的库glfw3.lib就会出现在src/Debug文件夹内。
4.建立第三方库文件和头文件存放目录Libraries,里面包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。此时将glfw的include目录内容复制到Libraries/Include目录下,将生成好的glfw3.lib放在Libraries/Libs目录下。
配置glad4.5:glad是访问opengl接口的工具库。配置流程如下:
1.打开glad的在线服务,将语言(Language)设置为C/C++,在API选项中,选择4.5以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。点击生成(Generate)按钮来生成库文件glad-4.5.zip。
2.解压获取到的glad-4.5.zip文件,将include目录内容复制到Libraries/Include目录下。
配置OpenGL工程:
1.打开vs2017创建一个新的项目。如果vs提供了多个选项,选择Visual C++,然后选择Empty Project(空项目)并创建。如图所示:
2.进入Project Properties(工程属性,在解决方案窗口里右键项目),然后选择VC++ Directories(VC++ 目录)选项卡。在Include Directories选项中将Libraries/Include引入进来。在Library Directories选项中将Libraries/Libs引入进来。如图所示:
3.在Linker(链接器)选项卡里的Input(输入)选项卡里添加opengl32.lib以及glfw3.lib。如图所示:
此处的opengl32.lib已经包含在Microsoft SDK里了,它在Visual Studio安装的时候就默认安装了。而glfw3.lib就是上文配置glfw时所生成的库文件。
4.将glad的src目录中的glad.c文件添加到当前工程中。
5.新建一个cpp文件并将以下代码复制进去,代码如下:
#include
#include
#include
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
int main()
{
// glfw: initialize and configure
// ------------------------------
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
// glfw window creation
// --------------------
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// glad: load all OpenGL function pointers
// ---------------------------------------
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// render loop
// -----------
while (!glfwWindowShouldClose(window))
{
// input
// -----
processInput(window);
// render
// ------
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
// -------------------------------------------------------------------------------
glfwSwapBuffers(window);
glfwPollEvents();
}
// glfw: terminate, clearing all previously allocated GLFW resources.
// ------------------------------------------------------------------
glfwTerminate();
return 0;
}
// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// make sure the viewport matches the new window dimensions; note that width and
// height will be significantly larger than specified on retina displays.
glViewport(0, 0, width, height);
}
运行工程查看是否得到如图所示窗口,要是编译不过就要往上查看相关配置是否正确。结果如图所示:
参考:
1.https://learnopengl-cn.github.io