零基础入门OpenGL之安装配置

Windows10+VS2019+OpenGL安装配置步骤


Windows10+VS2019+OpenGL安装配置步骤

    • **零基础入门OpenGL之安装配置**
    • VS2019简介
    • VS2019的分类
      • 1.个人版:Visual Studio Community
      • 2.专业版:Visual Studio Professional
      • 3.企业版:Visual Studio Enterprise
  • OpenGL简介
  • 一、VS2019下载与安装
    • 1.Visual Studio 2019下载
    • 2.相关配置安装
    • 3.安装位置一般情况可以选择默认的位置(也可以根据自己需求存放其他位置,这里我更改为到F盘存放),随后点击安装即可!
    • 4.安装完成进入界面
    • 5.创建项目,并命名(这里我命名为main),并指定存储位置
    • 6.创建完成之后如图所示
  • 二、OpenGL安装配置
    • 1.下载GLFW
    • 2.下载FreeGLUT
    • 3.安装nupengl
    • 4.导入依赖
    • 5.测试用例

VS2019简介

Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。
Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本,基于.NET Framework 4.8 。

VS2019的分类

1.个人版:Visual Studio Community

 该版本仅供个人使用免费、功能完备的可扩展工具,面向构建非企业应用程序的开发人员。visual studio 2019 官方正式版授权:免费版,软件大小:4.89GB,语言:简体中文;Visual Studio 2019 是微软开发的一款功能强大的IDE编辑器,visual studio 2019可完美开发;Windows、iOS 和 Android 程序,并且visual studio 2019 已内置安卓模拟器,让开发人员不必为跨平台的程序运行所烦恼。

2.专业版:Visual Studio Professional

 售价1,199 美元,专业开发人员工具和服务,面向单个开发人员或小团队。visual studio 2019 旗舰版 官方正式版授权:免费版,软件大小:7.79GB语言:简体中文;visual studio 2019 旗舰版功能强大,可直接编辑windows android ios 应用程序,新版本内含集成的设计器、编辑器、调试器和探查器,采用 C 、C++、JavaScript、Python、TypeScript、Visual Basic、F 等进行编码。

3.企业版:Visual Studio Enterprise

 售价5,999 美元,具备高级功能的企业级解决方案(包括高级测试和 DevOps),面向应对各种规模或复杂程度项目的团队。大小:18GBVisual Studio 使你能够准确、高效地编写代码,并且不会丢失当前的文件上下文。 可以轻松地放大到详细信息,例如调用结构、相关函数、签入和测试状态。 还可以利用功能来重构、识别和修复代码问题。通过利用 Microsoft、合作伙伴和社区提供的工具、控件和模板,扩展 Visual Studio 功能。 通过构建扩展来根据喜好进行进一步操作和自定义。在任意提供商(包括 GitHub)托管的 Git 存储库中管理源代码。 也可以使用 Azure DevOps 管理整个项目的代码、bug 和工作项。使用 Visual Studio 调试程序,通过代码的历史数据可跨语言快速查找并修复 bug,无论是在本地还是远程。 利用分析工具发现并诊断性能问题,无需离开调试工作流。

OpenGL简介

OpenGL是一种图形应用程序编程接口(Application Programming Interface,API)。它是一种可以对图形硬件设备特性进行访问的软件库,OpenGL被设计为一个现代化的、硬件无关的接口,因此我们可以在不考虑计算机操作系统或窗口系统的前提下,在多种不同的图形硬件系统上,完全通过软件的方式实现OpenGL的接口。OpenGL自身并不包含任何执行窗口任务或者处理用户输入的函数,也没有提供任何用于表达三维物理模型,或者读取图像文件(例如PNG、JPEG文件)的操作,一个用来渲染图像的OpenGL程序需要执行的主要操作如下:

. 从OpenGL的几何图元中设置数据,用于构建形状
. 使用不同的着色器(shader)对输入的图元数据执行计算操作,判断它们的位置,颜色,以及其他渲染属性
. 将输入图元的数学描述转换为与屏幕位置对应的像素片元(fragment)。这一步也成为光栅化(rasterization),OpenGL的片元若最终渲染为图像,那它就是像素。
. 最后,针对光栅化过程产生的片元,执行片元着色器(fragment shader),从而决定这个片元的最终颜色和位置
. 如果有必要,还需要对每个片元执行一些额外的操作,例如判断片元对应的对象是否可见,或者将片元的颜色与当前屏幕位置的颜色进行融合


