CN117315123A - 基于OpenGL的次序无关透明度的图像渲染方法 - Google Patents

基于OpenGL的次序无关透明度的图像渲染方法 Download PDF

Info

Publication number
CN117315123A
CN117315123A CN202311588087.4A CN202311588087A CN117315123A CN 117315123 A CN117315123 A CN 117315123A CN 202311588087 A CN202311588087 A CN 202311588087A CN 117315123 A CN117315123 A CN 117315123A
Authority
CN
China
Prior art keywords
transparent
color
opaque
rendering
opengl
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311588087.4A
Other languages
English (en)
Inventor
王文广
聂琳
何辰纲
任重
周昆
张泽林
董士崇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianhua Architecture Design Co ltd
Original Assignee
Tianhua Architecture Design Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianhua Architecture Design Co ltd filed Critical Tianhua Architecture Design Co ltd
Priority to CN202311588087.4A priority Critical patent/CN117315123A/zh
Publication of CN117315123A publication Critical patent/CN117315123A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)

Abstract

本发明属于图像处理领域,具体涉及了一种基于OpenGL的次序无关透明度的图像渲染方法,旨在解决基于排序的半透明元素渲染方法的渲染效果鲁棒性较差的问题。本发明包括:对不透明物体渲染,将渲染后的不透明物体的颜色、缓冲至对应的缓冲区;绘制透明物体对应的面片作为透明面片;对透明面片进行渲染并将渲染后的颜色、纹理填充至对应的缓冲区;提取渲染后的透明面片的透明度、深度值,计算其上各像素点的权重,进而得到加权颜色;将透明面片的加权颜色、不透明物体的背景混合,得到透明面片的最终颜色值,并缓存至不透明物体的缓冲区;将不透明物体对应缓冲区缓冲的颜色、纹理进行输出显示。本发明提高了渲染性能,保证了渲染效果的准确性。

Description

