IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Windows10+VS2019+OpenGL安装配置详解 -> 正文阅读

[移动开发]Windows10+VS2019+OpenGL安装配置详解

零基础入门OpenGL之安装配置

Windows10+VS2019+OpenGL安装配置步骤



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),面向应对各种规模或复杂程度项目的团队。大小:18GB
 Visual 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.65

    glPushMatrix();
    //根据基于火星的坐标进行旋转,并绘制火卫一   
    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.15
    if (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的学习之路吧!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:20:36  更:2021-07-27 16:21:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 17:28:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码