本文是对Windows10环境下,安装Visual Studio 2019,对OpenGL进行环境搭建配置

一、VS2019下载与安装

1.Visual Studio 2019下载

链接地址:https://visualstudio.microsoft.com/zh-hans/vs/

2.相关配置安装

根据自己需要,可以选择相关需求配置(可以多选备用自己将来需求),这里单纯的想用VS2019写C/C++代码,选择C++的桌面开发即可

3.安装位置一般情况可以选择默认的位置(也可以根据自己需求存放其他位置,这里我更改为到F盘存放),随后点击安装即可!

4.安装完成进入界面

5.创建项目,并命名(这里我命名为main),并指定存储位置

6.创建完成之后如图所示


可能会有弹出需要你登录的界面,这里可以直接注册一个Microsoft账号就可以了,注册是免费的!如果你不登录Microsoft账号的话你只能试用30天,登录了Microsoft账号就可以永久使用啦!

二、OpenGL安装配置

1.下载GLFW

GLFW下载链接:http://glew.sourceforge.net/
(此处下载的是32-bit Windows binaries,因为VS2019是在本地x86环境下编译的)

解压下载好的压缩文件,将include文件夹中的GL文件夹内的头文件,全部拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\include\GL中(这里的VS_document是自己创建存放的文件夹命名)

将glew-2.1.0-win32\glew-2.1.0\bin\Release下的Win32内的dll文件拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\bin的Hostx64的x86文件夹内和Hostx86的x86文件夹内
同理,将glew-2.1.0-win32\glew-2.1.0\bin\Release下的x64内的dll文件拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\bin的Hostx64的x64文件夹内和Hostx86的x64文件夹内

将glew-2.1.0-win32\glew-2.1.0\lib\Release下的Win32内的lib文件拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\lib的x86文件夹内
将glew-2.1.0-win32\glew-2.1.0\lib\Release下的x64内的lib文件拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\lib的x64文件夹内

2.下载FreeGLUT

下载FreeGLUT链接地址:https://www.transmissionzero.co.uk/software/freeglut-devel/


将下载后的文件解压,将include文件夹内的GL文件夹内的其他头文件全部拷贝到F:\VS_document\VC\Tools\MSVC\14.29.30037\include\GL中

同理,将lib文件和dll文件按照glew的安装文件夹路径分别安装即可。
下面便是配置文件存放到GL下的配置

3.安装nupengl

进入VS2019,点击项目,管理NuGet程序包,在左边浏览栏目里搜索nupengl,安装它们

4.导入依赖

进入VS2019,右键之前创建的main项目(右侧),选择属性->链接器->输入,将freeglut.lib;glew32.lib;glfw3.lib;OpenGL32.lib;复制到附加依赖项中

5.测试用例

代码如下:


