目录

  • 写在前面
    • 第三方库简介
    • OpenGL发展历史及库的更替
      • OpenGL发展
      • 库的分类
      • 库所对应的版本
  • 环境搭建
    • 方法一:NuGet包管理
    • 方法二:使用整合的环境

写在前面

本文的环境搭建适用于VS2015及以上(作者使用的是VS2019),涉及的库有glut系列(glut、freeglut)、glfw3+glad、glm、stb_image、assimp、AntTweakBar,最终可以完美契合OpenGL教程。
我会在最后给出已经编译整合好的常用库合集链接(含两个VS项目模板)。

第三方库简介

  1. glut:跨平台的OpenGL程序的工具包,定义以及控制视窗,侦测事件;
  2. freeglut:是glut的替代;
  3. glu:包含在glut内,是对底层OpenGL接口的封装(实现跨平台),包含一些数学方法如向量,操纵矩阵;
  4. glew:glu的加强版,但不包括数学方法需要搭配glm;
  5. glm:数学库(用于glfw);
  6. glad:是glew的替代;
  7. glfw:是freeglut升级版;
  8. stb_image:用于图像加载的解码库;
  9. assimp:用于模型加载的库;
  10. AntTweakBar:界面库,在程序中增加一些轻量且直观的 GUI 效果(相当于一个控制台)。

其中说明一下8,9,10是拓展项,不是必须(我都整合在一起了可以直接用)

OpenGL发展历史及库的更替

OpenGL发展
OpenGL版本 版本特点
OpenGL1.x 支持了顶点数组,纹理,缓冲对象及一系列优化
OpenGL2.x 可编程着色,能够实现更丰富的效果 ;代表DX9级硬件
OpenGL3.x 增加几何着色渲染,拥有更强的跨平台能力;代表DX10级硬件
OpenGL4.x 若干细节优化;代表DX11级硬件

详细内容可以查看官方文档。

库的分类
功能 库的更替
窗口创建,IO交互,OpenGL上下文处理 glut --> freeglut --> glfw
对显卡底层的接口支持 glu --> glew --> glad

一般来说glfw和glad搭配使用(也可以与glew),freeglut与glew搭配。

库所对应的版本
版本
GLUT OpenGL1.0/2.0
FREEGLUT OpenGL 1.0/2.0/3.0
GLEW OpenGL2.0以上
GLFW OpenGL3.0以上
GLAD OpenGL3.0以上

环境搭建

这里提供两种环境搭建的方法,但均基于VS2015及以上(作者使用的是VS2019)。
其中方法一适用于使用glut或freeglut方法二提供的是glfw+glad

本着学新不学旧的原则,更推荐方法二;但是方法一在学习和搭建上都更简单。

方法一:NuGet包管理

  1. 新建一个项目,在解决方案管理器中右键项目名-管理NuGet程序包(或者上方工具栏 项目-管理NuGet程序包

打开NuGet管理器

打开NuGet管理器

  1. 搜索nupengl,找到第一个并安装

安装nupengl

  1. 到此通过NuGet包管理就已经为这个项目安装了OpenGL环境,其中包含了OpenGL, FreeGLUT, GLEW, Game, GLFW, GLUT, nativepackage

方法二:使用整合的环境

下载链接中的压缩包: OpenGL整合包.

  1. 解压压缩包,记下路径

解压缩

  1. 打开VS(演示为VS2019),工具栏 - 项目 - 属性 - VC++目录包含目录库目录分别添加我们解压缩的包内的include文件夹和lib文件夹

链接库

  1. 到此就搭建完毕了,下面测试一下代码:
#include <glad\glad.h>
#include <glfw\glfw3.h>
#include <iostream>
#include <Windows.h>
#pragma comment(lib,"glfw3.lib")
#pragma comment(lib,"glad.lib")
#pragma comment(lib,"stb_image.lib")
#pragma comment(lib,"assimp.lib")
#pragma comment(lib,"winmm.lib") // 告诉连接器与这个库连接,因为我们要播放多媒体声音
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;void minit()
{// Init GLFW    glfwInit();// Set all the required options for GLFW    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
}// The MAIN function, from here we start the application and run the game loopint main()
{std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;minit();// Create a GLFWwindow object that we can use for GLFW's functions    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "ink", nullptr, nullptr);if (window == nullptr){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// Set the required callback functions    glfwSetKeyCallback(window, key_callback);// Initialize GLEW to setup the OpenGL Function pointers    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLad" << std::endl;return -1;}// 定义视角 Define the viewport dimensions    glViewport(0, 0, WIDTH, HEIGHT);//进入循环 Game loop    while (!glfwWindowShouldClose(window)){//检查事件 Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions    glfwPollEvents();//渲染指令 Render    //清除颜色缓存 Clear the colorbuffer    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// Swap the screen buffers    glfwSwapBuffers(window);Sleep(20);}//释放GLFW分配的内存 Terminate GLFW, clearing any resources allocated by GLFW.    glfwTerminate();return 0;
}//键盘事件 Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{std::cout << key << std::endl;if (key == GLFW_KEY_Z && action == GLFW_PRESS){std::cout << "!!!!" << std::endl;glfwSetWindowShouldClose(window, GL_TRUE);}
}