基于OpenGL的次序无关透明度的图像渲染方法
技术领域
本发明属于图像处理领域,具体涉及了一种基于OpenGL的次序无关透明度的图像渲染方法、系统及设备。
背景技术
建筑物的场景中经常存在大量的透明或半透明的材质,如玻璃窗户、幕墙等。在传统的渲染方法中,只能按照物体的绘制次序来渲染透明物体,如果物体的绘制次序错误,就会造成透明物体的遮挡关系错误,导致图像渲染的不真实或不准确。
在基于排序的半透明元素渲染方法中,半透明元素按照深度值进行排序,然后按照从前到后的顺序进行混合和渲染。然而,由于需要对所有半透明元素进行排序,处理大量元素时会带来计算和内存开销的增加。排序操作的时间过长,这在面对复杂场景或大量半透明元素时,会严重影响性能。其次,排序后仍然存在深度冲突问题。当多个半透明元素在同一深度处时,排序操作无法解决这些元素之间的混合顺序问题。这会导致混合结果不准确,出现可见的混合错误。此外,排序的方式对于实时渲染场景不够灵活。在实时渲染中,元素的次序可能会动态变化,比如物体的移动、旋转等操作。这就需要频繁进行排序,增加了实时渲染的计算和内存开销。最后,基于排序的方法对于半透明元素之间的相互作用处理较为困难。在有些场景中,半透明元素之间可能存在相互遮挡、相互穿透等复杂交互,而排序操作无法有效处理这种情况。因此,对于复杂场景或特殊效果的渲染,基于排序的半透明元素渲染方法的效果不够好。
发明内容
为了解决现有技术中的上述问题,即为了解决基于排序的半透明元素渲染方法的渲染效果鲁棒性较差的问题,本发明提供了一种基于OpenGL的次序无关透明度的图像渲染方法,所述方法包括:
获取待渲染物体序列;所述序列包括透明物体和不透明物体;
在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
在一种优选的实施方式中,在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区,其方法为:
在OpenGL中,构建所述透明物体对应的透明通道并创建透明帧缓冲区,构建所述不透明物体对应的不透明通道并创建不透明帧缓冲区;创建后,分别将所述透明物体、所述不透明物体缓冲至对应的缓冲区;其中,所述不透明通道附加有一个颜色缓冲区和一个深度缓冲区,所述透明通道附加有纹理缓冲区和两个颜色缓冲区。
所述不透明通道附加的颜色缓冲区用于存储颜色;所述不透明通道附加的深度缓冲区用于存储深度信息;所述透明通道附加的纹理缓冲区用于存储像素加权后的颜色和存储像素的透明度;所述透明通道附加的两个颜色缓冲区分别存储颜色加和值和像素显示阈值。
在一种优选的实施方式中,基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,对所述不透明物体进行渲染之前,还包括对所述不透明物体对应的缓冲区进行配置:
对不透明物体开启并配置深度测试和深度掩码,生成所述不透明帧缓冲对应的深度数据;
关闭所述OpenGL中的混合开关,重置所述不透明通道中的颜色缓冲区和深度缓冲区。
在一种优选的实施方式中,对所述透明面片进行渲染前,还包括:
在对透明面片进行渲染前,关闭深度写入,将所述不透明帧的深度缓冲作为所述透明帧的深度缓冲;所述透明帧中被不透明帧挡住的部分舍弃,不被挡住的部分保留;
清空所述透明帧缓冲的缓冲附件。
在一种优选的实施方式中,对所述不透明物体进行渲染,其方法为:根据设定的RGB值对所述不透明物体对应的各像素点进行渲染。
在一种优选的实施方式中,计算渲染后的透明面片上各像素点的加权颜色,其方法为:
weight = alpha * max(0.001, 3500* pow(1 - FragCoord.z, 3.0))
FragColor = vec4(color.rgb * alpha, alpha) * weight
其中,weight表示透明面片上的像素点的权重;alpha表示透明面片的原生透明度;max表示取最大值函数;0.001表示阈值;FragCoord.z表示透明面片的像素点在输出空间的深度值,取值范围[0,1],其中,1代表无穷远,0代表相机位置;vec4代表一个4维向量;color.rgb表示透明面片的原生rgb颜色值;FragColor表示权重计算后的像素点上的颜色。
在一种优选的实施方式中,将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,其方法为:
其中,source表示透明面片的加权颜色,source.r、source.g、source.b和source.a分别表示透明面片对应的加权颜色的四个分量;destination表示不透明物体背景的颜色,destination.r、destination.g、destination.b和destination.a分别表示不透明物体背景的颜色的四个分量;result表示最终颜色值。
本发明的第二方面,提出了一种基于OpenGL的次序无关透明度的图像渲染系统,所述系统包括:
图像获取模块,用于获取待渲染的图像序列;所述图像序列中的每一张图像为包含透明物体与不透明物体的建筑场景图像;
缓冲区创建模块:用于提取所述图像序列各图像中的透明物体、不透明物体;并在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
第一渲染模块,用于对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
第二渲染模块,用于绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
权重颜色计算模块:对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
数据混合模块,用于将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
结果输出模块,用于将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
本发明的第三方面,提出了一种电子设备,包括:
至少一个处理器;以及与至少一个所述处理器通信连接的存储器;其中,
所述存储器存储有可被所述处理器执行的指令,所述指令用于被所述处理器执行以实现上述的基于OpenGL的次序无关透明度的图像渲染方法。
本发明的第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于被所述计算机执行以实现上述的基于OpenGL的次序无关透明度的图像渲染方法。
本发明的有益效果:
(1)相较于传统的排序半透明元素的方式,基于OpenGL的次序无关透明度的图像渲染方法在处理大量半透明元素时具有更高的计算效率。它避免了对半透明元素进行排序的开销,从而提高了渲染性能。
(2) 该方法适用于各种复杂场景,包括有大量半透明元素的场景以及复杂的遮挡关系,无论几何复杂度或者半透明元素数量多少,该方法都能够有效地进行混合和渲染,具有很好的适应性,同时保证了渲染效果的准确性。
(3)本发明采用基于面积的近似混合方式来计算权重值,能够在不排序的情况下获得较好的混合效果。混合后的图像具有较高的视觉一致性,保持了较好的光照效果、颜色饱和度和透明度变化。同时,在渲染复杂场景时,该方法能够准确处理半透明元素的深度关系,避免了深度冲突和绘制错误。
(4)本发明允许开发人员根据实际需求对权重计算和混合方式进行调整和优化。可以根据不同的透明度分布情况、场景特点和性能要求,灵活选择适应的权重计算方法和混合方式,以获得更好的渲染效果。
(5)本发明基于OpenGL的实现方法中,可以借助现有的图形硬件加速与渲染管线来实现该方法。通过合理利用顶点属性和片段属性,以及片段着色器和帧缓冲对象的操作,可以相对简单地实现方法的核心步骤,降低了实现难度。
(6)本发明与现有的图形渲染技术和工具具有较好的兼容性,无论是基于OpenGL还是其他图形渲染框架,该方法都能够结合现有渲染管线和渲染流程,实现半透明元素的混合和渲染。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本发明实施例的一种基于OpenGL的次序无关透明度的图像渲染方法的流程示意图;
图2是本发明实施例的一种基于OpenGL的次序无关透明度的图像渲染方法各步骤进行展开详述的简单流程图;
图3是本发明实施例的一种基于OpenGL的次序无关透明度的图像渲染方法的建筑物渲染后的渲染结果示意图;
图4是用于实现本申请方法、系统、设备实施例的服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本发明的第一实施例的一种基于OpenGL的次序无关透明度的图像渲染方法,如图1,本方法包括以下步骤:
获取待渲染物体序列;所述序列包括透明物体和不透明物体;
在OpenGL中,创建透明物体、不透明物体的缓冲区;
对不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
绘制透明物体对应的面片,作为透明面片;结合不透明物体的深度缓冲,对透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
将透明面片的加权颜色、不透明物体的背景混合,得到透明面片的最终颜色值,并缓存至不透明物体的缓冲区;
将不透明物体对应缓冲区缓冲的颜色、纹理挂载到OpenGL的输出帧进行输出显示,渲染完成。
为了更清晰地对本发明基于OpenGL的次序无关透明度的图像渲染方法进行说明,下面结合附图2,对本发明方法一种实施例中各步骤进行展开详述。
获取待渲染物体序列;所述序列包括透明物体和不透明物体;
提取所述物体序列中的透明物体、不透明物体;并在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
在本实施例中,在OpenGL中,构建所述透明物体对应的透明通道并创建透明帧缓冲区(transparentFBO),构建所述不透明物体对应的不透明通道并创建不透明帧缓冲区(opaqueFBO);创建后,分别将所述透明物体、所述不透明物体缓冲至对应的缓冲区;其中,所述不透明通道附加有一个颜色缓冲区(opaqueTexture)和一个深度缓冲区(depthTexture),所述透明通道附加有纹理缓冲区和两个颜色缓冲区。所述不透明通道附加的颜色缓冲区用于存储颜色;所述不透明通道附加的深度缓冲区用于存储深度信息;所述透明通道附加的纹理缓冲区用于存储像素加权后的颜色和存储像素的透明度;所述透明通道附加的两个颜色缓冲区分别存储颜色加和值(accumTexture)和像素显示阈值(revealTexture)。
对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
在本实施例中,对所述不透明物体进行渲染之前,还包括对所述不透明物体对应的缓冲区进行配置,具体为:对不透明物体开启并配置深度测试和深度掩码,生成所述不透明帧缓冲对应的深度数据;关闭所述OpenGL中的混合开关,防止透明数据对颜色的影响,重置所述不透明通道中的颜色缓冲区和深度缓冲区。
配置后进行不透明物体的渲染,不透明物体只需要照常进行简单渲染即可(具体的,对不透明物体进行渲染的方法为:根据设定的RGB值对所述不透明物体对应的各像素点进行渲染),数据存储(渲染)在不透明帧缓冲中,作为后续混合的基底,因为透明物体绝对不会透过不透明物体。
绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
在本实施例中,对所述透明面片进行渲染前,还包括:在对透明面片进行渲染前,关闭深度写入,对于任意透明对象,不会被距离观察者更近的物体完全遮挡,同时为了不透明物体的深度信息不会被透明物体的信息影响,所以需要关闭深度写入。
将所述不透明帧的深度缓冲作为所述透明帧的深度缓冲;所述透明帧中被不透明帧挡住的部分舍弃,不被挡住的部分保留;清空所述透明帧缓冲的缓冲附件。
对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色(通过权重值计算对于屏幕上的每一个片段的加权颜色);
在本实施例中,计算渲染后的透明面片上各像素点的加权颜色,其方法为:
weight = alpha * max(0.001, 3500* pow(1 - FragCoord.z, 3.0))
FragColor = vec4(color.rgb * alpha, alpha) * weight
其中,weight表示透明面片上的像素点的权重;alpha表示透明面片的原生透明度;max表示取最大值函数;0.001表示阈值;FragCoord.z表示透明面片的像素点在输出空间的深度值,取值范围[0,1],其中,1代表无穷远,0代表相机位置;vec4代表一个4维向量;color.rgb表示透明面片的原生rgb颜色值;FragColor表示权重计算后的像素点上的颜色。
该权重根据面片的透明度和当前位置的深度值z进行计算。透明度越大(越不透明),对结果的影响越大、当前深度离观察者越近,则影响也越大,反之亦然。
与传统的权重计算公式不同,建筑场景中透明度区别较大,因此不必对极小透明度的情况进行权重扩大,直接使用原始透明度进行权重配比,与此同时减少了数据运算,最终在保证运行效果的前提下优化了运行速度。
基于权重计算加权颜色的方法是一种快速且高性能的混合方法,适用于需要快速而准确地渲染复杂场景中的半透明元素。它通过基于像素的权重值进行混合操作来实现正确的渲染效果。然而,在具体应用时需要根据实际情况进行参数调整和优化,以获得最佳的渲染结果。
将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
在本实施例中,透明面片的加权颜色是由渲染后的透明面片上各像素点的加权颜色累加得到的。
在本实施例中,混合的具体方法为:
其中,source表示透明面片的加权颜色,source.r、source.g、source.b和source.a分别表示透明面片对应的加权颜色的四个分量;destination表示不透明物体背景的颜色,destination.r、destination.g、destination.b和destination.a分别表示不透明物体背景的颜色的四个分量;result表示最终颜色值。
将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
在本实施例中,对建筑物渲染完成后得到的渲染结果的示意图如图3所示。
本方法基于面片的rgba颜色值与深度值z近似混合方式来计算权重值,从而避免了排序或深度排序的开销。它能够快速准确地计算出半透明元素的权重值,保持了较好的混合效果。本方法采用基于权重的混合方式来实现半透明元素的混合。通过根据权重值对不同元素进行不同程度的混合,可以保持较好的图像质量和渲染效果。混合方式的选择对最终的混合结果具有重要影响,本发明在混合方式的选择上进行了优化。本方法在基于OpenGL的实现方法中,本发明充分利用了图形硬件加速和渲染管线的支持。通过合理利用顶点属性和片段属性,以及片段着色器和帧缓冲对象的操作,可以实现方法的核心步骤。这使得方法能够在实时渲染的应用中得到快速而准确的混合和渲染由于本方法不依赖于元素的绘制次序,可以轻松适应不同的绘制顺序,从而提高了方法的灵活性和适应性。这种独立性使得该方法能够在不同场景的渲染中得到广泛应用。综上所述,基于权重的次序无关透明度算法具有高效性、适用性广、良好的图像质量、灵活性、易于实现和兼容性强等优点。这些优点使得该算法成为渲染复杂场景中半透明元素混合和渲染的有力工具,为实时图形渲染和计算机图形学领域的应用提供了一种高质量且高效的解决方案。
上述实施例中虽然将各个步骤按照上述先后次序的方式进行了描述,但是本领域技术人员可以理解,为了实现本实施例的效果,不同的步骤之间不必按照这样的次序执行,其可以同时(并行)执行或以颠倒的次序执行,这些简单的变化都在本发明的保护范围之内。
另外,本实施例中还提供了一些其他的半透明元素渲染方法:(1)基于深度排序的透明度混合:这种方法首先对所有半透明元素进行深度排序,然后根据深度值从前到后进行混合。这种方法可以解决深度冲突的问题,并保持较好的混合效果。然而,对于复杂场景和大量半透明元素,深度排序的开销仍然较高。(2)基于材质属性的混合:该方法通过半透明元素的材质属性,如透明度和漫反射颜色等,来进行混合计算。不同的元素根据其材质属性产生不同的混合效果。这种方法可以实现一定程度的混合效果,但对于复杂场景和大量半透明元素的情况,精确计算混合效果的开销较大。(3)基于像素覆盖的透明度混合:与基于面积的近似混合类似,这种方法也是根据半透明元素在屏幕上的像素覆盖面积来计算权重值。不同的是,它可以使用一些优化算法,如屏幕空间技术,通过对屏幕像素的采样来加速混合计算。这种方法可以在一定程度上提高性能,但可能会牺牲一定的渲染质量。以上是一些常见的替代方案,它们在解决半透明元素混合和渲染方面具有一定的优势和限制。但与本发明的基于权重的次序无关透明度算法相比,这些替代方案可能在性能、混合效果、易用性和适应性等方面存在差异。
本发明第二实施例提供一种基于OpenGL的次序无关透明度的图像渲染系统,所述系统包括:
图像获取模块,用于获取待渲染的图像序列;所述图像序列中的每一张图像为包含透明物体与不透明物体的建筑场景图像;
缓冲区创建模块:用于提取所述图像序列各图像中的透明物体、不透明物体;并在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
第一渲染模块,用于对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
第二渲染模块,用于绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
权重颜色计算模块,用于对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
数据混合模块,用于将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
结果输出模块,用于将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
所属技术领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统的具体工作过程及有关说明,可以参考前述方法实施例中的对应过程,在此不再赘述。
需要说明的是,上述实施例提供的基于OpenGL的次序无关透明度的图像渲染系统,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。
本发明第三实施例的一种基于OpenGL的次序无关透明度的图像渲染的电子设备,包括:
至少一个处理器;以及与至少一个所述处理器通信连接的存储器;其中,
所述存储器存储有可被所述处理器执行的指令,所述指令用于被所述处理器执行以实现上述的基于OpenGL的次序无关透明度的图像渲染方法。
本发明第四实施例的一种基于OpenGL的次序无关透明度的图像渲染的计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于被所述计算机执行以实现上述的基于OpenGL的次序无关透明度的图像渲染方法。
所属技术领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的存储装置、处理装置的具体工作过程及有关说明,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域技术人员应该能够意识到,结合本文中所公开的实施例描述的各示例的模块、方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,软件模块、方法步骤对应的程序可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。为了清楚地说明电子硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以电子硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
下面参考图4,其示出了用于实现本申请方法、系统、设备实施例的服务器的计算机系统的结构示意图。图4示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图4所示,计算机系统包括中央处理单元(CPU,Central Processing Unit)601,其可以根据存储在只读存储器(ROM,Read Only Memory)602中的程序或者从存储部分608加载到随机访问存储器(RAM,Random Access Memory)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O,Input/Output)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT,Cathode Ray Tube)、液晶显示器(LCD,Liquid Crystal Display)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN(局域网,Local AreaNetwork)卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
术语“第一”、“第二”等是用于区别类似的对象,而不是用于描述或表示特定的顺序或先后次序。
术语“包括”或者任何其它类似用语旨在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备/装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者还包括这些过程、方法、物品或者设备/装置所固有的要素。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征做出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