#include <windows.h>
#include <gl/glut.h>
#include <math.h>
#define GL_PI 3.1415f         float fMoonRot = 0.0f;
float fAdamRot = 0.0f;
float fEarthRot = 0.0f;
float fMarsRot = 0.0f;
float fMarsatellite1 = 0.0f;
float fMarsatellite2 = 0.0f;
float fHesperRot = 0.0f;
float fJupiterRot = 0.0f;
float fSaturnRot = 0.0f;
float fSaturn1 = 0.0f;
float fUranusRot = 0.0f;
float fNeptuneRot = 0.0f;GLfloat  whiteLight[] = { 0.2f,0.2f,0.2f,1.0f };
GLfloat  lightPos[] = { 0.0f,0.0f,0.0f,1.0f };void sun()
{//绘制太阳    glColor3ub(255, 50, 0);glDisable(GL_LIGHTING);   //关闭光源      glutSolidSphere(25.0f, 200.0f, 200.0f);glEnable(GL_LIGHTING);    //启动光源    glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
}
void Adam()
{//绘制水星  glPushMatrix();glColor3ub(0, 0, 255);glRotatef(fAdamRot, 0.0f, 1.0f, 0.0f);glTranslatef(30.0f, 0.0f, 0.0f);glutSolidSphere(2.0f, 200.0f, 200.0f);       //水星半径是地球的40% 即2  fAdamRot += 4.152f;                        //水星公转周期为地球24.08% ,即4.152  if (fAdamRot >= 365.0f)fAdamRot = 0.0f;glPopMatrix();
}
void Hesper()
{//绘制金星  glPushMatrix();glColor3ub(255, 215, 0);glRotatef(fHesperRot, 0.0f, 1.0f, 0.0f);glTranslatef(40.0f, 0.0f, 0.0f);glutSolidSphere(4.75f, 200.0f, 200.0f);       //金星半径是地球的95% 即4.75  fHesperRot += 1.62f;                        //金星公转周期为地球61.56% ,即1.62  if (fHesperRot >= 365.0f)fHesperRot = 0.0f;glPopMatrix();
}
void Earth_Moon()
{//绘制地球,所有运行参数以地球为标准  glPushMatrix();glColor3ub(0, 0, 255);glRotatef(fEarthRot, 0.0f, 1.0f, 0.0f);glTranslatef(55.0f, 0.0f, 0.0f);           //设地球周期365  glutSolidSphere(5.0f, 20.0f, 20.0f);       //设地球半径5  //根据基于地球的坐标进行旋转,并绘制月球      glColor3ub(200, 200, 200);glRotatef(fMoonRot, 0.0f, 1.0f, 0.0f);glTranslatef(5.0f, 0.0f, 0.0f);          // 不断平移fMoonRot += 13.3f;                     //月球的公转周期 27.3 天  365/27.3==13.3  if (fMoonRot >= 365.0f)                 // 月球半径是地球的3/11   即1.363     fMoonRot = 0.0f;glutSolidSphere(1.363f, 200.0f, 200.0f);glPopMatrix();                         //出栈后值变化,要在下一次循环中才有效   fEarthRot += 1.0f;if (fEarthRot >= 365.0f)fEarthRot = 0.0f;
}void Mars()
{//绘制火星glPushMatrix();glColor3ub(255, 0, 0);glRotatef(fMarsRot, 0.0f, 1.0f, 0.0f);glTranslatef(65.0f, 0.0f, 0.0f);glutSolidSphere(2.65f, 200.0f, 200.0f);       //火星半径是地球的53% 即2.65glPushMatrix();//根据基于火星的坐标进行旋转,并绘制火卫一   glColor3ub(255, 100, 100);glRotatef(fMarsatellite1, 0.0f, 1.0f, 0.0f);glTranslatef(2.0f, 0.0f, 2.0f);fMarsatellite1 += 13.3f;if (fMarsatellite1 >= 365.0f)fMarsatellite1 = 0.0f;glutSolidSphere(0.963f, 200.0f, 200.0f);glPopMatrix();glPushMatrix();//根据基于火星的坐标进行旋转,并绘制火卫二     glColor3ub(255, 200, 200);glRotatef(fMarsatellite2, 0.0f, 1.0f, 0.0f);glTranslatef(-3.0f, 0.0f, -3.0f);fMarsatellite2 += 13.3f;if (fMarsatellite2 >= 365.0f)fMarsatellite2 = 0.0f;glutSolidSphere(1.20f, 200.0f, 200.0f);glPopMatrix();fMarsRot += 0.5f;                           //火星公转周期为地球2倍if (fMarsRot >= 365.0f)fMarsRot = 0.0f;glPopMatrix();
}void Jupiter()
{//绘制木星  glPushMatrix();glColor3ub(200, 100, 0);glRotatef(fJupiterRot, 0.0f, 1.0f, 0.0f);glTranslatef(100.0f, 0.0f, 0.0f);glutSolidSphere(17.0f, 200.0f, 200.0f);       //木星半径是地球的11.21倍 即56.05  为了美观,定为17 glPushMatrix();glColor3ub(250, 180, 0);glRotatef(70.0f, 1.0f, 0.0f, 0.0f);             //环旋转70度 glutSolidTorus(1.42, 20, 10, 100);             //效果上看,第一个参数是圆环的宽度glPopMatrix();fJupiterRot += 0.15f;                     //木星公转周期为地球11.87倍 ,即0.084  为了明显,设为0.15if (fJupiterRot >= 365.0f)fJupiterRot = 0.0f;glPopMatrix();
}
void Saturn()
{//绘制土星  glPushMatrix();glColor3ub(73, 60, 32);glRotatef(fSaturnRot, 0.0f, 1.0f, 0.0f);glTranslatef(148.0f, 0.0f, 0.0f);glutSolidSphere(15.0f, 200.0f, 200.0f);       //土星半径是地球的9.45倍 即47.25 为了美观,定为15  //绘制土卫一glPushMatrix();glColor3ub(255, 200, 200);glRotatef(fSaturn1, 0.0f, 1.0f, 0.0f);glTranslatef(-17.0f, 0.0f, -17.0f);fSaturn1 += 6.4f;if (fSaturn1 >= 365.0f)fSaturn1 = 0.0f;glutSolidSphere(1.20f, 200.0f, 200.0f);glPopMatrix();glPushMatrix();glColor3ub(200, 200, 100);glRotatef(70.0f, 1.0f, 0.0f, 0.0f);             //环旋转70度 glutSolidTorus(1.42, 25, 10, 100);             //效果上看,第一个参数是圆环的宽度glPopMatrix();fSaturnRot += 0.03f;                        //土星公转周期为地球29.47倍 ,即0.03  if (fSaturnRot >= 365.0f)fSaturnRot = 0.0f;glPopMatrix();
}
void UranusRot()
{//绘制天王星  glPushMatrix();glColor3ub(0, 180, 100);glRotatef(fUranusRot, 0.0f, 1.0f, 0.0f);glTranslatef(202.0f, 0.0f, 0.0f);glutSolidSphere(15.0f, 200.0f, 200.0f);       //天王星半径是地球的倍 即4.01,即15    glPushMatrix();glColor3ub(0, 100, 0);glRotatef(150.0f, 1.0f, 0.0f, 0.0f);             //环旋转度 glutSolidTorus(1.0, 20, 10, 100);             //效果上看,第一个参数是圆环的宽度glPopMatrix();fUranusRot += 0.03f;                        //天王星公转周期为地球84.06倍 ,即0.0124  if (fUranusRot >= 365.0f)fUranusRot = 0.0f;glPopMatrix();
}void Neptune()
{//绘制海王星  glPushMatrix();glColor3ub(0, 0, 215);glRotatef(fNeptuneRot, 0.0f, 1.0f, 0.0f);glTranslatef(240.0f, 0.0f, 0.0f);glutSolidSphere(19.45f, 200.0f, 200.0f);       //海王星半径是地球的倍 即3.89,即19.45    fNeptuneRot += 2.17f;                       //天王星公转周期为地球46%倍 ,即2.17  if (fUranusRot >= 365.0f)fNeptuneRot = 0.0f;glPopMatrix();
}
void RenderScene(void)
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushMatrix();glTranslatef(0.0f, 0.0f, -300.0f);sun();Adam();Hesper();Earth_Moon();Mars();Jupiter();Saturn();UranusRot();Neptune();glPopMatrix();glutSwapBuffers();
}
void ChangeSize(GLsizei w, GLsizei h)
{GLfloat fAspect;if (h == 0) h = 1;glViewport(0, 0, w, h);fAspect = (GLfloat)w / (GLfloat)h;glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0f, fAspect, 1.0, 4000);glMatrixMode(GL_MODELVIEW);glLoadIdentity();
}void SetupRC(void)
{glEnable(GL_DEPTH_TEST);glEnable(GL_COLOR_MATERIAL);glClearColor(0.0f, 0.0f, 0.0f, 1.0f);glEnable(GL_LIGHTING);                             //启动光源      glLightModelfv(GL_LIGHT_MODEL_AMBIENT, whiteLight); //使用whiteLght所指定的环境光      glLightfv(GL_LIGHT0, GL_POSITION, lightPos);         //0号光源的位置      glEnable(GL_LIGHT0);
}
void TimerFunc(int value)
{glutPostRedisplay();glutTimerFunc(100, TimerFunc, 1);
}int main(int argc, char* argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);glutInitWindowSize(800, 600);glutCreateWindow("Orthographic Projection");glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);SetupRC();glutTimerFunc(250, TimerFunc, 1); //自动动画,计时器   glutMainLoop();return 0;
}

