声明:此篇仅是个人学习使用,不涉及商业利益,参考众多前辈的资料,会加参考文献,感谢前辈们的宝贵经验,我只是做笔记。
OpenGL有很多扩展库,例如gl、glu、glut、aux、wgl、glfw、glad、glew、freeglut、gltools、sdl、sfml、glx、agl等等
VS配置OpenGL环境
- 1.确保自己的电脑连上了网
- 2.打开VS,新建一个空项目,注意项目路径要有效且不含空格
- 3.按下ctrl+shift+A创建一个源文件
4.写上主函数,F5跑一下看有没有问题
5.没有问题的话,用VS带的NuGet完成openGL的配置
- 6.在下方出现的程序包管理器控制台中输入:Install-Package nupengl.core
——————-
1.gl–OpenGL核心库[1]
- 基本介绍
115个基本函数,以“gl”为前缀,函数用于常规的、核心的图形处理,如建立各种几何模型,产生光照效果,进行反走样及投影变化等。
核心库中的函数主要可以分为以下几类函数[2]:
分类 | 举例 |
---|---|
绘制基本几何图元 | glBegain()、glEnd()、glNormal*()、glVertex*() |
矩阵操作、几何变换和投影变换 | 矩阵入栈函数glPushMatrix()、矩阵出栈 函数glPopMatrix()、装载矩阵函数glLoadMatrix()、矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport() |
颜色、光照和材质 | 颜色模式函数glColor*()、glIndex*(),光照效果的函数glLight*() 、glLightModel*()和材质效果函数glMaterial() |
显示列表 | 创建、结束、生成、删除和调用显示列表的函数glNewList()、 glEndList()、glGenLists()、glCallList()和glDeleteLists() |
纹理映射 | 一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、 设置纹理参数glTexParameter*()、纹理环境glTexEnv*()和纹理坐标的函数glTetCoord*() |
特殊效果 | 融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*() |
光栅化、象素操作 | 象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel() |
选择与反馈 | 渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer() |
曲线与曲面的绘制 | 生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*() |
状态设置与查询 | glGet*()、glEnable()、glGetError() |
2.glu–OpenGL实用程序库[1]
- 基本介绍
43个函数,以“glu”为前缀,这些函数通过调用核心库函数,实现较复杂操作,如纹理映射、坐标变化、网格化、曲线曲面绘制以及二次物体(圆柱、球体)绘制等。 主要包括了以下几种[2]:
分类 | 举例 |
---|---|
辅助纹理贴图 | gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps() |
坐标转换和投影变换 | 定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和 gluUnProject() |
多边形镶嵌工具 | gluNewTess()、 gluDeleteTess()、gluTessCallback()、gluBeginPolygon() gluTessVertex()、gluNextContour()、gluEndPolygon() |
二次曲面绘制工具 | 绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric() |
非均匀有理B样条绘制工具 | 定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty() |
错误反馈工具 | 获取出错信息的字符串gluErrorString() |
3.glu–OpenGL实用程序工具包[1]
- 基本介绍
30多个函数,以“glut”为前缀,提供基于窗口的工具。 如:窗口的初试化、多窗口管理、菜单管理、字体以及较复杂物体的绘制,主要包括了以下几种[2]:
分类 | 举例 |
---|---|
窗口操作 | 窗口初始化、窗口大小、窗口位置等函数glutInit() glutInitDisplayMode() glutInitWindowSize() glutInitWindowPosition() |
回调函数 | 响应刷新消息、键盘消息、鼠标消息、定时器函数等,GlutDisplayFunc() glutPostRedisplay() glutReshapeFunc() glutTimerFunc() glutKeyboardFunc() glutMouseFunc() |
创建复杂的三维物体 | 创建网状体和实心体。如glutSolidSphere()、glutWireSphere() |
菜单函数 | 创建添加菜单的函数GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和glutAttachMenu() |
程序运行函数 | glutMainLoop() |
- 配置
(1)下载压缩包http://pan.baidu.com/s/1eRA2EcE;
(2)解压后得到五个文件,分别为glut.dll、glut32.dll、glut.h、glut.lib、glut32.lib;
(3)如果你的VS默认安装路径,则将glut.h文件拷贝至C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\GL中(新建GL文件夹);
(4)如果你的VS默认安装路径,则将glut.lib、glut32.lib文件拷贝至C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib;
(5)将glut.dll、glut32.dll文件拷贝至C:\Windows\System32,同时也拷贝至C:\Windows\SysWOW64中,保险;
(6)glut库配置完毕。
4.aux–OpenGL编程辅助库[1]
- 基本介绍
31个函数,以“aux”为前缀,主要用于窗口管理、输入/输出处理以及绘制简单三锥形体,并不能在所有的OpenGL平台上使用,主要包括了以下几种[2]:
分类 | 举例 |
---|---|
窗口初始化和退出函数 | auxInitDisplayMode()和auxInitPosition() |
窗口处理和时间输入函数 | auxReshapeFunc()、auxKeyFunc()和auxMouseFunc() |
颜色索引装入函数 | auxSetOneColor() |
三维物体绘制函数 | 两种形式网状体和实心体,如绘制立方体auxWireCube()和 auxSolidCube()。以网状体为例,长方体auxWireBox()、环形圆纹面auxWireTorus()、圆柱auxWireCylinder()、二十面体auxWireIcosahedron()、八面体auxWireOctahedron()、四面体auxWireTetrahedron()、十二面体auxWireDodecahedron()、圆锥体auxWireCone()和茶壶auxWireTeapot() |
5.wgl–Window专用库[1]
- 基本介绍
16个函数,用于连接OpenGL和WindowsNT[2].
分类 | 具体 |
---|---|
绘图上下文相关函数 | wglCreateContext(), wglDeleteContext()wglGetCurrentContent() wglGetCurrentDC() wglDeleteContent() |
文字和文本处理函数 | wglUseFontBitmaps()、wglUseFontOutlines() |
覆盖层、地层和主平面层处理函数 | wglCopyContext()、wglCreateLayerPlane()、 wglDescribeLayerPlane()、wglReakizeLayerPlatte() |
其他函数 | wglShareLists()、wglGetProcAddress() |
6.glwf[3]
- 基本介绍
允许我们创建一个OpenGL上下文,定义窗口参数和处理所有我们需要的用户输入,以“glfw”为前缀。
- 配置
(1)下载Source包http://www.glfw.org/download.html;
(2)下载CMake安装包https://cmake.org/download/,并进行安装;
(3)安装好CMake后打开CMake,相关设置如下图(build文件夹是新建的);
(4)点击“Generate”后,点击“Open Project”(电脑上安装了vs便用vs打开了),直接点击“本地windows调试器”;
(5)打开D:\opengl\glfw-3.2.1\build\src\Debug文件夹,将编译成的“glfw3.lib”文件拷贝到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib中;
(6)glfw库配置完毕,测试在Glad库配置步骤里。
7.glad[3]
基本介绍
GLAD是一个开源库,可以管理我们所讨论的所有繁琐的工作。配置
(1)先测试自己电脑显卡支持的OpenGL版本,方法参考
http://blog.csdn.net/so_geili/article/details/51774376;
(2)GLAD与大多数常见的开源库配置设置略有不同。GLAD使用Web服务(http://glad.dav1d.de/),点开网页设置如下图所示;
(3)点开网页中的“GENERATE”,跳转到”GLAD“界面,点击下载压缩包;
(4)解压后GLAD有两个文件夹,将include文件夹中的两个文件拷贝至C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\中(注意不是include\GL);将src文件夹中的”glad.c“拷贝至项目中;
(5)在VS项目属性–>链接器–>输入–>附加依赖项–>编辑–>”opengl32.lib“–>”glfw3.lib”–>确定,将以下代码进行测试,是否链接库成功,如果很多未定义的引用错误,这意味着您没有成功链接GLFW库。
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
return 0;
}
8.gltools
9.glew
10.freeglut
(慢慢来,慢慢积累)
参考文献:
[1]陆枫,何云峰.计算机图形学基础[D],电子工业出版社,2015.
[2]雨琼新星,OpenGL开发库的详细介绍 .http://blog.csdn.net/yqxx/article/details/382519.
[3]Learn OpenGL,https://learnopengl.com.