Claims (10)

1.一种基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,所述方法包括:
获取待渲染物体序列;所述待渲染物体序列包括透明物体和不透明物体;
在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
2.根据权利要求1所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区,其方法为:
在OpenGL中,构建所述透明物体对应的透明通道并创建透明帧缓冲区,构建所述不透明物体对应的不透明通道并创建不透明帧缓冲区;创建后,分别将所述透明物体、所述不透明物体缓冲至对应的缓冲区;其中,所述不透明通道附加有一个颜色缓冲区和一个深度缓冲区,所述透明通道附加有纹理缓冲区和两个颜色缓冲区;
所述不透明通道附加的颜色缓冲区用于存储颜色;所述不透明通道附加的深度缓冲区用于存储深度信息;所述透明通道附加的纹理缓冲区用于存储像素加权后的颜色和存储像素的透明度;所述透明通道附加的两个颜色缓冲区分别存储颜色加和值和像素显示阈值。
3.根据权利要求2所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,对所述不透明物体进行渲染之前,还包括对所述不透明物体对应的缓冲区进行配置:
对不透明物体开启深度测试和深度掩码处理,生成所述不透明帧缓冲对应的深度数据;
关闭所述OpenGL中的混合开关,重置所述不透明通道中的颜色缓冲区和深度缓冲区。
4.根据权利要求2所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,对所述透明面片进行渲染前,还包括:
在对所述透明面片进行渲染前,关闭深度写入,将所述不透明帧的深度缓冲作为所述透明帧的深度缓冲;所述透明帧中被不透明帧挡住的部分舍弃,不被挡住的部分保留;
清空所述透明帧缓冲的缓冲附件。
5.根据权利要求4所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,对所述不透明物体进行渲染,其方法为:根据设定的RGB值对所述不透明物体对应的各像素点进行渲染。
6.根据权利要求4所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,计算渲染后的透明面片上各像素点的加权颜色,其方法为:
weight = alpha * max(0.001, 3500* pow(1 - FragCoord.z, 3.0))
FragColor = vec4(color.rgb * alpha, alpha) * weight
其中,weight表示透明面片上的像素点的权重;alpha表示透明面片的原生透明度;max表示取最大值函数;0.001表示阈值;FragCoord.z表示透明面片的像素点在输出空间的深度值,取值范围[0,1],其中,1代表无穷远,0代表相机位置;vec4代表一个4维向量;color.rgb表示透明面片的原生rgb颜色值;FragColor表示权重计算后的像素点上的颜色。
7.根据权利要求6所述的基于OpenGL的次序无关透明度的图像渲染方法,其特征在于,将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,其方法为:
其中,source表示透明面片的加权颜色,source.r、source.g、source.b和source.a分别表示透明面片对应的加权颜色的红、绿、蓝和透明度的四个分量;destination表示不透明物体背景的颜色,destination.r、destination.g、destination.b和destination.a分别表示不透明物体背景颜色的红、绿、蓝和透明度的四个分量;result表示最终颜色值。
8.一种基于OpenGL的次序无关透明度的图像渲染系统,其特征在于,所述系统包括:
图像获取模块,用于获取待渲染的图像序列;所述图像序列中的每一张图像为包含透明物体与不透明物体的建筑场景图像;
缓冲区创建模块:用于提取所述图像序列各图像中的透明物体、不透明物体;并在OpenGL中,创建所述透明物体、所述不透明物体的缓冲区;
第一渲染模块,用于对所述不透明物体进行渲染,并将渲染后的不透明物体对应的颜色、深度缓冲至对应的缓冲区;
第二渲染模块,用于绘制所述透明物体对应的面片,作为透明面片;结合所述不透明物体的深度缓冲,对所述透明面片进行渲染并将渲染后的透明面片的颜色、纹理填充至对应的缓冲区;
权重颜色计算模块:对渲染后的透明面片,提取其对应的透明度、深度值,计算其上各像素点的权重;根据所述权重,计算其上各像素点的加权颜色,进而得到其对应的加权颜色;
数据混合模块,用于将所述透明面片的加权颜色、所述不透明物体的背景混合,得到所述透明面片的最终颜色值,并缓存至所述不透明物体的缓冲区;
结果输出模块,用于将所述不透明物体对应缓冲区缓冲的颜色、纹理挂载到所述OpenGL的输出帧进行输出显示,渲染完成。
9.一种基于OpenGL的次序无关透明度的图像渲染设备,其特征在于,包括:
至少一个处理器;以及
与至少一个所述处理器通信连接的存储器;其中,
所述存储器存储有可被所述处理器执行的指令,所述指令用于被所述处理器执行以实现权利要求1-7任一项所述的基于OpenGL的次序无关透明度的图像渲染方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于被所述计算机执行以实现权利要求1-7任一项所述的基于OpenGL的次序无关透明度的图像渲染方法。
CN202311588087.4A 2023-11-27 2023-11-27 基于OpenGL的次序无关透明度的图像渲染方法 Pending CN117315123A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311588087.4A CN117315123A (zh) 2023-11-27 2023-11-27 基于OpenGL的次序无关透明度的图像渲染方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311588087.4A CN117315123A (zh) 2023-11-27 2023-11-27 基于OpenGL的次序无关透明度的图像渲染方法