该部分代码是绘制星球的示例效果


以上便是在windows10环境下,安装VS2019+OpenGL的详细步骤,到此安装配置完成,开启OpenGL的学习之路吧!

Windows10+VS2019+OpenGL安装配置详解相关推荐

  1. zabbix安装配置详解(一)

    zabbix安装配置详解(一) 一.nginx安装 1.必要软件准备: 为了支持rewrite功能,我们需要安装pcre: #yum install pcre-* 需要ssl的支持,如果不需要ssl支 ...

  2. lvs keepalived 安装配置详解【转】

    lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...

  3. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

  4. Python3 环境搭建、pycharm安装配置详解、新建Python项目(新手小白版Windows系统)

    Python3 环境搭建 .pycharm安装配置详解 window系统上环境搭建: 一.环境搭建,下载Python (Python 3.8为例) 二.pycharm的下载与安装 window系统上环 ...

  5. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  6. 深入分析redis cluster 集群安装配置详解

    Redis 集群是一个提供在多个Redis间节点间共享数据的程序集.redis3.0以前,只支持主从同步的,如果主的挂了,写入就成问题了.3.0出来后就可以很好帮我们解决这个问题. 目前redis 3 ...

  7. Burp Suite安装配置详解(附Java 环境安装)

    Burp Suite安装配置详解 1.Java 安装与环境配置详解 1.0 下载Java SDK 1.8 最新版 2.0 配置Java 环境变量 2.Burp Suite 安装详解 2.0 下载Bur ...

  8. 硬实时RTLinux安装配置详解 (一):准备工作

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: 硬实时RTlinux系统配置 1. Linux内核下载 2. 下载与Linu ...

  9. 硬实时RTLinux安装配置详解 (二):编译运行RTLinux

    硬实时RTlinux系统配置 4. 配置RTLinux 4.1 配置Patch 4.2 配置RTLinux内核 4.3. 编译Rtlinux内核 4.4 制作initramfs启动引导: 5. 大功告 ...

  10. Linux安装消息队列IBM MQ 7.5开发版安装配置详解

    消息队列IBM MQ 7.5开发版安装配置详解 文章目录 消息队列IBM MQ 7.5开发版安装配置详解 前言 一.什么是IBM MQ? 二.安装前准备 1.安装前准备 2.安装MQ Server 3 ...

