在VS2017环境中配置OpenGL,我们分三步:配置GLFW、配置GLAD、导出项目模板。

配置GLFW

1.首先下载GLFW,点击这里,进入Github下载。

或者

点击这里从百度云下载,提取码为yavo。(注:该链接由中国大学MOOC万琳老师计算机图形学课程讨论区提供)。

2.然后安装Cmake后,在..\glfw-3.3文件夹下创建build文件夹。

打开Cmake按下图进行配置:



接着点击左下角的Configure,选择对应的Visual Studio 15 2017(根据自己的ide自行选择)。



点击Finish。然后点击Generate进行生成。完成后效果如图所示。



3.接着我们打开VS 2017,新建一个空项目,然后右击项目,选择属性



然后我们点击左侧的VC++ 目录,我们将修改包含目录与库目录。



点击包含目录->编辑,点击右上角的新行后,出现一个新行,点击行末尾的三个小点,选中刚刚下载的GLFW文件夹中的include文件夹。



接着点击库目录,步骤与刚刚一致,只不过选中的是GLFW中的build文件夹中的src,然后选中src中的Debug文件夹。



接着我们点击左侧的链接器->输入->附加依赖项->编辑



在其中输入

opengl32.lib
glfw3.lib



点击确定完成GLFW的配置!下面我们配置GLAD,暂时不要关闭VS。

配置GLAD

点击这里,进入GLAD在线界面,language选中C/C++,在API内的gl选择自己要下载的版本。Profile选择Core,选中Generate a loader 后点击Generate。



进入新网页后右击glad.zip,选择将目标另存为,下载压缩包。



解压后,打开文件夹glad,点击src,进入后,将glad.c复制到VS中当前项目的源文件夹下(在VS中右击项目,点击在文件资源管理器中打开即可打开文件夹当前项目文件夹)。



然后我们我们在VS中右击源文件新建一个main.cpp文件,接着右击源文件点击添加->现有项,进入点击刚刚拖进去的glad.c。



接着我们重复在配置GLFW时的修改包含目录的步骤,把glad目录下的include文件夹包含进去(这里就不截图了,和上面步骤一样)。

这样GLAD的配置就完成了,我们可以在文件main.cpp中输入下面的代码进行尝试:

#include <glad/glad.h>

#include <GLFW/glfw3.h>

#include <iostream>

const unsigned int SCR_WIDTH = 800;

const unsigned int SCR_HEIGHT = 600;

int main()
{ glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 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); if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } while (!glfwWindowShouldClose(window)) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); glfwPollEvents(); } glfwTerminate(); return 0; }

编译后运行:



这样OpenGL的配置基本完成,为了日后使用的方便,下面我们创建一个项目模板。

导出项目模板

为了日后使用OpenGL时不用再重复上面繁琐的步骤,我们导出项目模板。

首先,在VS上方导航栏中选中项目->导出模板。



选中项目模板,点击下一步。

为模板命名,这里我命名为OpenGL Project。



点击完成。这样一个OpenGL的项目模板就做好了。

重新打开VS,点击新建项目,可以看到我们的项目模板已经成功导入了,这样我们在下次创建OpenGL项目时就可以直接使用了~

如果觉得不错,不妨关注一下哦~

一步一步带你在VS 2017中配置OpenGL的更多相关文章

  1. 在visual studio 2017中配置Qt

    简述 这两天因为软件工程课要用vs2017写一个C++的GUI界面,就打算学习Qt,但是vs2017配置起Qt来不像vs2013,15那么简单,而且现在网上对于vs2017配置Qt的教程很少,也不详细 ...

  2. 一步一步带你实现virtual dom(二) -- Props和事件

    很高兴我们可以继续分享编写虚拟DOM的知识.这次我们要讲解的是产品级的内容,其中包括:设置和DOM一致性.以及事件的处理. 使用Babel 在继续之前,我们需要弥补前一篇文章中没有详细讲解的内容.假设 ...

  3. 一步一步带你实现virtual dom(一)

    一步一步带你实现virtual dom(一) 一步一步带你实现virtual dom(二)--Props和事件 要写你自己的虚拟DOM,有两件事你必须知道.你甚至都不用翻看React的源代码,或者其他 ...

  4. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  5. 一步一步带你入门MySQL中的索引和锁 (转)

    出处: 一步一步带你入门MySQL中的索引和锁 索引 索引常见的几种类型 索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等.本文主要探讨 MySQL 的默认存储引擎 InnoDB 的索引结 ...

  6. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  7. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  8. 一步一步写算法(之prim算法 中)

    原文:一步一步写算法(之prim算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] C)编写最小生成树,涉及创建.挑选和添加过程 MI ...

  9. 一步一步写算法(之n!中末尾零的个数统计)

    原文:一步一步写算法(之n!中末尾零的个数统计) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在很多面试的题目中,求n!结果中零的个数也是 ...

随机推荐

  1. xsd to javabean

    1. cd jdk/bin 2. xjc -p com.skyecho.product.air.ibe.api.model.airfaredisplay d:/temp/OTA_AirFareDisp ...

  2. 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP

    P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...

  3. codeforces 811 D. Vladik and Favorite Game(bfs水题)

    题目链接:http://codeforces.com/contest/811/problem/D 题意:现在给你一个n*m大小的图,你输出一个方向之后,系统反馈给你一个坐标,表示走完这步之后到的位子, ...

  4. [Swoole入门到进阶] [精选公开课] Swoole服务器-Server的四层生命周期

    PHP 完整生命周期 执行PHP文件 PHP扩展模块初始化(MINIT) PHP扩展请求初始化(RINIT) 执行 PHP 逻辑 PHP扩展请求结束(RSHUTDOWN) PHP脚本清理 PHP扩展模 ...

  5. Kafka源码分析及图解原理之Producer端

    一.前言 任何消息队列都是万变不离其宗都是3部分,消息生产者(Producer).消息消费者(Consumer)和服务载体(在Kafka中用Broker指代).那么本篇主要讲解Producer端,会有 ...

  6. c++拷贝构造函数引用传参

    看一道C++面试题: 给出下述代码,分析编译运行的结果,并提供3个选项: A.编译错误  B.编译成功,运行时程序崩溃  C.编译运行正常,输出10 class A { private: int va ...

  7. 如何从 if-else 的参数校验中解放出来?

    背景 在开发中经常需要写一些字段校验的代码,比如非空,长度限制,邮箱格式验证等等,导致充满了if-else 的代码,不仅相当冗长,而且很让人抓狂. hibernate validator(官方文档)提 ...

  8. 使用FlameGraph火焰图分析JAVA应用性能

    开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...

  9. java路障CyclicBarrier

    当所有线程都执行到某行代码,才可已往下执行: package threadLock; import java.util.Random; import java.util.concurrent.Brok ...

  10. 时间复杂度big-O、Big-Omega和big-Theta

    我们有三种曲线:   A curve that we know is "above" the running time function when n is large. ( Bi ...