OpenGL入门(1)——建立一个OpenGL项目
前言
本系列为OpenGL入门系列,用于记录自己的学习过程并分享学习经验。本人是跟随视频博主The Cherno发布的视频教程进行学习,B站也有搬运过来的视频最好的OpenGL教程之一,有兴趣的朋友可以一同学习。
(注:文中关于OpenGL、GLFW、GLEW的理解还存在一些问题,有兴趣的朋友可以查看LearnOpenGL纠正理解。同样这个网站也极为推荐大家去看,里边有详细教程,内容非常丰富。)
一、OpenGL是什么?
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
根据视频里的内容了解到OpenGL实际上是一种用于控制GPU的规范,这一规范获得了各平台和软硬件厂商的认可,同样也被遵守。但这并不是说他们共用同一套OpenGL,实际上他们各自有自己的OpenGL,针对自身系统或软硬件有不同程度的优化,且大多为非开源,不过在我们这些调用者的眼中,他们表面上所用的调用语句基本一样,实现的效果基本一样,很容易就认为这是一样的东西。
二、建立OpenGL项目
1.准备工作
上文说大多数的OpenGL都不是开源的,那有没有开源的OpenGL呢?答案是肯定的!
这里我们使用GLFW开源的OpenGL库进行学习。
进入主页我们会看到这样的页面:
可以看到直接就有下载的提示,不过这个是大而全的,而我们想用的是小而美的,适合个人开发使用的。找到右上方“下载”按钮,点击进入如下页面:
这里就要根据自己的平台进行选择了,本人所用平台为Windows,可以选择32位的和64位的。有一点需要知道的是,这里32位的能在32位和64位的操作系统中运行,64位的只能在64位的操作系统中运行,而且运行的速度据说也差不多,所以为了能适用于更多的操作系统选择32位的进行下载。
下载并解压后得到
至此准备工作完成。
2.建立项目
2.1 建立项目文件
在项目下添加Dependencies文件夹,并在文件夹内添加GLFW文件夹,将之前下载的文件里的includ文件和lib-vc2019(本人用的VS为2019版本,这个别的应该也差不多都适用)复制到GLFW文件夹内。
得到如下的项目文件:
至此完成项目文件的建立。
2.2 链接OpenGL库
在VS中资源管理器下右键项目
点击最下方的“属性”,出现项目属性页
找到C/C++下的“常规”里的“附加包含目录”,写入$(SolutionDir)Dependencies\GLFW\include
(此处用到了宏,编译器会自动对$SolutionDir进行解析得到对应的路径)
找到“链接器”下的“常规”里的“附加库目录”,写入$(SolutionDir)Dependencies\GLFW\lib-vc2019
至此完成OpenGL库的链接。
2.3 测试
在VS中建立好的OpenGL项目下新建筛选器“src”,用于存放源代码,在其下添加Applications.cpp
将如下代码复制到Applications.cpp中
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
运行得到如下结果即代表OpenGL项目完成创建。
总结
以上就是建立一个OpenGL项目的内容,本文仅仅简单介绍了OpenGL项目的创建,而OpenGL提供了大量能使我们快速便捷地处理图象的函数和方法,在接下来的文章中会逐步介绍,敬请期待。