Publications (1)

Publication Number Publication Date
CN117315123A true CN117315123A (zh) 2023-12-29

Family

ID=89288657

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311588087.4A Pending CN117315123A (zh) 2023-11-27 2023-11-27 基于OpenGL的次序无关透明度的图像渲染方法

Country Status (1)

Country Link
CN (1) CN117315123A (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6266072B1 (en) * 1995-04-05 2001-07-24 Hitachi, Ltd Graphics system
US20200273233A1 (en) * 2019-02-21 2020-08-27 Electronic Arts Inc. Systems and methods for texture-space ray tracing of transparent and translucent objects
CN115423923A (zh) * 2022-09-02 2022-12-02 珠海金山数字网络科技有限公司 模型渲染方法及装置
CN115690302A (zh) * 2022-11-09 2023-02-03 杭州易知微科技有限公司 基于WebGL的半透明物体的渲染方法
KR20230032826A (ko) * 2021-08-31 2023-03-07 광운대학교 산학협력단 멀티-프래그먼트 렌더링에서 가상 두께 기반 레이어 병합 방법, 이를 수행하는 장치 및 컴퓨터 프로그램
CN116342720A (zh) * 2023-04-14 2023-06-27 北京百度网讯科技有限公司 图像处理方法及图像渲染方法、装置、设备和介质
CN117095110A (zh) * 2023-10-20 2023-11-21 园测信息科技股份有限公司 面向互联网三维地图的顺序无关透明渲染方法和系统
US20230377242A1 (en) * 2022-05-23 2023-11-23 Rockwell Collins, Inc. A-buffer dynamic allocation

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6266072B1 (en) * 1995-04-05 2001-07-24 Hitachi, Ltd Graphics system
US20200273233A1 (en) * 2019-02-21 2020-08-27 Electronic Arts Inc. Systems and methods for texture-space ray tracing of transparent and translucent objects
KR20230032826A (ko) * 2021-08-31 2023-03-07 광운대학교 산학협력단 멀티-프래그먼트 렌더링에서 가상 두께 기반 레이어 병합 방법, 이를 수행하는 장치 및 컴퓨터 프로그램
US20230377242A1 (en) * 2022-05-23 2023-11-23 Rockwell Collins, Inc. A-buffer dynamic allocation
CN115423923A (zh) * 2022-09-02 2022-12-02 珠海金山数字网络科技有限公司 模型渲染方法及装置
CN115690302A (zh) * 2022-11-09 2023-02-03 杭州易知微科技有限公司 基于WebGL的半透明物体的渲染方法
CN116342720A (zh) * 2023-04-14 2023-06-27 北京百度网讯科技有限公司 图像处理方法及图像渲染方法、装置、设备和介质
CN117095110A (zh) * 2023-10-20 2023-11-21 园测信息科技股份有限公司 面向互联网三维地图的顺序无关透明渲染方法和系统

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
MORGAN MCGUIRE等: "Weighted Blended Order-Independent Transparency", JOURNAL OF COMPUTER GRAPHICS TECHNIQUES, no. 2, pages 122 - 141 *
吴岱衡: "基于OpenGL开发的无序透明渲染", 中国优秀硕士学位论文全文数据库 信息科技辑, pages 138 - 2042 *
吴振中;: "透明物体渲染算法在火星环绕器在轨可视化中的应用", 无线互联科技, no. 21, pages 108 - 110 *
林汤山: "基于GPU的实时粒子系统渲染技术的研究与实现", 中国优秀硕士学位论文全文数据库 信息科技辑, pages 137 - 69 *

Similar Documents

Publication Publication Date Title
CN111508052B (zh) 三维网格体的渲染方法和装置
TWI592902B (zh) 來自片段著色器程式之樣本遮罩的控制
US9299187B2 (en) Opacity testing for processing primitives in a 3D graphics processing system
TWI584223B (zh) 藉由追蹤物件及/或基元識別符的圖形處理增強之方法及系統,圖形處理單元及非暫時性電腦可讀媒體
US10614619B2 (en) Graphics processing systems
US10282895B2 (en) Transparency parameter determination when rendering a scene for output in graphics processing systems
US6573893B1 (en) Voxel transfer circuit for accelerated volume rendering of a graphics image
US20170024927A1 (en) Method of and apparatus for processing graphics
JP2006120158A (ja) 3dにおけるハードウェアアクセラレートされたアンチエイリアジング(hardwareacceleratedanti−aliasing)のための方法
US7400325B1 (en) Culling before setup in viewport and culling unit
CN112734896B (zh) 环境遮蔽渲染方法、装置、存储介质及电子设备
US10497150B2 (en) Graphics processing fragment shading by plural processing passes
TWI769138B (zh) 圖形處理之方法、流水線電路以及計算機程序
CN112541960A (zh) 三维场景的渲染方法、装置及电子设备
US7292239B1 (en) Cull before attribute read
US8462156B1 (en) Method and system for generating shadows in a graphics processing unit
CN109448123B (zh) 模型的控制方法及装置、存储介质、电子设备
CN116310036A (zh) 场景渲染方法、装置、设备、计算机可读存储介质及产品
CN117315123A (zh) 基于OpenGL的次序无关透明度的图像渲染方法
US6940504B1 (en) Rendering volumetric fog and other gaseous phenomena using an alpha channel
JP7352032B2 (ja) 動画生成方法、装置、電子デバイス及びコンピュータ読取可能記憶媒体
US7256796B1 (en) Per-fragment control for writing an output buffer
CN112465941B (zh) 一种体积云处理方法、装置、电子设备及存储介质
CN114820904A (zh) 支持光照的伪室内渲染方法、装置、介质和设备
CN111932689A (zh) 一种采用id像素图的三维对象快速选取方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination