OpenGL开发必过的坎------开发环境的准备(Windows10)

news2024/12/25 14:38:07

前言

图形编程一直以来都是计算机科学中最具挑战性的主题之一。随着限制VR技术的兴起,越来越多的公司开始涉足VR领域。目前来看使用最多的是Unity3d来开发,但是像浏览器,将2D应用3D化(把2D的应用界面投到一个3D的场景中,用户可以通过手柄操作2D界面)这些需求都需要对3D图形编程很熟悉才能做好这些炫酷的场景。而现在的图形编程都是基于图形库来完成,即程序员通过调用一个预先定义的库或者是一系列的库中的函数,由这些库来提供对底层图形操作的支持。

现在的市场上有很多的图形库,但是常见的平台无关的图形库叫做OpenGL(Open Graphics Libary)。本系列的博客也是要介绍如何在C++中使用OpenGL进行3D图形编程。在介绍使用OpenGL进行3D图形编程之前,我们先做一个入门必过的坎-------OpenGL的开发环境配置准备。

1.环境配置准备

俗话说:“万事开头难”,很多同学都是对OpenGL很感兴趣,但是动手做时被环境的配置阶段就劝退了,所以本文将全面介绍OpenGL开发环境相关库的配置,降低对OpenGL感兴趣的同学的入门门槛。首先我们先介绍下在C++中使用OpenGL需要用到的环境和库,如下所示:

开发IDE: Visual Studio2022,其他版本的也行,配置大同小异
OpenGL/GLSL
窗口管理库(GLFW)
扩展库(GLEW)
数学库(GLM)
纹理图像加载库(SOIL2)

下面我们就开始准备配置上面列出的环境,OpenGL/GLSL不用我们配置,系统默认就带了,GLSL是着色器语言,在OpenGL2.0版本引入的。这个引入使得程序员可以通过编写着色器语言实现更多更逼真的效果。

2.下载相关库

2.1 下载窗口管理库(GLFW)

OpenGl 实际上并不是把图像直接绘制到计算机屏幕上,而是将其渲染到一个帧缓冲区中,然后由计算机来负责把帧缓冲区的内容绘制到屏幕上的一个窗口中。完成这个功能就可以选择使用GLFW库来实现,这个库支持Windows,MacOS,Linux以及其他的操作系统,我们可以从官网上获取:
GLFW 官网下载地址
如果是CSDN会员的可以去资源里面下载,不需要积分,没有会员的就直接去官网下载,没必要为了下载一个资源去花钱开会员:
GLFW CSDN下载地址

2.2 下载OpenGL扩展库

GLEW(OpenGL extension wrangler),即OpenGL扩展牛仔,OpenGL是围绕一组基本功能和扩展机制进行组织的,随着技术的发展,扩展机制可以用来支持新的功能,所以GLEW 就是用来干这个活的。下载这个库同样是给读者两个地址:
GLEW官网下载地址

GLEW CSDN下载地址

2.3 下载OpenGL数学库

GLM是OpenGL Mathematics数学库,,它是一个只有头文件的C++库,兼容Windows,MacOS和Linux,它可提供与图形概念相关的类和基本数学函数,例如矢量,矩阵和四元数,它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视矩阵和视角矩阵
GLM官网下载地址

GLM CSDN下载地址

2. 4 纹理图像加载库SOIL2 下载

SOIL2用于加载OpenGL的图像纹理,我们从零开始编写一个纹理图像加载器是可以做到的,但是考虑到各种各样的图像文件格式,使用一个纹理图像加载库通常是更明智的选择,安装集成SOIL2图像纹理加载库需要我下载SOIL2库和一个辅助工具premake
SOIL2 GitHub下载
premake 工具官网下载

SOIL2 CSDN下载
premake 工具CSDN下载

3.准备共享的库文件(lib)和include文件夹

因为在Windows上开发OpenGL需要配置环境,所以我们最好的方式是将OpenGL的开发环境配置成一个项目模板,这样就可以在每次新建OpenGL项目时可以基于我们事先配置好的模板开发。而在做项目模板之前,我们需要把对应的库找一个地方放起来,然后在Visual Studio中去建立库的引用 ,首先我们需要选择一个位置存放我们的库文件,这里可以选择存放到任何位置。下图是文件夹的文件夹结构。

库文件夹结构
根据上面的库文件结构图,我们去动手实践下,在这里我是在我的D盘创建了一个文件夹存放OpenGL的这些相关库。
在这里插入图片描述创建完库文件的架构后,我们开始去准备对应的库

3.1准备窗口管理库GLFW

我们前面下载好GLFW的压缩包后解压,会得到一个如下的目录
glfw 解压后的目录解压后我们可以看到有不同版本的Visual Studio的lib,我用的是Visual studio 2022,所以我将lib-vc2022下的内容全部复制到我之前创建的 D:\OpenGL\OpenGLTemplate\lib 这个路径下,然后回到我们解压得到的glfw文件夹下,就是上图的文件夹下,点击include会发现其 目录下有一个GLFW目录,将整个目录复制到我们创建的OpenGLTemplate文件夹下的include目录下,路径为:D:\OpenGL\OpenGLTemplate\include,至此,GLFW的准备工作完成。

3.2 准备OpenGL扩展库GLEW

同样,将前面获取到的GLEW压缩包解压,会得到如下图所示的文件结构:
扩展卡glew的文件结构解压得到glew库后,点击lib->Release->x64下的库,全部复制到我们创建的OpenGLTemplate文件夹下的lib目录里:路径D:\OpenGL\OpenGLTemplate\lib,接着回到我们解压的glew目录下,找到include目录,点开后发现里面有一个GL目录,将其全部复制到OpenGLTemplate下的include目录下。路径:D:\OpenGL\OpenGLTemplate\include 至此,GLEW库的集成完成。

3.3 准备OpenGL数学库GLM

这个库的集成比较简单,我们获取到这个库的压缩包后解压,会得到如下图所示的目录
OpenGL数学库glm的文件目录结构 我们直接把解压后目录下的glm目录整个复制到我们创建的OpenGLTemplate目录下的include目录下。glm库就集成完了

3.4 准备纹理图像加载库SOIL2

SOIL2的集成稍微麻烦点,我们需要premake工具的协助,我们首先获取SOIL2的zip后解压,然后获取到premake的zip压缩包解压,premake解压后会得到一个premake5.exe,将其复制到我们解压后的SOIL2目录下。如果读者是从我提供的CSDN下载地址获取的SOIL2里面是我编译好了的,可以直接使用。如果是从官网下载的,需要我们编译一下。
下载的SOIL2目录获取到premake的压缩包后解压得到下面的目录
premake 压缩包解压的目录将premake5.exe复制到我们解压后的SOIL2目录下,即
D:\OpenGL\installPKG\SOIL2-1.3.0 下,然后。
加入premake5.exe后的SOIL2目录然后在SOIL2-1.3.0下运行CMD命令行:输入命令:premake5 vs2022
在这里插入图片描述注意,vs2022是我的visual studio的版本,具体的版本根据安装的版本来定
运行上面的命令后会在SOIL2-1.3.0下生成一个make目录
运行完premake命令后的SOIL2目录接着我们进入make->windwos目录下:
在这里插入图片描述使用Visal Studio打开上图中红框标记的文件。
在这里插入图片描述打开上面的文件后如图所示,这时我们点击鼠标右键,在弹出的菜单中选择生成,生成结束后关闭Vsual Studio,这时SOIL2-1.3.0目录下会多一个lib,如下所示
接下来我们将lib下的库全部复制到我们之前创建的OpenGLTemplate目录下的lib目录下。然后回到SOIL2目录下,将src->SOIL2目录全部复制到OpenGLTemplate目录下的include目录下。这样我们的图像纹理加载库SOIL2就集成完了。

到这里,我们对比下我们之前给到的OpenGLTemplate的文件目录图发现,还差一个glew32.dll文件需要放到OpenGLTemplate目录下,没有 这个库我们是无法运行OpenGL的代码的,这个库位于我们解压后的Glew目录下,我们找到解压的Glew目录,然后在其bin->Release->x64下找到这个库
在这里插入图片描述将其复制到OpenGLTemplate目录下, 然后我们的库就准备完了。接下来我们制作一个OpenGL的项目启动模板

4.使用Visual Studio 制作OpenGL项目模板

4.1 模板配置

打开我们的Visual Studio,然后创建一个新的C++空项目
在这里插入图片描述创建设置好名字后打开,比如这里我们叫OpenGLTemplate,然后打开
在这里插入图片描述我们先配置Debug模式下的库引用
我们找到项目->属性打开属性配置界面,然后将我们之前的OpenGLTemplate目录下的include路径配置到下图中标记的“包含目录”下。
在这里插入图片描述在这里插入图片描述然后我们还是在Visual Studio的属性设置面板上找到“链接器->常规”然后将我们之前准备的OpenGLTemplate目录下的lib目录配置到这里

在这里插入图片描述然后我们同样在“链接器->输入->添加依赖项”下,将OpenGLTemplate目录下的lib中的glfw3.lib、glew32.lib、soil2-debug.lib、opengl32.lib(应该已经是WindowSDK的一部分了,不配置也行,但是为了保险还是配置上)
在这里插入图片描述配置完以后保存,然后再切换到Release模式,重复的操作再配置一遍这里就不赘述了。
在这里插入图片描述

4.2 模板导出

