opengl 订阅
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。 展开全文
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。
信息
外文名
Open Graphics Library
平    台
Windows、类Unix、Linux、MacOS
是否开源
软件类别
开放库文件
介    绍
三维图形处理库,属于工业标准
中文名
开放图形库(英文Open Graphics Library的缩写)
最近更新日期
2018-07-30
OpenGL简介
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。OpenGL的高效实现(利用了图形加速硬件)存在于Windows,部分UNIX平台和Mac OS。这些实现一般由显示设备厂商提供,而且非常依赖于该厂商提供的硬件。开放源代码库Mesa是一个纯基于软件的图形API,它的代码兼容于OpenGL。但是,由于许可证的原因,它只声称是一个“非常相似”的API。OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。根据OpenGL官方网站,2002年6月的ARB投票成员包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems,Microsoft曾是创立成员之一,但已于2003年3月退出。
收起全文
精华内容
参与话题
问答
  • OpenGL

    万人学习 2016-12-24 20:43:02
    课程涵盖了OpenGL开发的方方面面,对开发中经常用到的开发知识点进行讲解,从实战的角度进行编码设计. 第1章-环境建立 第2章-基础图元 第3章-三维世界 第4章-纹理多彩世界 第5章-显存的分配-优化 第6章-场景控制...
  • OpenGL初级入门视频教程(2018)

    千人学习 2017-12-01 17:50:56
    OpenGL入门课程主要带领完全没有OpenGL基础的同学,入门OpenGL世界,课程内容包括OpenGL萌谷手册、搭建OpenGL绘图框架、图元绘制、矩阵操作、3D模型绘制、光照的封装、键盘鼠标事件、向量等。
  • OpenGL萌谷手册视频教程

    万人学习 2017-12-09 08:50:20
    OpenGL视频培训课程,本课程带领完全没有基础的学员打下坚实的OpenGL学习基础,内容包括OPenGL框架搭建、矩阵、光照、纹理、3D模型绘制、键盘鼠标、模型渲染、纹理贴图等详细内容。
  • OpenGL安装(适用于VS2017)

    千次阅读 2019-03-15 09:28:59
    OpenGL安装(适用于VS2017) 这个是参考网上的博客,感谢前人的贡献,文末加上了一些我个人踩的坑 参考博客:在VS2017中安装OpenGL - 我有点帅哦 - 博客园 利用VS2017下的包管理软件Nuget下载安装OpenGL库 优点:...

    OpenGL安装(适用于VS2017)

    这个是参考网上的博客,感谢前人的贡献,文末加上了一些我个人踩的坑
    参考博客:在VS2017中安装OpenGL - 我有点帅哦 - 博客园


    利用VS2017下的包管理软件Nuget下载安装OpenGL库
    优点:安装很简单
    缺点:每次创建项目都要重新下载OpenGL库

    1. VS2017创建C++控制台程序,最好选择空项目(否则可能会有其他的错误)

    2. 创建好了项目,点击菜单栏的“项目”下的“管理Nuget程序包”

    3. “浏览”下输入NupenGL,两个都点击安装

    4. 新建一个C++文件

    5. 输入下面的Demo,运行F5

    #include <windows.h>  
    #include <GL/gl.h>  
    #include <GL/glu.h>  
    #include <GL/glut.h>  
    
    #include <cstdlib>  
    #include <cstdio>  
    #include <cmath>  
    
    void display(void) {
    	GLubyte fly[] = {
    		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    		0x03,0x80,0x01,0xC0,0x06,0xC0,0x03,0x60,
    		0x04,0x60,0x06,0x20,0x04,0x30,0x0C,0x20,
    		0x04,0x18,0x18,0x20,0x04,0x0C,0x30,0x20,
    
    		0x04,0x06,0x60,0x20,0x04,0x03,0xC0,0x22,
    		0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
    		0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
    		0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22,
    
    		0x66,0x01,0x80,0x66,0x33,0x01,0x80,0xCC,
    		0x19,0x81,0x81,0x98,0x0C,0xC1,0x83,0x30,
    		0x07,0xe1,0x87,0xe0,0x03,0x3f,0xfc,0xc0,
    		0x03,0x31,0x8c,0xc0,0x03,0x33,0xCC,0xC0,
    
    		0x06,0x64,0x26,0x60,0x0c,0xcc,0x33,0x30,
    		0x18,0xcc,0x33,0x18,0x10,0xc4,0x23,0x08,
    		0x10,0x63,0xc6,0x08,0x10,0x30,0x0c,0x08,
    		0x10,0x18,0x18,0x08,0x10,0x00,0x00,0x08,
    	};
    
    	GLubyte halftone[] = {
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    		0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
    	};
    
    	glClear(GL_COLOR_BUFFER_BIT);
    	glColor3f(1.0, 1.0, 1.0);
    	glRectf(25.0, 25.0, 125.0, 125.0);
    	glEnable(GL_POLYGON_STIPPLE);
    	glPolygonStipple(fly);
    	glRectf(125.0, 25.0, 225.0, 125.0);
    	glPolygonStipple(halftone);
    	glRectf(225.0, 25.0, 325.0, 125.0);
    	glDisable(GL_POLYGON_STIPPLE);
    	glFlush();
    }
    
    void init(void) {
    	glClearColor(0.0, 0.0, 0.0, 0.0);
    	glShadeModel(GL_FLAT);
    }
    
    void reshape(int w, int h) {
    	glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
    }
    
    int main(int argc, char** argv) {
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    	glutInitWindowSize(350, 150);
    	glutCreateWindow(argv[0]);
    	init();
    	glutDisplayFunc(display);
    	glutReshapeFunc(reshape);
    	glutMainLoop();
    	return 0;
    }
    

    效果图如下

    可能遇到的小问题

    1. 创建项目时windows控制台项目,而非空项目可能遇到如下问题
    错误	C1010	在查找预编译头时遇到意外的文件结尾。
    是否忘记了向源中添加“#include "pch.h"
    

    最简单的解决方案就是重新创建一个空项目
    2. 在C++一个项目只能存在一个.cpp文件,否则可能会报错
    解决办法:在VS2017项目管理中找到要移除C++文件,右击移除即可

    展开全文
  • openGL

    千次阅读 2016-04-05 17:19:29
    OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。 中文名开放图形库(英文Open...

    OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

    中文名
    开放图形库(英文Open Graphics Library的缩写)
    外文名
    Open Graphics Library
    平    台
    Windows、类Unix、Linux、MacOS
    是否开源
    最近更新日期
    2014年8月11日
    软件类别
    开放库文件

    基本介绍

    OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源娱乐、游戏开发制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。
    OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
    OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95Windows NTUnixLinux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL的顶点数组
    在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。
    OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置法线颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能。
    OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3DLabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。
    目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商和用户的认知程度并不高,未来的OpenGL发展前景迷茫。

    发展历程

    1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。
    1995年OpenGL的1.1版本面市,该版本较1.0性能提高许多,并加入了一些新的功能。包括提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。
    1997年,Windows 95下3D游戏的大量涌现,游戏开发公司迫切需要一个功能强大、兼容性好的3D图形接口,而当时微软公司自己的3D图形接口DirectX 3.0功能却是很糟糕。因而以制作《雷神之锤》等经典3D射击游戏而著名的id公司同其它一些游戏开发公司一同强烈要求微软在Windows 95中加入对OpenGL的支持。微软公司最终在Windows 95的OSR2版和后来的Windows 版本中加入了对OpenGL的支持。这样,不但许多支持OpenGL的电脑3D游戏得到广泛应用,而且许多在3D图形设计软件也可以运用支持OpenGL标准的3D加速卡,大大提高其3D图形的处理速度。
    2003年的7月28日,SGI和ARB公布了OpenGL 1.5。OpenGL 1.5中包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading Language”。OpenGL 1.5的新功包括:顶点Buffer Object、Shadow功能、隐蔽查询、非乘方纹理等。
    2004年8月,OpenGL2.0版本发布~OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。OpenGL2.0支持OpenGL Shading Language、新的shader扩展特性以及其他多项增强特性。
    2008年8月初Khronos工作组在Siggraph 2008大会上宣布了OpenGL 3.0图形接口规范,GLSL1.30 shader语言和其他新增功能将再次对未来开放3D接口发展指明方向。
    OpenGL 3.0 API开发代号为Longs Peak,和以往一样,OpenGL 3.0仍然作为一个开放性和跨平台的3D图形接口标准,在Shader语言盛行的今天,OGL3.0增加了新版本的shader语言:GLSL 1.30,可以充分发挥当前可编程图形硬件的潜能。同时,OGL3.0还引入了一些新的功能,例如顶点矩阵对象,全帧缓存对象功能,32bit浮点纹理和渲染缓存,基于阻塞队列的条件渲染,紧凑行半浮点顶点和像素数据,四个新压缩机制等等。
    2009年3月又公布了升级版新规范OpenGL 3.1,也是这套跨平台免费API有史以来的第九次更新。OpenGL 3.1将此前引入的OpenGL着色语言“GLSL”从1.30版升级到了1.40版,通过改进程序增强了对最新可编程图形硬件的访问,还有更高效的顶点处理、扩展的纹理功能、更弹性的缓冲管理等等。宽泛地讲,OpenGL 3.1在3.0版的基础上对整个API模型体系进行了简化,可大幅提高软件开发效率。
    2009年8月Khronos小组发布了OpenGL 3.2,这是一年以来OpenGL进行的第三次重要升级。该版本仍然延续了OpenGL发展的方向让图形程序开发者能在多种操作系统和平台下更好的利用新的GPU功能。OpenGL3.2版本提升了性能表现、改进了视觉质量、提高了几何图形处理速度,而且使Direct3D程序更容易移植为OpenGL。除OpenGL之外,Khronos还将其开发的其它标准进行了协调改进,以求可以在更广泛的领域提供强大的图形功能和计算生态系统,这些标准包括用于并行计算的OpenCL、用于移动3D图形开发的OpenGL ES和用于网络3D开发的WebGL。
    2010年7月26日发布OpenGL 4.1和OpenGL OpenGL Shading Language 4.10。OpenGL4.1提高视觉密集型应用OpenCL™的互操作性,并继续加速计算剖面为核心的支持和兼容性第一次推出的OpenGL 3.2,使开发人员能够使用一个简化的API或保留向后兼容现有的OpenGL代码,这取决于他们的市场需求。
    Khronos旗下的OpenGL ARB(Architecture Review Board)工作组推出了GLSL 1.5OpenGLShading Language(OpenGL着色语言)的升级版,以及在OpenGL3.2框架下推出了两个新功能,可以让开发者在开发新程序时能够在使用流水线内核特性或兼容性特性之间做出选择,其中兼容性特性会提供与旧版OpenGL之间的兼容性。
    2011年8月9日在温哥华举行的SIGGRAPH 2011大会上Khronos发布了新的OpenGL 4.2标准细节,对于支持现有硬件的API加入了部分新的支持特性。和OpenGL 4.1一样,OpenGL 4.2主要应用于DX11级别硬件如NVIDIA GeForce 400/500,Radeon HD 5000/6000系列显卡,不过NVIDIA的开发者社区之前曾经表示部分特性可通过扩展功能在最老支持OpenGL2/DX9级别的硬件上实现。

    特点功能

    OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有七大功能:
    1.建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。
    2.变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转缩放镜像四种变换,投影变换有平行投影(又称正射投影)和透视投 影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。
    3.颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。
    4.光照和材质设置:OpenGL光有自发光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和高光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
    5:纹理映射(Texture Mapping)。利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
    6:位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、抗锯齿(反走样)(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。
    7:双缓存动画(Double Buffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
    此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。从而实现了消隐算法。OpenGL设备运用,目前瑞芯微2918芯片和英伟达芯片Tegra2 就是采用OpenGL 2.0技术进行图形处理,而基于瑞芯微2918芯片方案代表是台电T760和微蜂X7平板电脑所采用到。

    高级功能

    OpenGL被设计为只有输出的,所以它只提供渲染功能。核心API没有窗口系统、音频、打印、键盘/鼠标或其它输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的操作系统,允许跨平台开发。然而,有些整合于原生窗口系统的东西需要允许和宿主系统交互。这通过下列附加API实现:
    * GLX - X11(包括透明的网络)
    * WGL - Microsoft Windows
    * AGL - Apple MacOS
    另外,GLUT库能够以可移植的方式提供基本的窗口功能。

    规范发布

    2012年8月7日,Khronos Group组织也公布了桌面版OpenGL的最新版本4.3,也算是给这个3D API二十岁生日的最好礼物。 1992年,OpenGL 1.0诞生,此后历经二十年发展,先后衍生了四个世代,功能日渐强大,普及范围也是越来越广。虽然它没有微软DirectX在游戏中那么风光,但也在专业图形等领域成为众多开发者的首选,而且陆续衍生了OpenGL ES、OpenCL、WebGL等一帮同门师兄弟,生态系统日臻完善。

    发展现状

    编辑
    OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广OpenGL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用OpenGL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; OpenGL在这些领域占据着统治地位。最后,开放源码社区(尤其是Mesa项目)一直致力于为任何类型的计算机(无论它们是否使用微软的操作系统)提供OpenGL支持。
    目前,国外的三维游戏开发技术,从创意、策划、研究开发与实现,到游戏的运营与维护,都有大量的知识值得学习和摸索。由于 Linux 操作系统平台的大力推广,基于Linux 的各种应用软件也不断壮大,因此基于跨平台图形库的跨平台三维游戏开发也越来越受重视。OpenGL(open graphics library)是一种独立的平台无关的三维图形开发库,在各种语言下进行主框架开发并结合应用OpenGL 函数都可以开发出三维游戏。但是由于框架开发的平台相关性使游戏无法跨平台编译运行,因此glut+OpenGL 的方式成了一种很好的选择。但是在对复杂框架和各种媒体的支持方面,glut 并不理想。在Linux 下可以采用FLTK 等框架平台技术实现包括按钮在内的比较复杂的框架功能,但是需要专门的Linux 开发环境,众多的Window 环境下的KDE 爱好者明显对此无法适从。相反,SDL(Simple DirectMedia Layer)作为免费的跨平台多媒体应用编程接口,已经被人们广泛用于开发二维游戏,其优秀的消息框架支持、文件支持和声音支持等都使得它成为能与微软DirectX 匹敌的最为成熟的技术之一。
    截止2012年8月7日,Khronos Group公布了最新的OpenGL 4.3规范。

    有关技术

    编辑

    扩展

    当独立厂商创建一种新技术时,OpenGL标准允许它们通过“扩展”的方法提供所扩展的功能。然后一个扩展就分成两部分发布:包含扩展函数原型的头文件和作为厂商的设备驱动。每个厂商有一个用于命名它们的新函数和常量的字母缩写。例如,NVIDIA的缩写(“NV”)用于定义它们的专有函数“glCombinerPara-
    meterfvNV()”和它们的常量“GL_NORMAL_MAP_NV”。如果多于一个厂商同意实现相同的扩展功能,那么就用缩写“EXT”。进一步,架构评审委员会可能“祝福”这个扩展,那么这就被称为一个“标准扩展”,使用缩写“ARB”。第一个ARB扩展是GL_ARB_multitexture。根据官方扩展提升路径,多纹理不再是可选实现的ARB扩展,它已经是OpenGL 1.4以后的核心API的一部分。
    几个库创建在OpenGL之上,提供了OpenGL本身没有的功能:
    1)GLU
    2)GLUT
    3)GLUI
    4)GLEW
    5)GLEE[1] 
    6)FREEGLUT(GLUT已经于1998年不再更新了。于是就有了freeglut)
    特别是,OpenGL Performer库——由SGI开发并可以在IRIXLinuxMicrosoft Windows的一些版本上使用,构建于OpenGL,可以创建实时可视化仿真程序。
    当开发者需要使用最新的OpenGL扩展时,他们往往需要使用GLEW或者是GLEE库提供的功能,可以在程序的运行期判断当前硬件是否支持相关的扩展,防止程序崩溃甚至造成硬件损坏。

    绑定

    为了加强它的多语言和多平台特性,已经用很多语言开发了OpenGL的各种绑定和移植。最值得注意的是,Java3D库已经可以利用OpenGL(另一个选择可能是DirectX)作为它的硬件加速了。OpenGL官方网页列出了用于Java、Fortran90、Perl、Pike、PythonAdaVisual Basic的多个绑定。

    规范

    Khronos Group在2009年3月又公布了升级版新规范OpenGL 3.1,也是这套跨平台免费API有史以来的第九次更新。
    OpenGL 3.1将此前引入的OpenGL着色语言“GLSL”从1.30版升级到了1.40版,通过改进程序增强了对最新可编程图形硬件的访问,还有更高效的顶点处理、扩展的纹理功能、更弹性的缓冲管理等等。宽泛地讲,OpenGL 3.1在3.0版的基础上对整个API模型体系进行了简化,可大幅提高软件开发效率。
    OpenGL 3.1主要新特性:Texture Buffer Objects(纹理缓冲对象)、Uniform Buffer Objects(统一缓冲对象)、Signed Normalized Textures(符号正常化纹理)、Primitive Restart(基本元素重启)、Instancing(实例化)、CopyBuffer API(拷贝缓冲接口)……
    与OpenGL 3.1规范同步,OpenGL架构评审委员会(ARB)也发布了一个兼容性扩展,能让开发人员在访问OpenGL 3.1里已经删除的OpenGL 1.x/2.x功能,确保应用程序的全面向下兼容性。
    OpenGL 3.1公布后,业界图形厂商很快予以了大力支持。AMD OpenGL主管Suki Samra表示:“AMD全面用户OpenGL API,会在今后的Radeon和FirePro产品驱动程序中支持OpenGL 3.1。”NVIDIA市场营销副总裁Dan Vivoli表示:“NVIDIA承诺尽快部署OpenGL 3.1,我们也很自豪地在规范公布同一天放出了自己的测试版驱动程序。”
    市场调研机构Jon Peddie Research预测,OpenGL 3.1规范图形硬件的安装规模将超过1亿。AMD、NVIDIA、S3 Graphics的显卡驱动都已经支持OpenGL 3.0。

    相关信息

    编辑
    1995年至1996年,微软实行了一项新计划,以支持在Windows95上运行游戏,目标是把市场扩展到被任天堂和世嘉控制的游戏领域。然而,微软不想用已经在NT上提供的OpenGL技术。微软收购了Rendermorphics,Ltd.并得到他的被称作RealityLab的3D API。经重新整理,微软发布了新的3D API——Direct3D
    微软,推行Direct3D,冻结OpenGL!
    微软当时拒绝了在Window95上支持OpenGL。不止如此,微软采取异常手段收回对OpenGL的MCD驱动接口的支持,以致硬件厂商不得不放弃已经进入最后测试的OpenGL驱动。微软的市场部门开始向游戏开发商、硬件厂商、新闻出版机构推销Direct3D,同时排斥OpenGL。
    API之战!
    Silicon Graphics和很多OpenGL用户都依赖OpenGL创新且高性能的技术。但很明显微软打算用Direct3D代替OpenGL,尽管D3D有很多问题而且不能像OpenGL那样被硬件厂商扩展。Silicon Graphics决定在1996 SIGGRAPH会议上作一项演示。演示证明OpenGL至少和D3D一样快,从而驳倒微软的市场论调。因为OpenGL是业界公认标准,比D3D功能丰富,而且图像质量要高一些,所以演示在计算机图形和游戏开发社区导致了激烈论战。
    游戏开发者要求OpenGL和D3D站在同等地位!
    当技术和市场问题暴露,强烈的支持OpenGL行动开始了。Doom的开发者John Carmack声明拒绝D3D,Chris Hecker在游戏开发杂志上发表了两套API的全面分析,以微软应放弃D3D为结论。游戏开发者先后两次向微软递交请愿书。第一次由56名首席游戏开发者要求微软发行OpenGL MCD驱动,但未成功,因为会让OpenGL与D3D竞争。第二次的公开信由254人签名开始,截止时达到1400人。微软的回答仍是重申旧市场立场。尽管请愿者清楚的要求两套API同等竞争以促进发展,微软却以增加D3D的投资、更加减少OpenGL的投资为回应。
    Fahrenheit——D3D与OpenGL的合并?
    Silicon Graphics,Microsoft, HP,Intel达成协议联合开发下一代3D API——Fahrenheit。但不了了之,因为微软的打算是把OpenGL的技术用到D3D里并且以此之名驱除OpenGL的威胁。(估计DirectX 8 Graphics即是剩下微软独自开发的Fahrenheit,吸收了OpenGL的很多东西。)
    OpenGL豪气不减当年!
    OpenGL依然是唯一能与微软单独控制的D3D对立的API,尽管Silicon Graphics不再以任何微软不能接受的方式推行OpenGL。游戏开发这是独立的,并且很多关键人物在用OpenGL,因此,硬件厂商正努力提高对其支持。D3D仍不能支持高端图像和专业应用,而OpenGL主宰着这些土地。在开放原码社区,Mesa项目正提供独立于微软的OpenGL驱动。
    译者注:表面上好像D3D比OpenGL支持更多的功能,其实由于D3D不支持硬件扩展,如硬件全景阴影,硬件渲染顺序无关半透明材质等新技术根本无法使用,而D3D(特指D3D8)本身提供的功能只有一小部分能在使用HAL且硬件不支持时模拟,你要用大量代码分析硬件能力和采取不同策略。

    展开全文
  • openGL 3D图形和openGL简介

    千次阅读 2017-07-13 20:38:18
    基本概念与说明OpenGL是一个图形API,用来绘制三维物体(也可以是2D物体),OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集。 Android平台下,对于OpenGL ES有一套Java的封装,唯一非Java...

    基本概念与说明

    OpenGL是一个图形API,用来绘制三维物体(也可以是2D物体),OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集。
    Android平台下,对于OpenGL ES有一套Java的封装,唯一非Java的部分就是GLSL脚本(GLSL,OpenGL Shader Language,即着色器语言)
    OpenGL ES 2.0 支持可编程管线
    OpenGL 的基本形状是三角形,无论是绘制形状还是填充,都是对于图形进行操作
    着色器语言(GLSL)主要包括两部分:Vertex shader(定点着色器,负责定点位置与坐标变换,即决定显示哪个部分,以何种位置/姿态显示),Fragment shader(片元着色器,负责纹理的填充与转换,即决定显示成什么样子)
    任何复杂的3D渲染效果都是通过变换,着色,纹理,混合这4种方式有效组合得到的。
    一些需要掌握的概念:投影,视口(ViewPort),视景体,平截投体,近平面,远平面。
    openGL中有两种投影分别是正投影或叫平行投影,透视投影。正投影物体实际大小在远平面上都是相同的,不会因为距离远近而投影大小发生变化。透视投影,则是离近平面越近投影越大,越远的物体投影越小。

    展开全文
  • QT + OpenGL

    千次阅读 2016-03-21 14:30:26
    OpenGL


    方式一

    使用QT 自带的OpenGL库



    方式二

    使用外部的 OpenGL库



    OpenGL

    1 OpenGL ES 和 Unity3D 是什么关系?

    你用 Unity 发布 Android, iOS 的游戏, 那他就调用和绑定 OpenGL ES

    发布 PC 游戏, 就是D3D 或者 OpenGL 。

    OpenGL ES 是一套专为嵌入式设备设计的三维图形开发接口标准。

    OpenGL ES是Unity在现在的Android、ios等类似设备上用来渲染的底层库,是OpenGL的一个子集。OpenGL ES在渲染能力、功耗设计中都考虑了移动设备的特殊性,

    所以现在的移动设备都是基于OpenGL ES 1.1或者2.0来渲染。

    在Windows(MAC、Linux)上,Unity会根据自己跑的平台来决定用DX还是OpenGL,因为是你来做,也会想着尽量能把最好的硬件都利用上,对吧?!

    所以,OpenGL ES跟Unity的关系也就很明了,Unity会根据不同的运行环境,选择不同的渲染库,OpenGL ES是其中的一个库,而已。


    相比D3D,OpenGL最大的好处就是可以支持多个平台,程序部署起来也相对容易。

    在一个Shader大行其道的年代,渲染引擎不支持shader似乎就太说不过去了。

    但有那么多的显卡、尤其是集成显卡就是不支持OpenGL3.0+,比如Intel的集成显卡。



    Data ------> OpenGl ------> 然后开始画图

      |                     |

      |                     |

    塞入              显存


    一个模型:1   2 法线  3 顶点


    传个角度进来          矩阵 * 逆矩阵             旋转    移动

                                                                         |

                                                                         |

                                                                    基准点




     






    
    
    展开全文
  • opengl

    千次阅读 2015-05-02 14:32:44
    1.1 Opengl简介 2 1.2 openGl 的工作方式 3 1.2.1 Opengl 体系结构 3 1.2.2 openGl 流水线 3 1.2.3 OpenGl状态机 4 1.3 OpenGl 操作步骤 4 1.4 OpenGl 组成 4 1.5 OpenGl 数据类型 5 1.6 Open
  • 写给 python 程序员的 OpenGL 教程

    万次阅读 多人点赞 2019-01-26 08:47:24
    OpenGL 是 Open Graphics Library 的简写,意为“开放式图形库”,是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。...
  • OpenGL视频教程

    万人学习 2016-04-26 19:20:35
    初级教程共11个课时,在教程中,我们将从基本的开始,你将学会如何创建窗口,然后,会学到如何创建一个三维的网格? 你会学到如何使用强大的着色器进行编程,如何创建纹理,如何使用光照, 终实现一套完整的渲染...
  • Android C++ OpenGL 教程

    千人学习 2019-02-14 23:05:43
    用纯C++实现Android的OpenGL渲染功能,包括EGL环境创建、EGL线程创建、OpenGL生命周期管理等,会结合SurfaceView和TextureView实现OpenGL的渲染,最终我们会实现一个YUV播放器实例,为音视频开发打下坚实的基础。
  • ### qmake.conf的对OpenGL的配置是: ``` QMAKE_INCDIR_OPENGL = /opt/ArmLinux/opengl/include QMAKE_LIBDIR_OPENGL = /opt/ArmLinux/opengl/lib QMAKE_INCDIR_EGL = $$QMAKE_INCDIR_OPENGL/EGL QMAKE_...
  • OpenGL 安装

    千次阅读 2018-12-23 23:41:24
    OpenGL 是一套由SGI公司发展出来的绘图函数库,它是一组 C 语言的函数,用于 2D 与 3D 图形应用程序的开发上。OpenGL 让程序开发人员不需要考虑到各种显示卡底层运作是否相同的问题,硬件由 OpenGL 核心去沟通,因此...
  • 相比于 OpenGL ES 1.x 系列的固定功能管线,OpenGL ES 2.0 和 OpenGL ES 3.0 都是可编程图形管线。开发者可以自己编写图形管线中的 顶点着色器 和 片段着色器 两个阶段的代码。 二、不同点 OpenGL ES 3.0 是向后...
  • OPENGL

    千次阅读 2010-10-29 20:00:00
    OPENGL常见问题汇总报告
  • OpenGL实现Google地图瓦片的绘制漫游视频培训课程:此次教程所涉及的内容有OpenGL绘制图片、FreeImage加载图片、墨卡托投影、瓦片的金字塔模型、FramebufferObject、地图的移动和缩放优化,采用屏幕瓦片绘制优化、...
  • OpenGL超级宝典 第5版 中文版 pdf

    千次下载 热门讨论 2013-07-21 16:16:45
    OpenGL超级宝典(第5版)》是OpenGL及3D图形编程最好的入门指南,涵盖了使用最新版本的OpenGL进行编程所需要的主要知识。全书分三部分,共16章,另有3个附录。第一部分包括第1章到第7章,介绍如何构建一个使用...
  • OpenGL画圆

    千次阅读 2019-09-17 22:33:02
    画圆: /* 正四边形,正五边形,正六边形,……,直到正n边形,当n越大时,这个图形就越接近圆 当n大到一定程度后,人眼将无法把它跟真正的圆相区别 这时我们已经成功的画出了一个“圆” (注:画圆的方法很多,这里...
  • 升级opengl

    千次阅读 2019-07-10 15:23:10
    有时候用GLFW创建窗口会返回NULL, 原因一般是oepngl版本过低 GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (window == NULL) { cout << "Failed to create GLFW ...
  • OpenGL ES for Android 总览

    千次阅读 2020-01-18 15:36:24
    经过半年的准备OpenGL ES for Android系列文章终于要和大家见面了,在这里定一个小目标-先吸引1000个粉丝,万一实现了呢。写关于OpenGL ES的文章开始是有一些犹豫的,因为OpenGL ES的一些概念非常晦涩难懂,很多需要...
  • VS2019 安装配置OpenGL

    千次阅读 多人点赞 2019-12-10 11:45:37
    二、下载OpenGL包 接下来点击【项目】-----》 【管理NuGet程序包】 点击【浏览】,搜索NupenGL出现如下图: 安装上述两个文件就完成了 三、调试 在cpp文件中输入下边代码运行 #include <iostream&...
  • OpenGL ES for Android 播放视频

    千次阅读 2020-02-05 17:57:52
    为什么要使用OpenGL ES播放视频 我们都知道Android中有VideoView控件可以直接播放视频,既简单又实用,那么为什么我们还要用OpenGL ES来播放视频呢?那是因为使用OpenGL ES可以做更多的酷炫的动效,比如旋转视频、...
  • OPenGL

    千次下载 热门讨论 2008-02-27 16:04:38
    OPenGL OPenGL
  • OpenGL默认的Z坐标轴的方向是垂直窗口向外的,以前用C语言开发OpenGL程序时一直没有出现问题。现在我用C#开发OpenGL程序,却发现默认的Z轴方向是垂直窗口向内,真的搞不懂怎么回事。我没有使用模型变换和投影变换,...
  • VSCode配置OpenGL

    千次阅读 热门讨论 2019-03-06 14:14:25
    原文地址: https://github.com/hu243285237/OpenGL_Study/tree/master/VSCodeConfigOpenGL 第一步: 首先配置C++环境,已配置的可跳过这一步,没配置的点下面链接: ... ...构建...
  • OpenGL介绍

    千次阅读 2018-12-19 16:50:35
    前言:本文章的内容是基于OpenGL教程做的总结。 一.首先要明白OpenGL是什么 Opengl不是一个语言,它通常被认为是一个图形接口库,(我一直都是这么理解的),但更准确地说OpenGL本身并不是API,它仅仅是一个规范。...

空空如也

1 2 3 4 5 ... 20
收藏数 71,858
精华内容 28,743
关键字:

opengl