分类: 电脑/网络 >> 软件
解析:
OpenGL是OpenGraphicsLib的缩写,是一套三维图形处理库,也是该领域的工业标准。计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。
OpenGL就是支持这种转换的程序库,它源于SGI公司为其图形工作站开发的IRISGL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布10版,之后成为工业标准,由成立于1992年的独立财团OpenGLArchitectureReviewBoard(ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己的系统。1995年12月ARB批准了11版本,最新版规范是1999年5月通过的121。
OpenGL被设计成独立于硬件、独立于窗口系统,在各种 *** 作系统的计算机上都可用的,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。
它低端应用上的主要竞争对手是微软公司的Direct3D,该图形库是以COM接口形式提供的,所以较为复杂。另外,微软公司拥有该库版权,目前只在Windows平台上可用。D3D的优势在速度上,但现在的一些低价显卡都能提供很好的OpenGL硬件加速,所以做3D使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面,目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势。微软在WinNT对OpenGL的支持始于351版,在Win9x中的支持始于Win95OEMServiceRelease2。
SGI曾经宣布研发OpenGL++,该图形库最大的特点是面向对象,提供了树形场景支持,大大减少了使用OpenGL处理复杂场景的工作量。后来SGI宣布与微软合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口。此举使大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI称终止合作的原因是微软不肯积极合作,只想把SGI的技术合并进DirectX。
虽然早在WinNT351时代微软就已经实现了它的OpenGL版本,但却不肯在Win95上提供相应的支持。微软称该API适合高端应用,而Win95面向一般消费者,所以用处不大。并且在其Win3x下开发的Wing图表库的基础上搞出了GameSDK,即后来的DirectX库,称这套库是专门为高性能游戏开发设计的。此举在当时的硬件条件下,无疑是非常有道理的,并且很快成为Windows环境下游戏开发的标准API。该库实质上是提供了绕过Windows直接访问显存的途径,从而很好地解决了GDI体系性能方面的不足,但由于是以COM接口形式提供的,所以相当复杂,而稳定性也不是很好。然而也就在这个时期,三维图形加速卡开始走向商用和家用。
之后,随着大批游戏开发人员开始多方呼吁微软积极支持OpenGL,使得微软终于在Win95的OSR2版本里集成了OpenGL,并为以前版本的Win95免费提供单独的OpenGL实现。
玩过 P 图软件的朋友一定对这个功能有所了解,P 图我们可以简单地看做把一个区域的像素按照某一方向进行移动,产生一定形变效果,基于这个原理,我们可以手动实现瘦脸、长腿、瘦腰、大眼、丰胸等等一系列效果,从而达到美颜、美型的目的。
我们将一个区域的像素移走以后,那么用什么来填充这个被"掏空"的区域呢? 答案是, OpenGL 自带插值功能会使用周围的像素对被"掏空"的区域进行插值填充。
回想下 OpenGL 纹理贴图,将图像贴到相对大的区域,就会产生拉伸的效果,贴到相对更小的区域就会产生挤压的效果,这都是借助于 OpenGL 的双线性插值算法实现。
对纹理贴图不了解的同学可以移步: Android OpenGL ES 系统性学习教程
所以,当我们选中一块图像区域进行移动时,OpenGL 纹理贴图时会在移动的方向上产生挤压的效果,而反方向便会产生拉伸效果,从而可以实现对人体部位形变效果。
根据上节讨论的原理,我们把选定位图像区域看成一个圆形,圆形之外的区域不进行偏移形变(不受影响),圆内的区域的像素则是越靠近圆心移动位移相对越大。
如上图所示,BC 表示偏移方向和偏移程度的向量,将圆内的所有像素按照向量 BC 的方向进行一定程度的偏移,像素偏移的强度,和像素与圆心的距离相关,越靠近圆心强度越大。
再回想下纹理贴图(纹理映射)那篇文章,我们只是将图像映射到一个网格(2个三角形组成),这是我们只能对整图做形变,无法做到对如脸部等一小块具体的区域做形变。
以此类比,这个时候我们就需要更多的网格,当网格足够密集,就可以覆盖整张图的全部区域,这个时候我们通过调整网格,可以实现对任意区域的形变,从而手动实现瘦脸、长腿、瘦腰、大眼、丰胸等等效果不在话下。
生成更多的网格实际上是为了能控制一小块网格区域图像的形变,也就是一定范围内网格区域图像的形变,不对这个范围外的图像产生影响。
所以,剩下来的问题就是生成很多网格,然后控制网格结点的偏移,通过简单纹理映射实现 P 图功能。
生成网格及对应的顶点坐标和纹理坐标:
在圆的范围内控制网格结点的偏移,圆形之外的区域不进行偏移形变(不受影响),圆内的区域的像素则是越靠近圆心移动位移相对越大。
纹理贴图使用的 shader,一个常规的纹理采样。
推荐参考项目: >
分类: 电脑/网络 >> 硬件
问题描述:
如题
解析:
OpenGL是OpenGraphicsLib的缩写,是一套三维图形处理库,也是该领域的工业标准。计算机三维图形是指将用数据描述的三维空间通过计算转换成二维图像并显示或打印出来的技术。
OpenGL就是支持这种转换的程序库,它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布10版,后成为工业标准,由成立于1992年的独立财团OpenGL Architecture Review Board (ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。1995年12月ARB批准了11版本,最新版规范是19995通过的121。
OpenGL被设计成独立于硬件,独立于窗口系统的,在运行各种 *** 作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。它低端应用上的主要竞争对手是MS-Direct3D,该图形库是以COM接口形式提供的,所以极为较复杂,稳定性差,另外微软公司拥有该库版权,目前只在Windows平台上可用。D3D的优势在速度上,但现在低价显卡都能提供很好的OpenGL硬件加速,所以做3D使用Direct3D已没有特别的必要,在专业图形处理特别是高端应用方面目前还没有出现以Direct3D技术为基础的例子,而游戏等低端应用也有转向OpenGL的趋势。
微软在Windows NT对OpenGL的支持始于351,在Windows9x中的支持始于Win95 OEM Service Release 2。Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(Installable Client DeviceDriver)驱动程序,有则调用ICD中的例程,否则才用CPU进行计算,所以能利用显示卡的OpenGL加速能力。对开发者来说使用方法并没有区别,只是有ICD驱动时更快些。SGI的版本是纯软件实现不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套库便于调试程序,仍有不少开发者使用。
SGI曾经宣布研发OpenGL++,该图形库最大的特点是面象对象,提供了树形场景支持,大大减省了使用OpenGL处理复杂场景的工作量。后来(1999)SGI宣布与M$合作开发Ferihant,即Windows的下一代图形处理体系,包括DirectX与OpenGL的低级图形处理接口和以场景图支持为特点的高级接口,并且就此停止对其在Windows下的OpenGL实现的支持以示决心。此举世瞩目,大家都以为Windows图形处理快要过上幸福生活了,然而,不久,SGI宣布中止合作,并撤回派出的科学家,Ferihant基本上夭折。SGI 称终止合作的原因是M$不肯积极合作,光想把SGI 的技术合并进DirectX,真正内幕不详。不过以SGI在图形处理界的老大地位来说,还是有几分可信度的,因为M$初支持OpenGL就不积极。
虽然早在WinNT351 时代M$就已经实现了它的OpenGL 版本,但不肯随其Windows95 时提供,称该API 适合高端应用,而Win95面向一般消费者的用不到,并且在其win3x下开发的wing 图表库的基础上搞出了GameSDK,即后来的DirectX 库,称这套库是专门为高性能游戏开发设计的,在当时的硬件条件下,这无疑是非常有道理的,并且很快成为Windows环境下游戏开发的标准API 。该库实质上是提供了绕过Windows 直接访问显存的途径,从而很好的解决了GDI 体系性能方面的不足,但由于是以COM接口形式提供的,所以相当复杂,而稳定性也不是很好,所以有人称Direct3D 是为追求速度而不择手段的公司才用的。然而也就在这个时期,三维图形加速卡开始走向商用和家用,也就是在这时期S3公司以其性价比极高的带三维图形加速的显示芯片、板卡向当时Trident 公司的霸主地位发起了挑战。另外这时实时三维游戏开始流行,以Dos 下的第一人称射击游戏——暗杀希特勒(3d worlf) 大获成功、红极一时ID Sofare 的开始铸辉煌,推出了Doom 、Quake1 ,相信这两个名字在今天(20004) 的游戏圈子里应该是无人不知无不晓吧?199612ID Sofare 的高手John Carmack 在开发下一代三维图形引擎时在其plan 中写上了以下字句:
Direct-3D IM is a horribly broken API It inflicts great pain and suffering on the programmers using it, without returning any significant advantages I don’t think there is ANY market segment that D3D is apropriate for, OpenGL seems to work just fine for everything from quake to softimage There is no good technical reason for the existance of D3D
I’m sure D3D will suck less with each forthing version, but this is an oportunity to just bypass dragging the entire development munity through the messy evolution of an ill-birthed API
此后以他为代表的一大批游戏开发人员开始多方呼吁MS积极支持OpenGL。M$终于在Win95的OSR2版本里集成了OpenGL,并为以前版本的Win95免费提供单独的OpenGL实现。(或许您还不了解这些人的影响力,不知道您听说过以生产Voodoo系统图形加速卡而著称于世的3dfx公司吗?当年Quake的开发者不肯用Voodoo的glide API对voodoo做优化版本,差点没把3dfx吓蒙,于是赶紧搞了一个针对游戏的OpenGL子集:MiniGL,让ID Sofare的人只要在制作OpenGL时只使用MiniGL API做过优化就成,这样Quake总算可以用上voodoo的硬件加速能力了。这样也造就了一个新名词:MCD--MiniGL Client Driver,用于Windows的MiniGL驱动程序,而标准的OpenGL则依靠ICD驱动)。
以上就是关于什么是OpenGL全部的内容,包括:什么是OpenGL、OpenGL 实现修图(P 图)功能、OpenGL 是什么意思,我在显卡里看见的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)