如果显示如下,键盘输入Z,输出”!!!“则证明成功。

成功示例

Reference:

  1. opengl关于glut, freeglut, glfw, glew, glad, gl3w库的说明
  2. OpenGL常用的库

小白的OpenGL整合环境入门(搭建以及简介)相关推荐

  1. XCode小白配置OpenGL练习环境

    想学一下ogldev中OpenGL的例子,只有个mac本,台式机虽爽,但是不能一次设置,到处开发. 对XCode不熟悉,配个简单的环境居然花了4个小时,主要是对XCode不熟,网上说的Head Sea ...

  2. C#中使用OpenGL(API)创建OpenGL渲染环境

    在C#中调用1.1版本的OpenGL函数,但是光有OpenGL函数还不能绘制图形,就像一个画家,他即使拥有绘画的技巧,还有画笔和颜料,如果没有画布,他也没有地方画画.有了画布,画家还需要画板把画布支起 ...

  3. SpringBoot-从入门到放弃(二) 开发环境的搭建

    SpringBoot-从入门到放弃(二) 开发环境的搭建 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/z23546498/article/deta ...

  4. 【游戏开发】基于VS2017的OpenGL开发环境搭建

    一.简介 最近,马三买了两本有关于"计算机图形学"的书籍,准备在工作之余鼓捣鼓捣图形学和OpenGL编程,提升自己的价值(奔着学完能涨一波工资去的).俗话说得好,"工欲善 ...

  5. 搭建环境_maven: 搭建工程: ssm整合: 搭建测试:

    2019独角兽企业重金招聘Python工程师标准>>> 搭建环境_maven: 搭建工程: ssm整合: 搭建测试: 搭建环境问题解决: 转载于:https://my.oschina ...

  6. 明晚8点,捷微团队QQ群公开课,讲解jeewx2.0版本maven环境的搭建入门!

    2014-08-13号晚8点,捷微团队QQ群公开课,讲解jeewx2.0版本maven环境的搭建入门! 讲师:刘强(团队成员) QQ群:287090836 (JAVA版本微信开源项目) http:// ...

  7. 使用Android OpenGL ES 2.0绘图之一:搭建一个OpenGL ES环境

    传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...

  8. OpenGL+VS2012环境搭建

    近段时间在做图像处理,第一步当然是学习OpenGL.千里之行,始于足下.开发环境总是要浪费程序员太多时间.昨天捣鼓一天OpenGL的开发环境,看了网上N多的环境搭建教程和问题解决方案,始终没有达到自己 ...

  9. 在Win32下搭建opengl绘制环境

    在官方标准教程中使用glfw3来创建opengl的窗体,处理输入相关消息.本文介绍下如何在win32下搭建opengl绘制环境. 以下是在win32下搭建opengl绘制环境的流程 1.入口函数:in ...

最新文章

  1. Gut-2018-早期肝癌肠道生物标志物鉴定
  2. php 实现tab切换_微信小程序实例:实现顶部tab切换以及滑动切换时导航栏会随着移动的效果(代码)...
  3. linux常用命令之lsof 、netstat、ipcs、ldd
  4. 【STM32】FreeRTOS编码风格
  5. Java 多线程异常捕获Runnable实现
  6. 我最喜欢的科目是计算机课英语,初一英语作:my favorite subject(我最喜欢的科目)要求写美术课(art),80词以上,拜托啦!...
  7. 在北理珠,如何快速被动了解(社工)一个学生
  8. 峰值信噪比公式_数字音频水印——峰值信噪比PSNR与信噪比SNR的问题。求告之!求代码!...
  9. Photoshop制作水印简易教程
  10. 【CodeWars】Path Finder #2: shortest path
  11. 3dmax软件渲染模型导出JPG格式图片的方法
  12. rockchip中的vop
  13. ASCII编码与UTF-8编码
  14. STM VCP移植笔记
  15. FreeRTOS内存不够
  16. ext2 / ext3 结构分析
  17. 度量空间的完备化定理
  18. GIT(分布式版本控制系统)入门
  19. 爬虫入门task2:bf4、xpath、正则表达式
  20. 海洋遥感技术的内涵及特征

热门文章

  1. 运行无法打开计算机策略,win10系统电脑本地组策略打不开无法运行的技巧
  2. 所有外包项目威客网站列表----来自程序员接私活网qxj.me
  3. BenevolentAI:药物发现中的人工智能
  4. MATLAB相干成像系统,Matlab光学仿真课程设计-基于Matlb相干与非相干照明成像系统的仿真.docx...
  5. 瑞吉外卖项目:新增菜品与菜品分页查询
  6. salad ---07
  7. python re正则提取ip地址_python 正则表达式匹配IP地址
  8. linux读内存的命令devmem,嵌入式Linux调试_命令devmem_直接读写内存
  9. Simulink Boost电路仿真实例
  10. 传感器技术—霍尔传感器(学习笔记九 补充)