CN112732395B - 一种基于OpenGL的透明物体的延迟渲染方法 - Google Patents
一种基于OpenGL的透明物体的延迟渲染方法 Download PDFInfo
- Publication number
- CN112732395B CN112732395B CN202110108978.XA CN202110108978A CN112732395B CN 112732395 B CN112732395 B CN 112732395B CN 202110108978 A CN202110108978 A CN 202110108978A CN 112732395 B CN112732395 B CN 112732395B
- Authority
- CN
- China
- Prior art keywords
- preset
- rendering
- transparent object
- transparent
- alpha
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Abstract
本发明涉及一种基于OpenGL的透明物体的延迟渲染方法,涉及延迟渲染技术领域,本发明所述方法在针对所述透明物体进行渲染时,先将透明物体根据透明度从小到大的顺序设置排列渲染编号,并按照编号顺序进行渲染,对于透明度相同的物体根据物体纹理复杂度确定物体的排列渲染编号,当物体的排列渲染编号确定后,再根据物体的渲染轮廓面积对物体的排列渲染编号进行调节,当物体的排列渲染编号调节完成时,再根据物体的颜色深度对调节后的物体排列渲染编号进行修正。本发明所述方法在对透明物体进行渲染时不受场景内光源个数影响,通过设置参数控制透明物体的渲染顺序,有效提高了透明物体的渲染效率。
Description
技术领域
本发明涉及延迟渲染技术领域,尤其涉及一种基于OpenGL的透明物体的延迟渲染方法。
背景技术
目前主流延迟渲染只限于非透明物体,透明物体仍然采用前向渲染的方式,首先,传统前向渲染效率会受到场景光源个数的影响,由于物体处于透明状态无法受光照影响,对于透明物体,引擎一般采用正常渲染来处理,当然也有引擎将透明点信息也存储下来,处理的时候再拆开,但是会受RT空间的限制,必然会有一些损失,导致渲染效率低,其次是抗锯齿,因为抗锯齿需要采样周围其他点的信息,现有技术中,一种方式是采用边缘模糊来降低锯齿,另一种方式是使用大的RT进行超采样,两种方式都会导致渲染效率低。
发明内容
为此,本发明提供一种基于OpenGL的透明物体的延迟渲染方法,用以克服现有技术中无法通过准确控制透明物体渲染顺序导致的渲染效率低的问题。
为实现上述目的,本发明提供一种基于OpenGL的透明物体的延迟渲染方法,包括:
步骤a:在延迟渲染框架中,首先渲染不透明物体,再渲染透明物体的背面,然后再渲染透明物体的正面;
步骤b:根据步骤a中的渲染顺序进行渲染后,将渲染后的结果数据写入显存,并得到与所述不透明物体、透明物体的背面和透明物体的正面相对应的三个屏幕大小的纹理;
步骤c:分配一个屏幕大小的帧缓冲,所述帧缓冲用以依次写入所述不透明物体的纹理、透明物体的背面的纹理和透明物体的正面的纹理;
步骤d:将所述三个屏幕大小的纹理进行混合,混合时将所述纹理中的颜色与帧缓冲区中已有的颜色计算混合,输出计算后的颜色;
步骤e:将颜色混合后的所述纹理绘制到屏幕大小的四边形上;
在所述步骤a中,当针对所述透明物体进行渲染时,首先根据所述透明物体的透明度按从小到大的顺序设置排列渲染编号,并按照所述排列渲染编号的编号顺序对不同透明度的所述透明物体进行渲染,当所述透明物体的透明度相同时,根据所述透明物体的纹理复杂度确定所述透明物体的排列渲染编号,当所有的所述透明物体的排列渲染编号确定后,根据所述透明物体的渲染轮廓面积大小对所述透明物体的排列渲染编号进行调节,当所述透明物体的排列渲染编号调节完成后,再根据所述透明物体的颜色深度对调节后的所述排列渲染编号进行修正。
进一步地,当针对所述透明物体进行渲染时,设置有预设排列渲染编号矩阵P0和预设透明度矩阵Q0;
对于所述预设排列渲染编号矩阵P0,设定P0(P1,P2,...Pn),其中,P1为第一预设排列渲染编号,P2为第二预设排列渲染编号,...Pn为第n预设排列渲染编号,各预设排列渲染编号按照顺序逐渐增大,P1<P2<...<Pn;
对于所述预设透明度矩阵Q0,设定Q0(Q1,Q2,...Qn),其中,Q1为第一预设透明度,Q2为第二预设透明度,...Qn为第n预设透明度,各预设透明度按照顺序逐渐增大,Q1<Q2<...<Qn;
当选用所述排列渲染编号时,根据实际透明物体的透明度选择对应的排列渲染编号,其中,当所述透明物体的透明度选定为所述第i预设透明度Qi时,将透明物体的排列渲染编号设置为所述第i预设排列渲染编号Pi,i=1,2,3,...,n。
进一步地,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理复杂度矩阵A0和预设透明度调节系数矩阵n0;
对于所述预设纹理复杂度矩阵A0,设定A0(A1,A2,A3,A4),其中,A1为第一预设纹理复杂度,A2为第二预设纹理复杂度,A3为第三预设纹理复杂度,A4为第四预设纹理复杂度,各预设纹理复杂度按照顺序逐渐增大,A1<A2<A3<A4;
对于所述预设透明度调节系数矩阵n0,设定n0(n1,n2,n3,n4),其中,n1为第一预设透明度调节系数,n2为第二预设透明度调节系数,n3为第三预设透明度调节系数,n4为第四预设透明度调节系数,各预设透明度调节系数按照顺序逐渐增大,0<n1<n2<1<n3<n4;
当对选用的第i预设透明度Qi进行调节时,将所述透明物体的纹理复杂度A与所述预设纹理复杂度矩阵A0中的参数进行比对,并根据比对结果选用对应的透明度调节系数对第i预设透明度Qi进行调节:
当A<A1时,选用n1对Qi进行调节;
当A1≤A<A2时,选用n2对Qi进行调节;
当A2≤A<A3时,不对Qi进行调节;
当A3≤A<A4时,选用n3对Qi进行调节;
当A4≤A时,选用n4对Qi进行调节;
当选用第j预设透明度调节系数nj对选用的Qi进行调节时,设定j=1,2,3,4,调节后的透明度为Qi’,设定Qi’=Qi×nj。
进一步地,当针对所述透明度相同的透明物体进行渲染时,还设置有预设透明物体局部特征矩阵B0,设定B0(B1,B2,B3,B4),其中,B1为第一预设透明物体局部特征,B2为第二预设透明物体局部特征,B3为第三预设透明物体局部特征,B4为第四预设透明物体局部特征;
当选用所述纹理复杂度时,根据实际透明物体局部特征选择对应的纹理复杂度,其中,当所述透明物体局部特征为第i预设透明物体局部特征Bi时,将透明物体纹理复杂度设置为第i预设纹理复杂度Ai,i=1,2,3,4。
进一步地,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理线条间距矩阵D0和预设纹理复杂度调节系数矩阵a0;
对于所述预设纹理线条间距矩阵D0,设定D0(D1,D2,D3,D4),其中,D1为第一预设纹理线条间距,D2为第二预设纹理线条间距,D3为第三预设纹理线条间距,D4为第四预设纹理线条间距,各预设纹理线条间距按照顺序逐渐增大,D1<D2<D3<D4;
对于所述预设纹理复杂度调节系数矩阵a0,设定a0(a1,a2,a3,a4),其中,a1为第一预设纹理复杂度调节系数,a2为第二预设纹理复杂度调节系数,a3为第三预设纹理复杂度调节系数,a4为第四预设纹理复杂度调节系数,各预设纹理复杂度调节系数按照顺序逐渐增大,1<a1<a2<a3<a4;
当针对选用的纹理复杂度Ai进行调节时,将实际透明物体纹理线条间距D与所述预设纹理线条间距矩阵D0中的参数进行比对,并根据比对结果选用对应的纹理复杂度调节系数对Ai进行调节:
当D1<D时,选用a1对Ai进行调节;
当D1≤D<D2时,选用a2对Ai进行调节;
当D2≤D<D3时,选用a3对Ai进行调节;
当D3≤D<D4时,选用a4对Ai进行调节;
当选用第j预设纹理复杂度调节系数aj对选用的Ai进行调节时,设定j=1,2,3,4,调节后的纹理复杂度为Ai’,设定Ai’=Ai×aj。
进一步地,当针对所述透明物体进行渲染时,还设置有预设渲染轮廓面积矩阵E0和预设排列渲染编号调节系数矩阵x0;
对于所述预设渲染轮廓面积矩阵E0,设定E0(E1,E2,E3,E4),其中,E1为第一预设渲染轮廓面积,E2为第二预设渲染轮廓面积,E3为第三预设渲染轮廓面积,E4为第四预设渲染轮廓面积,各预设渲染轮廓面积按照顺序逐渐增大,E1<E2<E3<E4;
对于所述预设排列渲染编号调节系数矩阵x0,设定x0(x1,x2,x3,x4),其中,x1为第一预设排列渲染编号调节系数,x2为第二预设排列渲染编号调节系数,x3为第三预设排列渲染编号调节系数,x4为第四预设排列渲染编号调节系数,各预设排列渲染编号调节系数按照顺序逐渐增大,0<x1<x2<1<x3<x4;
当针对选用的第i预设排列渲染编号Pi进行调节时,将实际透明物体渲染轮廓面积E与所述预设渲染轮廓面积矩阵E0中的参数进行比对,并根据比对结果选用对应的排列渲染编号调节系数对Pi进行调节:
当E<E1时,选用x4对Pi进行调节;
当E1≤E<E2时,选用x3对Pi进行调节;
当E2≤E<E3时,不调节;
当E3≤E<E4时,选用x2对Pi进行调节;
当E4≤E时,选用x1对Pi进行调节;
当选用第j预设排列渲染编号调节系数xj对选用的Pi进行调节时,设定j=1,2,3,4,调节后的排列渲染编号为Pi’,设定Pi’=Pi×xj。
进一步地,当针对所述透明物体进行渲染时,还设置有预设透明物体颜色深度矩阵K0和预设排列渲染编号修正系数矩阵y0;
对于所述预设透明物体颜色深度矩阵K0,设定K0(K1,K2,K3,K4),其中,K1为第一预设透明物体颜色深度,K2为第二预设透明物体颜色深度,K3为第三预设透明物体颜色深度,K4为第四预设透明物体颜色深度,各预设透明物体颜色深度按照顺序逐渐增大,K1<K2<K3<K4;
对于所述预设排列渲染编号修正系数矩阵y0,设定y0(y1,y2,y3,y4),其中,y1为第一预设排列渲染编号修正系数,y2为第二预设排列渲染编号修正系数,y3为第三预设排列渲染编号修正系数,y4为第四预设排列渲染编号修正系数,各预设排列渲染编号修正系数按照顺序逐渐增大,0<y1<y2<1<y3<y4;
当针对调节后的排列渲染编号Pi’进行修正时,将实际透明物体颜色深度K与所述预设透明物体颜色深度矩阵K0中的参数进行比对,并根据比对结果选用对应的排列渲染编号修正系数对Pi’进行修正:
当K<K1时,选用y1对Pi’进行修正;
当K1≤K<K2时,选用y2对Pi’进行修正;
当K2≤K<K3时,不对Pi’进行修正;
当K3≤K<K4时,选用y3对Pi’进行修正;
当K4≤K时,选用y4对Pi’进行修正;
当选用第j预设排列渲染编号修正系数yj对调节后的Pi’进行修正时,设定j=1,2,3,4,修正后的排列渲染编号为Pi”,设定Pi”=Pi’×yj。
进一步地,当针对所述透明物体进行渲染时,还设置有预设透明物体纹理平均曲率矩阵α0和预设透明物体颜色深度调节系数矩阵q0;
对于所述预设透明物体纹理平均曲率矩阵α0,设定α0(α1,α2,α3,α4),其中,α1为第一预设透明物体纹理平均曲率,α2为第二预设透明物体纹理平均曲率,α3为第三预设透明物体纹理平均曲率,α4为第四预设透明物体纹理平均曲率,各所述预设透明物体纹理平均曲率按照顺序逐渐增大,α1<α2<α3<α4;
对于所述预设透明物体颜色深度调节系数矩阵q0,设定q0(q1,q2,q3,q4),其中,q1为第一预设透明物体颜色深度调节系数,q2为第二预设透明物体颜色深度调节系数,q3为第三预设透明物体颜色深度调节系数,q4为第四预设透明物体颜色深度调节系数,各预设透明物体颜色深度调节系数按照顺序逐渐增大,0<q1<q2<1<q3<q4;
当针对预先选定的第i预设透明物体颜色深度Ki进行调节时,设定i=1,2,3,4,将实际透明物体纹理平均曲率α与所述预设透明物体纹理平均曲率矩阵α0中的参数进行比对,并根据比对结果选用对应的物体颜色深度调节系数对Ki进行调节:
当α<α1时,选用q4对Ki进行调节;
当α1≤α<α2时,选用q3对Ki进行调节;
当α2≤α<α3时,不对Ki进行调节;
当α3≤α<α4时,选用q2对Ki进行调节;
当α4≤α时,选用q1对Ki进行调节;
当选用第j预设透明物体颜色深度调节系数qj对预先选定的Ki进行调节时,设定j=1,2,3,4,调节后的物体颜色深度为Ki’,设定Ki’=Ki×qj。
与现有技术相比,本发明的有益效果在于,本发明所述方法在对透明物体进行渲染时不受场景内光源个数影响,在对透明物体进行渲染时,通过设置参数控制透明物体的渲染顺序,有效提高了透明物体的渲染效率。
进一步地,当选用所述排列渲染编号时,根据实际透明物体透明度选择对应的排列渲染编号,通过设置排列渲染编号有效控制了每一个透明物体的渲染顺序,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过将实际透明物体纹理复杂度A与所述预设纹理复杂度矩阵A0中的参数进行比对选用对应的透明度调节系数对Qi进行调节,有效提高了每个透明物体排列渲染编号的准确度,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过根据实际透明物体局部特征选择对应的纹理复杂度,有效提高了预设透明物体纹理复杂度的准确度,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过将实际透明物体纹理线条间距D与所述预设纹理线条间距矩阵D0中的参数进行比对选用对应的纹理复杂度调节系数对Ai进行调节,有效提高了预设透明物体纹理复杂度的准确度,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过将实际透明物体渲染轮廓面积E与所述预设渲染轮廓面积矩阵E0中的参数进行比对选用对应的排列渲染编号调节系数对Pi进行调节,有效提高了预设透明物体排列渲染编号的准确度,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过将实际透明物体颜色深度K与所述预设透明物体颜色深度矩阵K0中的参数进行比对选用对应的排列渲染编号修正系数对Pi’进行修正,有效提高了预设透明物体排列渲染编号的准确度,进一步提高了透明物体的渲染效率。
进一步地,所述方法通过将实际透明物体纹理平均曲率α与所述预设透明物体纹理平均曲率矩阵α0中的参数进行比对选用对应的物体颜色深度调节系数对Ki进行调节,有效提高了预设透明物体颜色深度的准确度,进一步提高了透明物体的渲染效率。
附图说明
图1为本发明实施例基于OpenGL的透明物体的延迟渲染方法的流程示意图。
具体实施方式
为了使本发明的目的和优点更加清楚明白,下面结合实施例对本发明作进一步描述;应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
下面参照附图来描述本发明的优选实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非在限制本发明的保护范围。
请参阅图1所示,其为本发明实施例基于OpenGL的透明物体的延迟渲染方法的流程示意图。
一种基于OpenGL的透明物体的延迟渲染方法,包括:
步骤a:在延迟渲染框架中,首先渲染不透明物体,再渲染透明物体的背面,然后再渲染透明物体的正面,此渲染顺序用以保证渲染结果的准确度,在渲染所述透明物体背面时,开启正面剔除关闭深度写入,在渲染所述透明物体正面时,开启背面剔除关闭深度写入,在渲染过程进行切换时,需保留深度数据用以记录正确的深度;
步骤b:根据步骤a中的渲染顺序进行渲染后,将渲染后的结果数据写入显存,并得到与所述不透明物体、透明物体的背面和透明物体的正面相对应的三个屏幕大小的纹理;
步骤c:分配一个屏幕大小的帧缓冲,所述帧缓冲用以依次写入所述不透明物体的纹理、透明物体的背面的纹理和透明物体的正面的纹理,由于三个渲染过程非同时进行,因此三个渲染过程可共用同一个帧缓冲;
步骤d:将所述三个屏幕大小的纹理进行混合,混合时将所述纹理中的颜色与帧缓冲区中已有的颜色计算混合,输出计算后的颜色;
步骤e:将颜色混合后的所述纹理绘制到屏幕大小的四边形上;
在所述步骤a中,当针对所述透明物体进行渲染时,首先根据所述透明物体的透明度按从小到大的顺序设置排列渲染编号,并按照所述排列渲染编号的编号顺序对不同透明度的所述透明物体进行渲染,当所述透明物体的透明度相同时,根据所述透明物体的纹理复杂度确定所述透明物体的排列渲染编号,当所有的所述透明物体的排列渲染编号确定后,根据所述透明物体的渲染轮廓面积大小对所述透明物体的排列渲染编号进行调节,当所述透明物体的排列渲染编号调节完成后,再根据所述透明物体的颜色深度对调节后的所述排列渲染编号进行修正。
具体而言,当针对所述透明物体进行渲染时,设置有预设排列渲染编号矩阵P0和预设透明度矩阵Q0;
对于所述预设排列渲染编号矩阵P0,设定P0(P1,P2,...Pn),其中,P1为第一预设排列渲染编号,P2为第二预设排列渲染编号,...Pn为第n预设排列渲染编号,各预设排列渲染编号按照顺序逐渐增大,P1<P2<...<Pn;
对于所述预设透明度矩阵Q0,设定Q0(Q1,Q2,...Qn),其中,Q1为第一预设透明度,Q2为第二预设透明度,...Qn为第n预设透明度,各预设透明度按照顺序逐渐增大,Q1<Q2<...<Qn;
当选用所述排列渲染编号时,根据实际透明物体的透明度选择对应的排列渲染编号,其中,当所述透明物体的透明度选定为所述第i预设透明度Qi时,将透明物体的排列渲染编号设置为所述第i预设排列渲染编号Pi,i=1,2,3,...,n。
当选用所述排列渲染编号时,根据实际物体透明度选择对应的排列渲染编号,通过设置排列渲染编号有效控制了每一个透明物体的渲染顺序,进一步提高了透明物体的渲染效率。
具体而言,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理复杂度矩阵A0和预设透明度调节系数矩阵n0;
对于所述预设纹理复杂度矩阵A0,设定A0(A1,A2,A3,A4),其中,A1为第一预设纹理复杂度,A2为第二预设纹理复杂度,A3为第三预设纹理复杂度,A4为第四预设纹理复杂度,各预设纹理复杂度按照顺序逐渐增大,A1<A2<A3<A4;
对于所述预设透明度调节系数矩阵n0,设定n0(n1,n2,n3,n4),其中,n1为第一预设透明度调节系数,n2为第二预设透明度调节系数,n3为第三预设透明度调节系数,n4为第四预设透明度调节系数,各预设透明度调节系数按照顺序逐渐增大,0<n1<n2<1<n3<n4;
当对选用的第i预设透明度Qi进行调节时,将所述透明物体的纹理复杂度A与所述预设纹理复杂度矩阵A0中的参数进行比对,并根据比对结果选用对应的透明度调节系数对第i预设透明度Qi进行调节:
当A<A1时,选用n1对Qi进行调节;
当A1≤A<A2时,选用n2对Qi进行调节;
当A2≤A<A3时,不对Qi进行调节;
当A3≤A<A4时,选用n3对Qi进行调节;
当A4≤A时,选用n4对Qi进行调节;
当选用第j预设透明度调节系数nj对选用的Qi进行调节时,设定j=1,2,3,4,调节后的透明度为Qi’,设定Qi’=Qi×nj。
具体而言,当针对所述透明度相同的透明物体进行渲染时,还设置有预设透明物体局部特征矩阵B0,设定B0(B1,B2,B3,B4),其中,B1为第一预设透明物体局部特征,B2为第二预设透明物体局部特征,B3为第三预设透明物体局部特征,B4为第四预设透明物体局部特征;
当选用所述纹理复杂度时,根据实际透明物体局部特征选择对应的纹理复杂度,其中,当所述透明物体局部特征为第i预设透明物体局部特征Bi时,将透明物体纹理复杂度设置为第i预设纹理复杂度Ai,i=1,2,3,4。
所述方法通过根据实际物体局部特征选择对应的纹理复杂度,有效提高了预设透明物体纹理复杂度的准确度,进一步提高了透明物体的渲染效率。
具体而言,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理线条间距矩阵D0和预设纹理复杂度调节系数矩阵a0;
对于所述预设纹理线条间距矩阵D0,设定D0(D1,D2,D3,D4),其中,D1为第一预设纹理线条间距,D2为第二预设纹理线条间距,D3为第三预设纹理线条间距,D4为第四预设纹理线条间距,各预设纹理线条间距按照顺序逐渐增大,D1<D2<D3<D4;
对于所述预设纹理复杂度调节系数矩阵a0,设定a0(a1,a2,a3,a4),其中,a1为第一预设纹理复杂度调节系数,a2为第二预设纹理复杂度调节系数,a3为第三预设纹理复杂度调节系数,a4为第四预设纹理复杂度调节系数,各预设纹理复杂度调节系数按照顺序逐渐增大,1<a1<a2<a3<a4;
当针对选用的纹理复杂度Ai进行调节时,将实际透明物体纹理线条间距D与所述预设纹理线条间距矩阵D0中的参数进行比对,并根据比对结果选用对应的纹理复杂度调节系数对Ai进行调节:
当D1<D时,选用a1对Ai进行调节;
当D1≤D<D2时,选用a2对Ai进行调节;
当D2≤D<D3时,选用a3对Ai进行调节;
当D3≤D<D4时,选用a4对Ai进行调节;
当选用第j预设纹理复杂度调节系数aj对选用的Ai进行调节时,设定j=1,2,3,4,调节后的纹理复杂度为Ai’,设定Ai’=Ai×aj。
具体而言,当针对所述透明物体进行渲染时,还设置有预设渲染轮廓面积矩阵E0和预设排列渲染编号调节系数矩阵x0;
对于所述预设渲染轮廓面积矩阵E0,设定E0(E1,E2,E3,E4),其中,E1为第一预设渲染轮廓面积,E2为第二预设渲染轮廓面积,E3为第三预设渲染轮廓面积,E4为第四预设渲染轮廓面积,各预设渲染轮廓面积按照顺序逐渐增大,E1<E2<E3<E4;
对于所述预设排列渲染编号调节系数矩阵x0,设定x0(x1,x2,x3,x4),其中,x1为第一预设排列渲染编号调节系数,x2为第二预设排列渲染编号调节系数,x3为第三预设排列渲染编号调节系数,x4为第四预设排列渲染编号调节系数,各预设排列渲染编号调节系数按照顺序逐渐增大,0<x1<x2<1<x3<x4;
当针对选用的第i预设排列渲染编号Pi进行调节时,将实际透明物体渲染轮廓面积E与所述预设渲染轮廓面积矩阵E0中的参数进行比对,并根据比对结果选用对应的排列渲染编号调节系数对Pi进行调节:
当E<E1时,选用x4对Pi进行调节;
当E1≤E<E2时,选用x3对Pi进行调节;
当E2≤E<E3时,不调节;
当E3≤E<E4时,选用x2对Pi进行调节;
当E4≤E时,选用x1对Pi进行调节;
当选用第j预设排列渲染编号调节系数xj对选用的Pi进行调节时,设定j=1,2,3,4,调节后的排列渲染编号为Pi’,设定Pi’=Pi×xj。
所述方法通过将实际物体渲染轮廓面积E与所述预设渲染轮廓面积矩阵E0中的参数进行比对选用对应的排列渲染编号调节系数对Pi进行调节,有效提高了预设透明物体排列渲染编号的准确度,进一步提高了透明物体的渲染效率。
具体而言,当针对所述透明物体进行渲染时,还设置有预设透明物体颜色深度矩阵K0和预设排列渲染编号修正系数矩阵y0;
对于所述预设透明物体颜色深度矩阵K0,设定K0(K1,K2,K3,K4),其中,K1为第一预设透明物体颜色深度,K2为第二预设透明物体颜色深度,K3为第三预设透明物体颜色深度,K4为第四预设透明物体颜色深度,各预设透明物体颜色深度按照顺序逐渐增大,K1<K2<K3<K4;
对于所述预设排列渲染编号修正系数矩阵y0,设定y0(y1,y2,y3,y4),其中,y1为第一预设排列渲染编号修正系数,y2为第二预设排列渲染编号修正系数,y3为第三预设排列渲染编号修正系数,y4为第四预设排列渲染编号修正系数,各预设排列渲染编号修正系数按照顺序逐渐增大,0<y1<y2<1<y3<y4;
当针对调节后的排列渲染编号Pi’进行修正时,将实际透明物体颜色深度K与所述预设透明物体颜色深度矩阵K0中的参数进行比对,并根据比对结果选用对应的排列渲染编号修正系数对Pi’进行修正:
当K<K1时,选用y1对Pi’进行修正;
当K1≤K<K2时,选用y2对Pi’进行修正;
当K2≤K<K3时,不对Pi’进行修正;
当K3≤K<K4时,选用y3对Pi’进行修正;
当K4≤K时,选用y4对Pi’进行修正;
当选用第j预设排列渲染编号修正系数yj对调节后的Pi’进行修正时,设定j=1,2,3,4,修正后的排列渲染编号为Pi”,设定Pi”=Pi’×yj。
具体而言,当针对所述透明物体进行渲染时,还设置有预设透明物体纹理平均曲率矩阵α0和预设透明物体颜色深度调节系数矩阵q0;
对于所述预设透明物体纹理平均曲率矩阵α0,设定α0(α1,α2,α3,α4),其中,α1为第一预设透明物体纹理平均曲率,α2为第二预设透明物体纹理平均曲率,α3为第三预设透明物体纹理平均曲率,α4为第四预设透明物体纹理平均曲率,各所述预设透明物体纹理平均曲率按照顺序逐渐增大,α1<α2<α3<α4;
对于所述预设透明物体颜色深度调节系数矩阵q0,设定q0(q1,q2,q3,q4),其中,q1为第一预设透明物体颜色深度调节系数,q2为第二预设透明物体颜色深度调节系数,q3为第三预设透明物体颜色深度调节系数,q4为第四预设透明物体颜色深度调节系数,各预设透明物体颜色深度调节系数按照顺序逐渐增大,0<q1<q2<1<q3<q4;
当针对预先选定的第i预设透明物体颜色深度Ki进行调节时,设定i=1,2,3,4,将实际透明物体纹理平均曲率α与所述预设透明物体纹理平均曲率矩阵α0中的参数进行比对,并根据比对结果选用对应的物体颜色深度调节系数对Ki进行调节:
当α<α1时,选用q4对Ki进行调节;
当α1≤α<α2时,选用q3对Ki进行调节;
当α2≤α<α3时,不对Ki进行调节;
当α3≤α<α4时,选用q2对Ki进行调节;
当α4≤α时,选用q1对Ki进行调节;
当选用第j预设透明物体颜色深度调节系数qj对预先选定的Ki进行调节时,设定j=1,2,3,4,调节后的物体颜色深度为Ki’,设定Ki’=Ki×qj。
所述方法通过将实际物体纹理平均曲率α与所述预设透明物体纹理平均曲率矩阵α0中的参数进行比对选用对应的物体颜色深度调节系数对Ki进行调节,有效提高了预设透明物体颜色深度的准确度,进一步提高了透明物体的渲染效率。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征做出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。
以上所述仅为本发明的优选实施例,并不用于限制本发明;对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于OpenGL的透明物体的延迟渲染方法,其特征在于,包括:
步骤a:在延迟渲染框架中,首先渲染不透明物体,再渲染透明物体的背面,然后再渲染透明物体的正面;
步骤b:根据步骤a中的渲染顺序进行渲染后,将渲染后的结果数据写入显存,并得到与所述不透明物体、透明物体的背面和透明物体的正面相对应的三个屏幕大小的纹理;
步骤c:分配一个屏幕大小的帧缓冲,所述帧缓冲用以依次写入所述不透明物体的纹理、透明物体的背面的纹理和透明物体的正面的纹理;
步骤d:将所述三个屏幕大小的纹理进行混合,混合时将所述纹理中的颜色与帧缓冲区中已有的颜色计算混合,输出计算后的颜色;
步骤e:将颜色混合后的所述纹理绘制到屏幕大小的四边形上;
在所述步骤a中,当针对所述透明物体进行渲染时,首先根据所述透明物体的透明度按从小到大的顺序设置排列渲染编号,并按照所述排列渲染编号的编号顺序对不同透明度的所述透明物体进行渲染,当所述透明物体的透明度相同时,根据所述透明物体的纹理复杂度确定所述透明物体的排列渲染编号,当所有的所述透明物体的排列渲染编号确定后,根据所述透明物体的渲染轮廓面积大小对所述透明物体的排列渲染编号进行调节,当所述透明物体的排列渲染编号调节完成后,再根据所述透明物体的颜色深度对调节后的所述排列渲染编号进行修正;
当针对所述透明物体进行渲染时,设置有预设排列渲染编号矩阵P0和预设透明度矩阵Q0;
对于所述预设排列渲染编号矩阵P0,设定P0(P1,P2,...Pn),其中,P1为第一预设排列渲染编号,P2为第二预设排列渲染编号,...Pn为第n预设排列渲染编号,各预设排列渲染编号按照顺序逐渐增大,P1<P2<...<Pn;
对于所述预设透明度矩阵Q0,设定Q0(Q1,Q2,...Qn),其中,Q1为第一预设透明度,Q2为第二预设透明度,...Qn为第n预设透明度,各预设透明度按照顺序逐渐增大,Q1<Q2<...<Qn;
当选用所述排列渲染编号时,根据实际透明物体的透明度选择对应的排列渲染编号,其中,当所述透明物体的透明度选定为所述第i预设透明度Qi时,将透明物体的排列渲染编号设置为所述第i预设排列渲染编号Pi,i=1,2,3,...,n。
2.根据权利要求1所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理复杂度矩阵A0和预设透明度调节系数矩阵n0;
对于所述预设纹理复杂度矩阵A0,设定A0(A1,A2,A3,A4),其中,A1为第一预设纹理复杂度,A2为第二预设纹理复杂度,A3为第三预设纹理复杂度,A4为第四预设纹理复杂度,各预设纹理复杂度按照顺序逐渐增大,A1<A2<A3<A4;
对于所述预设透明度调节系数矩阵n0,设定n0(n1,n2,n3,n4),其中,n1为第一预设透明度调节系数,n2为第二预设透明度调节系数,n3为第三预设透明度调节系数,n4为第四预设透明度调节系数,各预设透明度调节系数按照顺序逐渐增大,0<n1<n2<1<n3<n4;
当对选用的第i预设透明度Qi进行调节时,将所述透明物体的纹理复杂度A与所述预设纹理复杂度矩阵A0中的参数进行比对,并根据比对结果选用对应的透明度调节系数对第i预设透明度Qi进行调节:
当A<A1时,选用n1对Qi进行调节;
当A1≤A<A2时,选用n2对Qi进行调节;
当A2≤A<A3时,不对Qi进行调节;
当A3≤A<A4时,选用n3对Qi进行调节;
当A4≤A时,选用n4对Qi进行调节;
当选用第j预设透明度调节系数nj对选用的Qi进行调节时,设定j=1,2,3,4,调节后的透明度为Qi’,设定Qi’=Qi×nj。
3.根据权利要求2所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明度相同的透明物体进行渲染时,还设置有预设透明物体局部特征矩阵B0,设定B0(B1,B2,B3,B4),其中,B1为第一预设透明物体局部特征,B2为第二预设透明物体局部特征,B3为第三预设透明物体局部特征,B4为第四预设透明物体局部特征;
当选用所述纹理复杂度时,根据实际透明物体局部特征选择对应的纹理复杂度,其中,当所述透明物体局部特征为第i预设透明物体局部特征Bi时,将透明物体纹理复杂度设置为第i预设纹理复杂度Ai,i=1,2,3,4。
4.根据权利要求3所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明度相同的透明物体进行渲染时,还设置有预设纹理线条间距矩阵D0和预设纹理复杂度调节系数矩阵a0;
对于所述预设纹理线条间距矩阵D0,设定D0(D1,D2,D3,D4),其中,D1为第一预设纹理线条间距,D2为第二预设纹理线条间距,D3为第三预设纹理线条间距,D4为第四预设纹理线条间距,各预设纹理线条间距按照顺序逐渐增大,D1<D2<D3<D4;
对于所述预设纹理复杂度调节系数矩阵a0,设定a0(a1,a2,a3,a4),其中,a1为第一预设纹理复杂度调节系数,a2为第二预设纹理复杂度调节系数,a3为第三预设纹理复杂度调节系数,a4为第四预设纹理复杂度调节系数,各预设纹理复杂度调节系数按照顺序逐渐增大,1<a1<a2<a3<a4;
当针对选用的纹理复杂度Ai进行调节时,将实际透明物体纹理线条间距D与所述预设纹理线条间距矩阵D0中的参数进行比对,并根据比对结果选用对应的纹理复杂度调节系数对Ai进行调节:
当D1<D时,选用a1对Ai进行调节;
当D1≤D<D2时,选用a2对Ai进行调节;
当D2≤D<D3时,选用a3对Ai进行调节;
当D3≤D<D4时,选用a4对Ai进行调节;
当选用第j预设纹理复杂度调节系数aj对选用的Ai进行调节时,设定j=1,2,3,4,调节后的纹理复杂度为Ai’,设定Ai’=Ai×aj。
5.根据权利要求1所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明物体进行渲染时,还设置有预设渲染轮廓面积矩阵E0和预设排列渲染编号调节系数矩阵x0;
对于所述预设渲染轮廓面积矩阵E0,设定E0(E1,E2,E3,E4),其中,E1为第一预设渲染轮廓面积,E2为第二预设渲染轮廓面积,E3为第三预设渲染轮廓面积,E4为第四预设渲染轮廓面积,各预设渲染轮廓面积按照顺序逐渐增大,E1<E2<E3<E4;
对于所述预设排列渲染编号调节系数矩阵x0,设定x0(x1,x2,x3,x4),其中,x1为第一预设排列渲染编号调节系数,x2为第二预设排列渲染编号调节系数,x3为第三预设排列渲染编号调节系数,x4为第四预设排列渲染编号调节系数,各预设排列渲染编号调节系数按照顺序逐渐增大,0<x1<x2<1<x3<x4;
当针对选用的第i预设排列渲染编号Pi进行调节时,将实际透明物体渲染轮廓面积E与所述预设渲染轮廓面积矩阵E0中的参数进行比对,并根据比对结果选用对应的排列渲染编号调节系数对Pi进行调节:
当E<E1时,选用x4对Pi进行调节;
当E1≤E<E2时,选用x3对Pi进行调节;
当E2≤E<E3时,不调节;
当E3≤E<E4时,选用x2对Pi进行调节;
当E4≤E时,选用x1对Pi进行调节;
当选用第j预设排列渲染编号调节系数xj对选用的Pi进行调节时,设定j=1,2,3,4,调节后的排列渲染编号为Pi’,设定Pi’=Pi×xj。
6.根据权利要求5所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明物体进行渲染时,还设置有预设透明物体颜色深度矩阵K0和预设排列渲染编号修正系数矩阵y0;
对于所述预设透明物体颜色深度矩阵K0,设定K0(K1,K2,K3,K4),其中,K1为第一预设透明物体颜色深度,K2为第二预设透明物体颜色深度,K3为第三预设透明物体颜色深度,K4为第四预设透明物体颜色深度,各预设透明物体颜色深度按照顺序逐渐增大,K1<K2<K3<K4;
对于所述预设排列渲染编号修正系数矩阵y0,设定y0(y1,y2,y3,y4),其中,y1为第一预设排列渲染编号修正系数,y2为第二预设排列渲染编号修正系数,y3为第三预设排列渲染编号修正系数,y4为第四预设排列渲染编号修正系数,各预设排列渲染编号修正系数按照顺序逐渐增大,0<y1<y2<1<y3<y4;
当针对调节后的排列渲染编号Pi’进行修正时,将实际透明物体颜色深度K与所述预设透明物体颜色深度矩阵K0中的参数进行比对,并根据比对结果选用对应的排列渲染编号修正系数对Pi’进行修正:
当K<K1时,选用y1对Pi’进行修正;
当K1≤K<K2时,选用y2对Pi’进行修正;
当K2≤K<K3时,不对Pi’进行修正;
当K3≤K<K4时,选用y3对Pi’进行修正;
当K4≤K时,选用y4对Pi’进行修正;
当选用第j预设排列渲染编号修正系数yj对调节后的Pi’进行修正时,设定j=1,2,3,4,修正后的排列渲染编号为Pi”,设定Pi”=Pi’×yj。
7.根据权利要求6所述的基于OpenGL的透明物体的延迟渲染方法,其特征在于,当针对所述透明物体进行渲染时,还设置有预设透明物体纹理平均曲率矩阵α0和预设透明物体颜色深度调节系数矩阵q0;
对于所述预设透明物体纹理平均曲率矩阵α0,设定α0(α1,α2,α3,α4),其中,α1为第一预设透明物体纹理平均曲率,α2为第二预设透明物体纹理平均曲率,α3为第三预设透明物体纹理平均曲率,α4为第四预设透明物体纹理平均曲率,各所述预设透明物体纹理平均曲率按照顺序逐渐增大,α1<α2<α3<α4;
对于所述预设透明物体颜色深度调节系数矩阵q0,设定q0(q1,q2,q3,q4),其中,q1为第一预设透明物体颜色深度调节系数,q2为第二预设透明物体颜色深度调节系数,q3为第三预设透明物体颜色深度调节系数,q4为第四预设透明物体颜色深度调节系数,各预设透明物体颜色深度调节系数按照顺序逐渐增大,0<q1<q2<1<q3<q4;
当针对预先选定的第i预设透明物体颜色深度Ki进行调节时,设定i=1,2,3,4,将实际透明物体纹理平均曲率α与所述预设透明物体纹理平均曲率矩阵α0中的参数进行比对,并根据比对结果选用对应的物体颜色深度调节系数对Ki进行调节:
当α<α1时,选用q4对Ki进行调节;
当α1≤α<α2时,选用q3对Ki进行调节;
当α2≤α<α3时,不对Ki进行调节;
当α3≤α<α4时,选用q2对Ki进行调节;
当α4≤α时,选用q1对Ki进行调节;
当选用第j预设透明物体颜色深度调节系数qj对预先选定的Ki进行调节时,设定j=1,2,3,4,调节后的物体颜色深度为Ki’,设定Ki’=Ki×qj。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110108978.XA CN112732395B (zh) | 2021-01-27 | 2021-01-27 | 一种基于OpenGL的透明物体的延迟渲染方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110108978.XA CN112732395B (zh) | 2021-01-27 | 2021-01-27 | 一种基于OpenGL的透明物体的延迟渲染方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112732395A CN112732395A (zh) | 2021-04-30 |
CN112732395B true CN112732395B (zh) | 2021-08-17 |
Family
ID=75594164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110108978.XA Active CN112732395B (zh) | 2021-01-27 | 2021-01-27 | 一种基于OpenGL的透明物体的延迟渲染方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732395B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646284A (zh) * | 2012-04-11 | 2012-08-22 | Tcl集团股份有限公司 | 一种3d渲染系统中透明物体的渲染顺序获取方法及系统 |
CN107845144A (zh) * | 2017-07-21 | 2018-03-27 | 浙江科澜信息技术有限公司 | 一种高效组织和切换OpenGL渲染状态的方法 |
CN109741414A (zh) * | 2018-12-29 | 2019-05-10 | 北京金山安全软件有限公司 | 一种场景中半透明物体的渲染方法、装置及电子设备 |
CN109785417A (zh) * | 2018-11-29 | 2019-05-21 | 中国船舶重工集团公司第七0九研究所 | 一种实现OpenGL累积操作的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110279447A1 (en) * | 2010-05-16 | 2011-11-17 | Zebra Imaging, Inc. | Rendering Transparent Geometry |
-
2021
- 2021-01-27 CN CN202110108978.XA patent/CN112732395B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646284A (zh) * | 2012-04-11 | 2012-08-22 | Tcl集团股份有限公司 | 一种3d渲染系统中透明物体的渲染顺序获取方法及系统 |
CN107845144A (zh) * | 2017-07-21 | 2018-03-27 | 浙江科澜信息技术有限公司 | 一种高效组织和切换OpenGL渲染状态的方法 |
CN109785417A (zh) * | 2018-11-29 | 2019-05-21 | 中国船舶重工集团公司第七0九研究所 | 一种实现OpenGL累积操作的方法及装置 |
CN109741414A (zh) * | 2018-12-29 | 2019-05-10 | 北京金山安全软件有限公司 | 一种场景中半透明物体的渲染方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112732395A (zh) | 2021-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107644410B (zh) | 图像处理方法、图像处理装置、图像处理系统及显示装置 | |
US10546553B2 (en) | Image processing apparatus, image processing method and display apparatus | |
CN101340523B (zh) | 一种对数字图像进行曝光补偿的方法和装置 | |
US10311628B2 (en) | Piecewise linear irregular rasterization | |
WO2019200896A1 (zh) | 背光调节方法、背光调节装置、显示设备和存储介质 | |
US8749662B2 (en) | System and method for lens shading image correction | |
CN102693532B (zh) | 图像阴影和高光的自动局部调整 | |
JP2011013458A (ja) | 液晶表示装置 | |
NZ587837A (en) | Creating stereoscopic volume for a 2-D image by offsetting duplicated portions of the image | |
CN105678724A (zh) | 图像的背景替换方法及装置 | |
CN112732395B (zh) | 一种基于OpenGL的透明物体的延迟渲染方法 | |
CN110211077A (zh) | 一种基于高阶奇异值分解的多曝光图像融合方法 | |
CN102158714B (zh) | 基于拜尔域三基色格式的图像边缘增强方法及装置 | |
WO2017182789A1 (en) | Blending images | |
CN107862649B (zh) | 一种基于仿真视景系统的gpu加速多通道融合方法及系统 | |
CN103795991A (zh) | 一种基于单张图片的高动态范围图像生成方法 | |
CN113327544B (zh) | 一种基于对角显示的led显示屏对比度提升方法及led显示屏 | |
CN109829925A (zh) | 一种在抠图任务中提取干净前景的方法及模型训练方法 | |
CN109978804B (zh) | 基于深度学习的人眼视线矫正方法及系统 | |
CN113920030B (zh) | 一种大区域高保真卫星遥感影像匀色镶嵌处理方法及装置 | |
CN112967669B (zh) | 一种提高led显示屏灰度一致性的校正方法 | |
CN1595491A (zh) | 投影显示颜色均匀性校正方法及其系统 | |
CN103136723A (zh) | 一种图像锯齿消除方法及系统 | |
CN110379379A (zh) | 一种背光驱动方法及装置、显示装置及存储介质 | |
CN104394391B (zh) | 相机采集的点阵图像的图像数据处理方法和系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |