Open GL的深度缓冲区理解

Open GL的深度缓冲区理解,第1张

深度 :顾名思义,即三维图形坐标中,物体坐标距离观察者(摄像机点)的远近距离描述,也就是3D坐标中的z值。

深度缓冲区 :实质是一块GPU缓存上的内存区域,用于存储每个像素点(显示于屏幕的)的深度值,深度值越大,就离观察者越远。

深度缓冲区存在的意义 :如下图,Open GL若关闭深度测试,在执行位图绘制 *** 作时,先绘制了距离较近的绿色位图,又绘制了距离较远的红色位图,由于绘制顺序的原因,导致实际距离较远的红色位图显示在了上面。有了深度缓冲区,绘制 *** 作的顺序不会影响到显示的层级关系。只要存在深度缓冲区,Open GL都会把像素的深度值写入到深度缓冲区,除非调用glDepthMask(GL_FALSE)禁止写入深度缓冲区。

深度测试 :深度缓冲区(DepthBuffer)和颜⾊色缓存区(ColorBuffer)是对应的。颜色缓存区存储像素的颜⾊信息,而深度缓冲区存储像素的深度信息. 在决定是否绘制⼀一个物体表⾯面时,首先要将表面对应的像素的深度值与当前深度缓冲区中的值进⾏比较。如果大于深度缓冲区中的值,则丢弃这部分,否则利⽤这个像素对应的深度值和颜⾊色值,分别更新深度缓冲区和颜色缓存区. 这个过程称为”深度测试”。

绘制场景前,先清除Open GL状态机中的深度缓冲区与颜色缓冲区,防止之前的绘制场景影响当前要绘制的场景

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

开启深度测试

glEnable(GL_DEPTH_TEST)

清除深度缓冲区,每个像素的默认值为1.0,表示为深度最大值,深度值的范围为0~1,值越小表示越靠近观察者,值越大表示越远离观察者

深度缓冲区的写入开启关闭

下面是未开启深度测试的甜甜圈旋转效果图

开启深度测试的甜甜圈旋转效果图

OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。 OpenGL是个与.硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和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发展前景迷茫。

Open GL是一套计算机图形学的API,也有很多其他类型的API的,比如MS的D3D,OpenGL是一种主流的程序接口。

比如:同样编windows程序,你可以用Borland C++的类库或者VC++的类库。

至于具体的问题,那要看应用的情况了,各有优缺点的。

读取点云这样的问题,直观上要考虑:

1.是不是需要实时处理

2.你的CPU+ 内存有多快

3.硬盘快不快

4.显卡好不好(显存,硬件支持的运算...)

5.进行什么样的处理

6.要什么效果,比如:有没有光照

等等这些因素综合决定

点是图形学最基础的实体,几乎所有的主流图形API肯定都支持的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8326027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存