OpenGL简介
作者:追风剑情 发布于:2019-6-1 10:05 分类:OpenGL
OpenGL是一组图形硬件的一种软件接口。
OpenGL体系结构审核委员会(ARB, OpenGL Architecture Reiview Board)。
OpenGL的姊妹API——OpenGL ES
OpenGL是跨平台和可移植的,并且几乎现有的所有3D硬件设备都有对应的OpenGL驱动。
OpenGL 3.0仍然兼容Open GL 2.1
OpenGL 3.1从核心规范中移除了不鼓励使用的特性,同时引入了一个新的OpenGL扩展GL_ARB_compatibility。但,NVIDIA并未在此版本移除任何老旧功能。
OpenGL 3.2废除了GL_ARB_compatibility扩展,取而代之地将OpenGL分成了核心框架和完整框架。核心框架规范将更加精简,并且不包含任何老旧的“不鼓励使用”功能。规范的一致性要求具有核心功能,但将兼容框架列为可选项。
OpenGL允许提供商通过它的扩展机制进行创新。glext.h中包含了所有扩展。
查询支持的扩展 GLint nNum; glGetIntegerv(GL_NUM_EXTENSIONS, &nNum); for(GLint i = 0; i < nNum; i++) { //在Windows中查询交换控制扩展 if (strcmp("WGL_EXT_swap_control", (const char *)glGetStringi(GL_EXTENSIONS, i)) == 0) { wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT"); if (wglSwapIntervalEXT != NULL) wglSwapIntervalEXT(1); } }
在GLTools库中有一个快捷工具包查扩展
int gltIsExtSupported(const char *extension);
如果支持指定的扩展,那么这个函数返回1;反之则返回0。GLTools库包含了一整套OpenGL帮助和实用工具函数。gltools.h文件包含所有的函数原型。
每个扩展都有一个由3个字母组成的前缀,这个前缀标识了这个扩展的来源。
OpenGL扩展识别示例 | |
前缀 | 提供商 |
SGI_ | Silicon Graphics |
ATI_ | ATI Technologies |
AMD_ | Advanced Micro Devices |
NV_ | NVIDIA |
IBM_ | IBM |
WGL_ | Microsoft |
EXT_ | Cross-Vendor |
ARB_ | ARB Approved |
EXT_前缀表明这个扩展(假定)是与特定提供商无关的,并且得到众多的支持。
AUX
OpenGL的辅助函数库,具有跨平台性,缺点是缺乏基本的GUI特性。
GLUT
AUX渐渐被GLUT函数库所取代。GLUT代表OpenGL实用工具箱(OpenGL utility toolkit,不要与标准的GLU——OpenGL utility library,即OpenGL实用库混淆)。GLUT免费但不开源已被freeglut函数库所取代。
官网下载 freeglut
下载 freeglut-MSVC.zip
下载 freeglut-MinGW.zip
下载 freeglut-3.0.0.tar.gz
也可以通过Visual Studio NuGet包管理器安装
GLEW
OpenGL API主要通过扩展机制来发展。这种扩展机制能够用来获得指向任何加入OpenGL 1.0之后任何版本核心的OpenGL函数的函数指针。有一个实现OpenGL 3.0 API完全存取的简单方法,就是使用一个自动初始化所有新函数指针并包含所需类型定义、常量和枚举值的扩展加载库。不止一种这样的扩展加载库可供选择,其中一种维护最好的开源库是GLEW。通过驱动程序使用这种库来初始化全部可用的OpenGL功能并不太容易。我们需要在项目中添加一个单独的C源文件及头文件,并且在程序启动时调用一个单独的初始化函数。为了使事情更简单,GLEW被预先封装在了GLTools库中,实际上,GLTools库就是基于GLEW库的。
GitHub GLEW
下载 GLEW
下载 glew-2.1.0-win32.zip
也可以通过Visual Studio NuGet包管理器安装
GLTools
GLTools包含一个用于操作矩阵和向量的3D数学库,并依靠GLEW获得OpenGL 3.3中用来产生和渲染一些简单3D对象的函数,以及对视觉平截头体、相机类和变换矩阵进行管理的函数的充分支持。(这个库是作者自己写的)
GitHub GLTools源码
在Visual Studio中编译GLTools源码
1、增加预处理宏_CRT_SECURE_NO_DEPRECATE
2、添加glew静态库、freeglut静态库(右键->添加->现有项...)
OpenGL变量类型和最小位宽 | ||
OpenGL数据类型 | 最小位宽 | 描述 |
GLboolean | 1 | 布尔值,真或假 |
GLbyte | 8 | 有符号8位整数 |
GLubyte | 8 | 无符号8位整数 |
GLchar | 8 | 字符串 |
GLshort | 16 | 有符号16位整数 |
GLushort | 16 | 无符号16位整数 |
GLhalf | 16 | 半精度浮点值 |
GLint | 32 | 有符号32位整数 |
GLuint | 32 | 无符号32位整数 |
GLsize | 32 | 无符号32位整数 |
GLenum | 32 | 无符号32位整数 |
GLfloat | 32 | 32位浮点数 |
GLclampf | 32 | [0, 1]范围内的32位浮点数 |
GLbitfield | 32 | 32位 |
GLdouble | 64 | 64位双精度数 |
GLclampd | 64 | [0, 1]范围内的64位双精度数 |
GLint64 | 64 | 有符号64位整数 |
GLuint64 | 64 | 无符号64位整数 |
GLsizeiptr | 本地指针大小 | 无符号整数 |
GLintptr | 本地指针大小 | 有符号整数 |
GLsync | 本地指针大小 | 同步对象句柄 |
//声明数组
GLshort shorts[10];
//声明一个长度为10的指向GLdouble类型变量的指针数组
GLdouble *doubles[10];
OpenGL错误
GLenum glGetError(void);
需要在一个循环中调用glGetError函数,持续检查错误标志,直到返回值是GL_NO_ERROR为止。
OpenGL错误代码 | ||
错误代码 | 描述 | |
GL_INVALID_ENUM | 枚举参数超出范围 | |
GL_INVALID_VALUE |
数值参数超出范围 | |
GL_INVALID_OPERATION | 在当前的状态中操作非法 | |
GL_OUT_OF_MEMORY | 没有足够的内存来执行这条命令 | |
GL_NO_ERROR | 没有错误出现 |
查询OpenGL的生产商和版本号
const GLubyte *glGetString(GLenum name);
这个函数返回一个静态的字符串,描述GL函数库中所请求的信息。
设置渲染品质
void glHint(GLenum target, GLenum mode);
此函数允许我们指定偏重于视觉质量还是速度。target参数指定希望修改的行为类型,mode参数告诉OpenGL我们最为关心的是什么,例如更快的渲染速度还是最好的输出质量,或者保持默认。注意,因为所有的OpenGL实现都不要求必须在glHint函数的调用上保持一致。在OpenGL中,这是唯一一个行为完全依赖生产商的函数。
OpenGL状态机
是否混合、是否进行正面或背面剔除、是否进行深度测试等,在OpenGL中全部由状态进行控制。
//开启某个状态
void glEnable(GLenum capability);
//关闭某个状态
void glDisable(GLenum capability);
//例如,打开深度测试
glEnable(GL_DEPTH_TEST);
//例如,关闭深度测试
glDisable(GL_DEPTH_TEST);
//判断状态是否打开
GLboolean glIsEnabled(GLenum capability);
并不是所有的状态变量都只是简单地打开或关闭。
OpenGL提供了一组查询函数,可以查询布尔、整型、单精度浮点型和双精度浮点型变量的值:
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum pname, GLboolean *params);
void glGetFloatv(GLenum pname, GLboolean *params);
void glGetIntegerv(GLenum pname, GLboolean *params);
每个函数都返回单个值,或者返回一个数组。
Visual Studio环境配置
1、配置静态链接库
查看电脑GPU信息
更多学习资料
https://learnopengl-cn.github.io/
《OpenGL超级宝典》源码下载地址
标签: OpenGL
日历
最新文章
随机文章
热门文章
分类
存档
- 2024年11月(3)
- 2024年10月(5)
- 2024年9月(3)
- 2024年8月(3)
- 2024年7月(11)
- 2024年6月(3)
- 2024年5月(9)
- 2024年4月(10)
- 2024年3月(11)
- 2024年2月(24)
- 2024年1月(12)
- 2023年12月(3)
- 2023年11月(9)
- 2023年10月(7)
- 2023年9月(2)
- 2023年8月(7)
- 2023年7月(9)
- 2023年6月(6)
- 2023年5月(7)
- 2023年4月(11)
- 2023年3月(6)
- 2023年2月(11)
- 2023年1月(8)
- 2022年12月(2)
- 2022年11月(4)
- 2022年10月(10)
- 2022年9月(2)
- 2022年8月(13)
- 2022年7月(7)
- 2022年6月(11)
- 2022年5月(18)
- 2022年4月(29)
- 2022年3月(5)
- 2022年2月(6)
- 2022年1月(8)
- 2021年12月(5)
- 2021年11月(3)
- 2021年10月(4)
- 2021年9月(9)
- 2021年8月(14)
- 2021年7月(8)
- 2021年6月(5)
- 2021年5月(2)
- 2021年4月(3)
- 2021年3月(7)
- 2021年2月(2)
- 2021年1月(8)
- 2020年12月(7)
- 2020年11月(2)
- 2020年10月(6)
- 2020年9月(9)
- 2020年8月(10)
- 2020年7月(9)
- 2020年6月(18)
- 2020年5月(4)
- 2020年4月(25)
- 2020年3月(38)
- 2020年1月(21)
- 2019年12月(13)
- 2019年11月(29)
- 2019年10月(44)
- 2019年9月(17)
- 2019年8月(18)
- 2019年7月(25)
- 2019年6月(25)
- 2019年5月(17)
- 2019年4月(10)
- 2019年3月(36)
- 2019年2月(35)
- 2019年1月(28)
- 2018年12月(30)
- 2018年11月(22)
- 2018年10月(4)
- 2018年9月(7)
- 2018年8月(13)
- 2018年7月(13)
- 2018年6月(6)
- 2018年5月(5)
- 2018年4月(13)
- 2018年3月(5)
- 2018年2月(3)
- 2018年1月(8)
- 2017年12月(35)
- 2017年11月(17)
- 2017年10月(16)
- 2017年9月(17)
- 2017年8月(20)
- 2017年7月(34)
- 2017年6月(17)
- 2017年5月(15)
- 2017年4月(32)
- 2017年3月(8)
- 2017年2月(2)
- 2017年1月(5)
- 2016年12月(14)
- 2016年11月(26)
- 2016年10月(12)
- 2016年9月(25)
- 2016年8月(32)
- 2016年7月(14)
- 2016年6月(21)
- 2016年5月(17)
- 2016年4月(13)
- 2016年3月(8)
- 2016年2月(8)
- 2016年1月(18)
- 2015年12月(13)
- 2015年11月(15)
- 2015年10月(12)
- 2015年9月(18)
- 2015年8月(21)
- 2015年7月(35)
- 2015年6月(13)
- 2015年5月(9)
- 2015年4月(4)
- 2015年3月(5)
- 2015年2月(4)
- 2015年1月(13)
- 2014年12月(7)
- 2014年11月(5)
- 2014年10月(4)
- 2014年9月(8)
- 2014年8月(16)
- 2014年7月(26)
- 2014年6月(22)
- 2014年5月(28)
- 2014年4月(15)
友情链接
- Unity官网
- Unity圣典
- Unity在线手册
- Unity中文手册(圣典)
- Unity官方中文论坛
- Unity游戏蛮牛用户文档
- Unity下载存档
- Unity引擎源码下载
- Unity服务
- Unity Ads
- wiki.unity3d
- Visual Studio Code官网
- SenseAR开发文档
- MSDN
- C# 参考
- C# 编程指南
- .NET Framework类库
- .NET 文档
- .NET 开发
- WPF官方文档
- uLua
- xLua
- SharpZipLib
- Protobuf-net
- Protobuf.js
- OpenSSL
- OPEN CASCADE
- JSON
- MessagePack
- C在线工具
- 游戏蛮牛
- GreenVPN
- 聚合数据
- 热云
- 融云
- 腾讯云
- 腾讯开放平台
- 腾讯游戏服务
- 腾讯游戏开发者平台
- 腾讯课堂
- 微信开放平台
- 腾讯实时音视频
- 腾讯即时通信IM
- 微信公众平台技术文档
- 白鹭引擎官网
- 白鹭引擎开放平台
- 白鹭引擎开发文档
- FairyGUI编辑器
- PureMVC-TypeScript
- 讯飞开放平台
- 亲加通讯云
- Cygwin
- Mono开发者联盟
- Scut游戏服务器引擎
- KBEngine游戏服务器引擎
- Photon游戏服务器引擎
- 码云
- SharpSvn
- 腾讯bugly
- 4399原创平台
- 开源中国
- Firebase
- Firebase-Admob-Unity
- google-services-unity
- Firebase SDK for Unity
- Google-Firebase-SDK
- AppsFlyer SDK
- android-repository
- CQASO
- Facebook开发者平台
- gradle下载
- GradleBuildTool下载
- Android Developers
- Google中国开发者
- AndroidDevTools
- Android社区
- Android开发工具
- Google Play Games Services
- Google商店
- Google APIs for Android
- 金钱豹VPN
- TouchSense SDK
- MakeHuman
- Online RSA Key Converter
- Windows UWP应用
- Visual Studio For Unity
- Open CASCADE Technology
- 慕课网
- 阿里云服务器ECS
- 在线免费文字转语音系统
- AI Studio
- 网云穿
- 百度网盘开放平台
- 迅捷画图
- 菜鸟工具
- [CSDN] 程序员研修院
- 华为人脸识别
- 百度AR导航导览SDK
- 海康威视官网
- 海康开放平台
- 海康SDK下载
- git download
交流QQ群
-
Flash游戏设计: 86184192
Unity游戏设计: 171855449
游戏设计订阅号