零基础入门OpenGL之安装配置
Windows10+VS2019+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的学习之路吧!