在这里插入图片描述
在这里插入图片描述点击完成后,我们再次新建项目时就会发现多了一个项目模板,如下所示:
在这里插入图片描述我们点击自己定义的这个模板就可以创建OpenGL项目了。

5.测试OpenGL环境

首先在项目的源文件目录右键新建一个cpp文件:FirstOpenGLDemo.cpp
在这里插入图片描述输入代码:

#include<GL/glew.h>
#include<GLFW/glfw3.h>
#include<iostream>

using namespace std;

void init(GLFWwindow* window) {

}

void display(GLFWwindow* window, double currentTime) {
	glClearColor(1.0, 0.0, 0.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT);
}

int main(void) {
	if (!glfwInit()) {
		exit(EXIT_FAILURE);
	}
		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
		glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
		GLFWwindow* window = glfwCreateWindow(600, 600, "OpenGl-Demo", NULL, NULL);
		glfwMakeContextCurrent(window);
		if (glewInit() != GLEW_OK) { exit(EXIT_FAILURE); }
		glfwSwapInterval(1);
		init(window);

		while (!glfwWindowShouldClose(window)) {
			display(window, glfwGetTime());
			glfwSwapBuffers(window);
			glfwPollEvents();
		}

		glfwDestroyWindow(window);
		glfwTerminate();
		exit(EXIT_SUCCESS);
}

这时候我们发现相关的库都可以引用成功了,但是运行不起来,会报下面的错误
在这里插入图片描述这时就需要把我们之前放在OpenGLTemplate目录下的glew32.dll动态链接库放到,我们项目的目录的同名目录下。

在这里插入图片描述这时后我们再运行代码,就会发现运行成功了。
在这里插入图片描述我们上面的代码就是简单的展示了一个红底的背景,至此,OpenGL开发环境的配置全部完成

总结

本文主要介绍了在Windows10上的Visual Studio 2022上搭建OpenGL开发环境,主要介绍了窗口管理库GLFW、OpenGL扩展库GLEW、OpenGL数学库GLM和图像纹理加载库SOIL2的配置和集成,最后自定义了一个Visual Studio项目模板,并且最后用一个测试Demo测试了我们配置的环境,其中比较遗憾的就是glew32.dll必须我们手动复制到项目的指定目录,否则无法运行OpenGL程序。这里如果读者有更好更方便的办法,欢迎评论区交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FilmConvert Nitrate for Mac(fcpx/胶片模拟调色Pr/AE插件)

FilmConvert Nitrate是一款针对视频后期处理的插件&#xff0c;可用于颜色校正和外观看调整。它提供了各种预设&#xff0c;以方便用户足够快速地修改视频的外观&#xff0c;并还包含一个自定义工具集&#xff0c;以方便用户可以调整多个参数来达到他们所需要的效果。 该插件支…

SpringBoot + Druid DataSource 实现监控 MySQL 性能

1 添加依赖 <properties><java.version>1.8</java.version><alibabaDruidStarter.version>1.2.11</alibabaDruidStarter.version> </properties><dependency><groupId>com.alibaba</groupId><artifactId>druid-s…

Python基础合集 练习24 (程序调试)

assert expression[,arguments] expression条件表达式语句,如果表达式的值为真,则程序会继续执行下去,如果值为假则程序抛出Assertionerror错误,并输出指定的参数内容 arguments可选参数 if not expression: raise AssertionError(argument) def num_ca(): book int(inpu…

Rust 一门赋予每个人构建可靠且高效软件能力的语言

目录 Rust 安装 尝试 hello, world 编译 链接出错 开启 Rust 之旅 官方教程 《Rust 程序设计语言》 《通过例子学 Rust》 核心文档 标准库 版本指南 CARGO 手册 RUSTDOC 手册 RUSTC 手册 编译错误索引表 非官方翻译教程 Rust 程序设计语言 简体中文版 通…

543. 二叉树的直径【71】

难度等级&#xff1a;容易 上一篇算法&#xff1a; 199. 二叉树的右视图【111】 力扣此题地址&#xff1a; 543. 二叉树的直径 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;543. 二叉树的直径 给定一棵二叉树&#xff0c;你需要计算它的直径长度。一棵二叉树的…

玩一玩 Ubuntu 下的 VSCode 编程

一&#xff1a;背景 1. 讲故事 今天是五一的最后一天&#xff0c;想着长期都在 Windows 平台上做开发&#xff0c;准备今天换到 Ubuntu 系统上体验下&#xff0c;主要是想学习下 AT&T 风格的汇编&#xff0c;这里 Visual Studio 肯定是装不了了&#xff0c;还得上 VSCode…

Spring:依赖注入的方式(setter注入、构造器注入、自动装配、集合注入)

依赖注入的方式有setter注入、构造器注入、自动装配、集合注入 首先&#xff0c;Maven项目pom.xml依赖包如下&#xff1a; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:…

Servlet中转发和重定向的区别

什么是转发&#xff0c;重定向&#xff1f; 转发和重定向都是用于在服务器和浏览器之间进行页面跳转的方式。 转发是在服务器内部进行的&#xff0c;当一个Servlet接收到请求后&#xff0c;它可以将请求转发给另一个Servlet或JSP页面来处理请求&#xff0c;但是浏览器不知道这…

C语言-学习之路-04

C语言-学习之路-04 数组与字符串一维数组一维数组的定义和使用一维数组的初始化数组名一维数组练习 二维数组二维数组的定义和使用二维数组的初始化数组名 字符数组与字符串字符串的输入输出随机数字符串处理函数 数组与字符串 数组&#xff1a;为了方便处理数据把具有相同类型…

等保工作的定级指南文件

定级主要依据国家标准信息安全技术网络安全等级保护基本要求来整改。有关等保工作流程和明细,请见:https://luozhonghua.blog.csdn.net/article/details/130465356?spm=1001.2014.3001.5502 5网络安全等级保护概述 5.1等级保护对象 等级保护对象是指网络安全等级保护工作中…

微服务注册中心-Nacos概述

1、Nacos基本介绍 1.1. 什么是 Nacos&#xff1f; Nacos 是阿里巴巴推出来的一个新开源项目&#xff0c;这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮…

详解Transformer (Attention Is All You Need)

先导知识 Attention残差网络Layer Normalization 前言 注意力&#xff08;Attention&#xff09;机制[2]由Bengio团队与2014年提出并在近年广泛的应用在深度学习中的各个领域&#xff0c;例如在计算机视觉方向用于捕捉图像上的感受野&#xff0c;或者NLP中用于定位关键token…

kvm GPU直通/GPU透传 之修改Windows虚拟机分辨率

为了方便对服务器进行自动管理,我们需要对硬件进行虚拟化。对于显卡而言,Nvidia有专门支持GPU虚拟化的显卡,比如GRID GPU系列。以NVIDIA GRID K2为例,显存8GB,可虚拟出2块GPU。 对于GTX系列的显卡,如果Host主机为linux系统,想将显卡给虚拟机(windows或者linux)使用,…

函数的栈帧与销毁(栈帧可不是战争哦)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;将C语言知识一网打尽&#xff0c;希望可…

码出高效:Java开发手册笔记(java对象四种引用关系及ThreadLocal)

码出高效&#xff1a;Java开发手册笔记&#xff08;java对象四种引用关系及ThreadLocal&#xff09; 前言一、引用类型二、ThreadLocal价值三、ThreadLocal副作用 前言 “水能载舟&#xff0c;亦能覆舟。”用这句话来形容 ThreadLocal 最贴切不过。ThreadLocal 初衷是在线程并…

《C和指针》笔记3:置一和清零

在C语言中&#xff0c;移位运算符<<和>>表示二进制数左移或右移&#xff0c;我们可以利用它们很轻松地对变量中单个位进行置一和清零。 我们可以规定变量二进制数最右边一位是第0位&#xff0c;定义bit_number是0&#xff0c;对应地&#xff0c;从最右边一位往左数…

iOS开发系列--打造自己的“美图秀秀”

--绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果&#xff0c;一方面得益于成功系统的设计&#xff0c;另一方面得益于它强大的开发框架。今天我们将围绕iOS中两大图形、图像绘图框架进行介绍&#xff1a;Quartz 2D绘制2D图形和Core Image中强大的滤镜功能…

【OpenVinoSharp】基于C#和OpenVINO部署PaddleOCR模型

基于C#和OpenVINO部署PaddleOCR模型 1.OpenVINO2.PaddleOCRPP-OCRv2PP-OCRv3 3.模型下载与转换3.1 Detection model3.2 Direction classifier3.3 Recognition model 4.OpenVinoSharp安装4.1 获取OpenVinoSharp源码4.2 配置OpenVINO依赖项 5. PaddleOCR5. 1模型推理C#实现&#…

Kali 安装中文输入法(超详细)

1.进入管理员下的控制台。 2. 输入密码后点击“授权”。 3.在控制台内输入下面的命令。 apt install fcitx 4.敲击回车后会开始安装&#xff0c;这里输入“y”。 5.回车后会继续进行安装&#xff0c;安装完成后会自动停止。 6.输入下面的命令来安装google输入法。 apt-get in…

【Python】【进阶篇】22、Django模板加载与响应

目录 22、Django模板加载与响应1. 什么是模板1) 模板的配置2) 修改settings配置文件 2. 模板的加载与响应方式3. render方法详解 22、Django模板加载与响应 在前文章节《Django模板系统》中&#xff0c;我们对 Django 的模板系统有了初步的认识&#xff0c;在本章我们将重点讲…