小白的OpenGL整合环境入门(搭建以及简介)
目录
- 写在前面
- 第三方库简介
- OpenGL发展历史及库的更替
- OpenGL发展
- 库的分类
- 库所对应的版本
- 环境搭建
- 方法一:NuGet包管理
- 方法二:使用整合的环境
写在前面
本文的环境搭建适用于VS2015及以上(作者使用的是VS2019),涉及的库有glut系列(glut、freeglut)、glfw3+glad、glm、stb_image、assimp、AntTweakBar,最终可以完美契合OpenGL教程。
我会在最后给出已经编译整合好的常用库合集链接(含两个VS项目模板)。
第三方库简介
- glut:跨平台的OpenGL程序的工具包,定义以及控制视窗,侦测事件;
- freeglut:是glut的替代;
- glu:包含在glut内,是对底层OpenGL接口的封装(实现跨平台),包含一些数学方法如向量,操纵矩阵;
- glew:glu的加强版,但不包括数学方法需要搭配glm;
- glm:数学库(用于glfw);
- glad:是glew的替代;
- glfw:是freeglut升级版;
- stb_image:用于图像加载的解码库;
- assimp:用于模型加载的库;
- 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包管理
- 新建一个项目,在解决方案管理器中右键项目名-管理NuGet程序包(或者上方工具栏 项目-管理NuGet程序包)
打开NuGet管理器
打开NuGet管理器
- 搜索nupengl,找到第一个并安装
安装nupengl
- 到此通过NuGet包管理就已经为这个项目安装了OpenGL环境,其中包含了OpenGL, FreeGLUT, GLEW, Game, GLFW, GLUT, nativepackage。
方法二:使用整合的环境
下载链接中的压缩包: OpenGL整合包.
- 解压压缩包,记下路径
解压缩
- 打开VS(演示为VS2019),工具栏 - 项目 - 属性 - VC++目录在包含目录和库目录分别添加我们解压缩的包内的include文件夹和lib文件夹
链接库
- 到此就搭建完毕了,下面测试一下代码:
#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:
- opengl关于glut, freeglut, glfw, glew, glad, gl3w库的说明
- OpenGL常用的库
小白的OpenGL整合环境入门(搭建以及简介)相关推荐
- XCode小白配置OpenGL练习环境
想学一下ogldev中OpenGL的例子,只有个mac本,台式机虽爽,但是不能一次设置,到处开发. 对XCode不熟悉,配个简单的环境居然花了4个小时,主要是对XCode不熟,网上说的Head Sea ...
- C#中使用OpenGL(API)创建OpenGL渲染环境
在C#中调用1.1版本的OpenGL函数,但是光有OpenGL函数还不能绘制图形,就像一个画家,他即使拥有绘画的技巧,还有画笔和颜料,如果没有画布,他也没有地方画画.有了画布,画家还需要画板把画布支起 ...
- SpringBoot-从入门到放弃(二) 开发环境的搭建
SpringBoot-从入门到放弃(二) 开发环境的搭建 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/z23546498/article/deta ...
- 【游戏开发】基于VS2017的OpenGL开发环境搭建
一.简介 最近,马三买了两本有关于"计算机图形学"的书籍,准备在工作之余鼓捣鼓捣图形学和OpenGL编程,提升自己的价值(奔着学完能涨一波工资去的).俗话说得好,"工欲善 ...
- 搭建环境_maven: 搭建工程: ssm整合: 搭建测试:
2019独角兽企业重金招聘Python工程师标准>>> 搭建环境_maven: 搭建工程: ssm整合: 搭建测试: 搭建环境问题解决: 转载于:https://my.oschina ...
- 明晚8点,捷微团队QQ群公开课,讲解jeewx2.0版本maven环境的搭建入门!
2014-08-13号晚8点,捷微团队QQ群公开课,讲解jeewx2.0版本maven环境的搭建入门! 讲师:刘强(团队成员) QQ群:287090836 (JAVA版本微信开源项目) http:// ...
- 使用Android OpenGL ES 2.0绘图之一:搭建一个OpenGL ES环境
传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...
- OpenGL+VS2012环境搭建
近段时间在做图像处理,第一步当然是学习OpenGL.千里之行,始于足下.开发环境总是要浪费程序员太多时间.昨天捣鼓一天OpenGL的开发环境,看了网上N多的环境搭建教程和问题解决方案,始终没有达到自己 ...
- 在Win32下搭建opengl绘制环境
在官方标准教程中使用glfw3来创建opengl的窗体,处理输入相关消息.本文介绍下如何在win32下搭建opengl绘制环境. 以下是在win32下搭建opengl绘制环境的流程 1.入口函数:in ...
最新文章
- Gut-2018-早期肝癌肠道生物标志物鉴定
- php 实现tab切换_微信小程序实例:实现顶部tab切换以及滑动切换时导航栏会随着移动的效果(代码)...
- linux常用命令之lsof 、netstat、ipcs、ldd
- 【STM32】FreeRTOS编码风格
- Java 多线程异常捕获Runnable实现
- 我最喜欢的科目是计算机课英语,初一英语作:my favorite subject(我最喜欢的科目)要求写美术课(art),80词以上,拜托啦!...
- 在北理珠,如何快速被动了解(社工)一个学生
- 峰值信噪比公式_数字音频水印——峰值信噪比PSNR与信噪比SNR的问题。求告之!求代码!...
- Photoshop制作水印简易教程
- 【CodeWars】Path Finder #2: shortest path
- 3dmax软件渲染模型导出JPG格式图片的方法
- rockchip中的vop
- ASCII编码与UTF-8编码
- STM VCP移植笔记
- FreeRTOS内存不够
- ext2 / ext3 结构分析
- 度量空间的完备化定理
- GIT(分布式版本控制系统)入门
- 爬虫入门task2:bf4、xpath、正则表达式
- 海洋遥感技术的内涵及特征
热门文章
- 运行无法打开计算机策略,win10系统电脑本地组策略打不开无法运行的技巧
- 所有外包项目威客网站列表----来自程序员接私活网qxj.me
- BenevolentAI:药物发现中的人工智能
- MATLAB相干成像系统,Matlab光学仿真课程设计-基于Matlb相干与非相干照明成像系统的仿真.docx...
- 瑞吉外卖项目:新增菜品与菜品分页查询
- salad ---07
- python re正则提取ip地址_python 正则表达式匹配IP地址
- linux读内存的命令devmem,嵌入式Linux调试_命令devmem_直接读写内存
- Simulink Boost电路仿真实例
- 传感器技术—霍尔传感器(学习笔记九 补充)