最新文章

  1. SEL重磅:重新认识菌根:菌根真的如普遍认为的那样重要吗?
  2. Microbiome:宏蛋白质组揭示健康人肠道菌群的功能,离真相更近了一步
  3. matplotlib色彩填充之fill、fill_between
  4. 【云炬大学生创业基础笔记】第1章第2节关于什么是创客的讨论
  5. linux查看fifo内容,linux 有名管道(FIFO)
  6. 浅谈二次元场景特征和绘制手法
  7. java中$和 的区别详解_Mybatis之#{}与${}的区别使用详解
  8. php 去掉nbsp,php 正则去掉pnbsp;/p 空格 nbsp;
  9. 快速使用js验证输入的数字类型
  10. python16进制字节序_Python-十六进制数据传递与接收
  11. 康末otdr测试软件丢失,利用OTDR快速定位光缆线路故障-测试测量-与非网
  12. NRF52840 DFU APP使用noinit ram方法
  13. 三体中的思想实验二:黑暗森林(上)
  14. “2014网站移动化大赛”已启动,个人网站全面进入“移动”时代?
  15. 终于有人把前端鉴权讲明白了
  16. ensp中路由器(华为设备)的基本使用
  17. 任意地址读写驱动提权(cred、VDSO、modprobe_path、core_pattern、修改内核指针提权)
  18. 体验篇 - 部署以太坊私有链 (PoA)
  19. ssh备考-05Struts2 Action类下的重要API(原生Servlet的API、跳转配置、框架自身的数据封装、自定义拦截器)
  20. MATLAB 如何在二维矩阵中快速找到最大值的位置

热门文章

  1. Ubuntu配置及美化篇
  2. 《实战 Java 高并发程序设计》笔记——第1章 走入并行世界(一)
  3. 计算机专业毕设论文题目大全(一)
  4. Flash Cs4安装之后打不开(启动界面一闪而过)
  5. Matlab实现均值滤波
  6. 开源项目工时系统_自研工时管理系统,究竟好不好? | AceTeamwork
  7. 【转载】20种PLC对应Modbus地址表
  8. Python整理PEER所下载的地震波源数据——提取地震波至txt+生成地震波反应谱
  9. OpenSesame for Mac(ae项目格式编辑插件)
  10. 十天学会单片机(1)单片机的认识、各进制、门运算、c51