CN112907436A - 基于OpenGL的线型绘制方法、系统及介质 - Google Patents
基于OpenGL的线型绘制方法、系统及介质 Download PDFInfo
- Publication number
- CN112907436A CN112907436A CN202110142558.3A CN202110142558A CN112907436A CN 112907436 A CN112907436 A CN 112907436A CN 202110142558 A CN202110142558 A CN 202110142558A CN 112907436 A CN112907436 A CN 112907436A
- Authority
- CN
- China
- Prior art keywords
- array
- distance
- vertex
- dimensional
- line
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 239000012634 fragment Substances 0.000 claims abstract description 77
- 238000005070 sampling Methods 0.000 claims abstract description 53
- 230000000007 visual effect Effects 0.000 claims abstract description 13
- 238000012545 processing Methods 0.000 claims abstract description 10
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000009877 rendering Methods 0.000 claims description 11
- 238000003491 array Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 4
- 238000004422 calculation algorithm Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 8
- 239000007787 solid Substances 0.000 description 8
- 230000008569 process Effects 0.000 description 3
- 239000011800 void material Substances 0.000 description 3
- XQIMLPCOVYNASM-UHFFFAOYSA-N borole Chemical compound B1C=CC=C1 XQIMLPCOVYNASM-UHFFFAOYSA-N 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明实施例公开了基于OpenGL的线型绘制方法、系统及介质,其中方法包括以下步骤:在CPU端:根据要绘制的线条建立一维整数数组,一维整数数组中每个元素值交替表示为实线长度或空白长度;将一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;将距离数据以顶点属性方式传入顶点着色器,根据距离数据的顶点属性计算采样距离,并将采样距离传递给片元着色器;根据采样距离,在片元着色器中对生成的一维纹理进行采样并生成片元信息;根据片元信息进行可视化表达。本发明能够对不同图元类型统一使用统一的算法模型。
Description
技术领域
本发明涉及计算机图形领域,特别涉及一种基于OpenGL的线型绘制方法、系统及介质。
背景技术
在OpenGL3.1版本以前,绘制不同线型的直线图元,只需要调用glLineStipple函数设置线型。随着OpenGL的发展,着色器管线模式取代了固定管线模式,因此在OpenGL3.1版本之后,固定管线中的glLineStipple函数被废弃。
对于新的着色器管线,想要绘制一条自定义线型的线条不再是那么简单。
目前已知解决方案有:
⑴.在CPU端,对即将绘制的线条按照线型进行分割。
⑵.在GPU端,将线型数据保存为一维纹理,然后在几何着色器中计算线段的基于屏幕空间的长度,并传递到片元着色器中,最后在片元着色器中,通过之前设置的一维纹理对长度进行采样,将小于设定阈值的片段抛弃,即可达到效果。
上述方案的缺点包括:
a.对于上述解决方案中的(1)项,由于按照线型分割线段需要在CPU端进行大量的计算,特别是线段量大,且线型复杂时,计算量倍增。因此并不实用。
b.对于上述解决方案中的(2)项,由于计算在GPU中进行,因此速度不是问题,但由于OpenGL中的线段图元有GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP。对于GL_LINES图元类型,方案(2)可以使用,但对于GL_LINE_STRIP和GL_LINE_LOOP,由于无法在着色器中计算出每个顶点距离起点的距离,因此方案(2)无法使用。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种基于OpenGL的线型绘制方法,能够对不同图元类型统一使用统一的算法模型。
本发明还提出一种基于OpenGL的线型绘制系统。
本发明还提出一种实施上述方法的计算机可读存储介质。
根据本发明的第一方面实施例的基于OpenGL的线型绘制方法,包括:在CPU端:根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;将所述一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;将所述距离数据以顶点属性方式传入顶点着色器,根据所述距离数据的顶点属性计算采样距离,并将所述采样距离传递给片元着色器;根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;根据所述片元信息进行可视化表达。
根据本发明的一些实施例,所述将所述一维整数数组转换为一维纹理数组步骤包括:根据所述一维整数数组中表示实线长度的元素的值,生成对应数量的值为255的元素;根据所述一维整数数组中表示空白长度的元素的值,生成对应数量的值为0的元素。
根据本发明的一些实施例,所述方法还包括:在绘制GL_LINE_LOOP图元时,在其顶点序列最后添加该序列的第一个顶点。
根据本发明的第二方面实施例的基于OpenGL的线型绘制方法,包括:在CPU端:根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;将所述一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;在顶点着色器中定义一个SSBO,所述SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;根据所述顶点的间距数组计算得到采样距离,将所述采样距离传递给片元着色器;在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;根据所述片元信息进行可视化表达。
根据本发明的一些实施例,所述将所述一维整数数组转换为一维纹理数组步骤包括:根据所述一维整数数组中表示实线长度的元素的值,生成对应数量的值为255的元素;根据所述一维整数数组中表示空白长度的元素的值,生成对应数量的值为0的元素。
根据本发明的第三方面实施例的基于OpenGL的线型绘制系统,包括:在CPU端:线型编码模块,用于根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;数组转换模块,用于将所述一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:距离数据计算模块,用于计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;采样距离计算模块,用于将所述距离数据以顶点属性方式传入顶点着色器,根据所述距离数据的顶点属性计算采样距离,并将所述采样距离传递给片元着色器;片元信息生成模块,用于根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;绘制模块,用于根据所述片元信息进行可视化表达。
根据本发明的第四方面实施例的基于OpenGL的线型绘制系统,包括:在CPU端:线型编码模块,用于根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;数组转换模块,用于将所述一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:间距数组计算模块,计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;SSBO模块,用于在顶点着色器中定义一个SSBO,所述SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;采样距离计算模块,根据所述顶点的间距数组计算得到采样距离,将所述采样距离传递给片元着色器;片元信息生成模块,用于根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;绘制模块,用于根据所述片元信息进行可视化表达。
根据本发明的第五方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本发明的第一方面实施例中任一项的方法。
根据本发明的第六方面实施例的计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本发明的第二方面实施例中任一项的方法。
本发明实施例至少具有如下有益效果:
1.解决了对于OpenGL3.1版本后使用着色器管线线段线型的生成问题。
2.统一了不同线段图元(GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP)线型的生成方法。
3.由于计算在GPU中进行,因此速度也得到保证。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的方法的流程示意图。
图2为本发明另一实施例的方法的流程示意图。
图3为本发明实施例的一维整数数组[1,1]对应的线型图。
图4为本发明实施例的一维整数数组[1,2]对应的线型图。
图5为本发明实施例的一维整数数组[1,2,3,1]对应的线型图。
图6为本发明实施例的一维纹理数组的元素示意图。
图7为本发明实施例的多线段图元间距定义的示意图。
图8为本发明实施例的系统的模块示意框图。
图9为本发明另一实施例的系统的模块示意框图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个及两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
术语解释:
1.OpenGL(Open Graphics Library):是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口。
2.着色器(Shader):是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序。
3.着色器管线:顶点着色器→几何着色器(可选)→…(可选的着色器阶段)→片元着色器
4.顶点着色器:着色器管线的第一个阶段,处理由CPU传来的顶点数据,并计算顶点的位置。
5.片元着色器:着色器管线的最后一个阶段,处理经过光栅化后的片元数据,计算片元颜色。
6.纹理:一块图像数据。
7.纹理映射:是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。简单来说,就是把一幅图像贴到三维物体的表面上来增强真实感。
8.CPU(中央处理器):作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
9.GPU(图形处理器):一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。
10.SSBO(存储缓存对象):一种可以在着色器中修改数据的缓存对象。
参照图1,本发明实施例的方法包括:
在CPU端:
根据要绘制的线条建立一维整数数组,其中,一维整数数组中每个元素值交替表示为实线长度或空白长度;
将一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;
将距离数据以顶点属性方式传入顶点着色器,根据距离数据的顶点属性计算采样距离,并将采样距离传递给片元着色器;
根据采样距离,在片元着色器中对生成的一维纹理进行采样并生成片元信息;
根据片元信息进行可视化表达。
参照图2,本发明另一实施例的方法包括:
在CPU端:
根据要绘制的线条建立一维整数数组,其中,一维整数数组中每个元素值交替表示为实线长度或空白长度;
将一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;
在顶点着色器中定义一个SSBO,该SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;
根据顶点的间距数组计算得到采样距离,将采样距离传递给片元着色器;
在片元着色器中对生成的一维纹理进行采样并生成片元信息;
根据片元信息进行可视化表达。
在一些实施例中,线型编码方法具体设计如下:
对于线型数据,我们采用一维整数数组来表示。下面将通过几个例子来解释。
参照图3,数组[1,1]对应的线型图如图3所示。实线长度和空白长度按照数组中的1(实线):1(空白)比例来显示。
参照图4,数组[1,2]对应的线型图如图4所示。实线长度和空白长度按照数组中的1(实线):2(空白)比例来显示。
参照图5,数组[1,2,3,1]对应的线型图如图5所示。实线长度和空白长度按照数组中的1(实线):2(空白):3(实线):1(空白)比例来显示。
综上,数组中的每个元素值都表示长度,且交替的表示为实线长度或空白长度,且数组第一个元素解释为实线长度。可以看到,通过这种方式,可以定义任意复杂的线型。
参照图6,在一些实施例中,由于上述的一维整数数组是在CPU端定义的,我们需要将其转换为一维纹理数组。转换方式如下:
对于数组[a1,a2,a3…](a1,a2,a3…属于整数)。生成一个一维纹理数组T。T的元素如图6所示。如图6展示的转换方式,对于解释为实线长度的值,生成对应数量的值为255的元素,空白长度值则生成对应数量的值为0的元素。然后,将生成的一维纹理数据传送到GPU端,供后续使用。此时纹理数据的值会被限制到0至1的范围,即0映射到0,255映射到1。
参照图7,在一些实施例中,关于多线段图元的间距的定义及生成的设计如下。
a.间距定义:
对于多线段L上的任意一点P,P点的间距D表示:从多线段L的起点S开始,一直到点P的距离。如图7所示。
b.间距生成:
对于给定的多线段,我们只需要计算得到多线段上的每个顶点的间距(即每个顶点距离起点的距离)。片元着色器会对距离值进行默认的线性插值,这正是我们需要的效果,即片元着色器中的距离值为每个片元到该多线段起点的距离。
在OpenGL4.3版本之前,由于不存在SSBO(存储缓存对象),因此我们采用如下方法①。
方法①:将距离数据以顶点属性方式传入顶点着色器。并在顶点着色器中将距离属性直接传递给片元着色器。
顶点着色器部分码如下:
#version 330core
…
layout(location=3)in float aDistance;//距离数据的顶点属性
…
uniform float dashedFactor;//一个随纹理数据变化的比例因子,保证纹理数据中1个单位长度与绘图单位长度比例一致(根据实际需要调整)。
out float samplerDistance;//传递给片元着色器的采样距离
…
void main()
{
…
samplerDistance=aDistance/dashedFactor;//传递给片元着色器
…
}
在OpenGL4.3版本及后续版本,支持了SSBO(存储缓存对象),我们可以使用方法②:
方法②:
在顶点着色器中,定义一个SSBO,里面包括即将绘制的顶点数组,每个顶点的间距数组和一个bool值。结构如下:
buffer BufferObject{
vec3 vertice[];//存储即将绘制的顶点,由CPU端传入
float distances[];//存储每个顶点的间距值,需要在着色器中计算出
bool flag;//一个标志位,表示间距是否计算完毕
}
顶点着色器部分码如下:
#version 430core
…
layout(std430,binding=0)buffer BufferObject{
vec3 vertice[];//存储即将绘制的顶点,由CPU端传入
float distances[];//存储每个顶点的间距值,需要在着色器中计算出
bool flag;//一个标志位,表示间距是否计算完毕
}
uniform float dashedFactor;//一个随纹理数据变化的比例因子,保证纹理数据中1个单位长度与绘图单位长度比例一致(根据实际需要调整)。
out float samplerDistance;//传递给片元着色器的采样距离
void main()
{
…
//若没有初始化,则进入初始化步骤。
if(!flag)
{
flag=true;
float s=0;//累计距离
distances[0]=0;
for(int i=1,i<vertice.length(),i++)
{
s+=length(vertice[i]-vertice[i-1]);
distances[i]=s;//设置每个顶点的间距值
}
}
…
samplerDistance=distances[gl_VertexID]/dashedFactor;//传递给片元着色器
}
在一些实施例中,对间距进行纹理采样包括:
在片元着色器中,对生成的一维纹理进行采样。
根据前面生成的纹理数据,易知采样值要么是0要么是1,若采样值落在0值上,则代表这个片元不应该被绘制,因此抛弃掉,若落在1值上则正常绘制。
片元着色器部分码如下:
#version 330core
uniform sampler1D pattern;//一维纹理采样器
in float samplerDistance;//从顶点着色器接收的采样距离
void main()
{
…
if(texture(pattern,samplerDistance).r==0)//采样值为0,则使用discard指定抛弃该片元
discard;
…
}
在一些实施例中,考虑到GL_LINE_LOOP与GL_LINE_STRIP都是多线段类型,只是GL_LINE_LOOP图元会将多线段首位相接,形成闭合多线段。
因此,在绘制GL_LINE_LOOP时,在其顶点序列最后添加该序列的第一个顶点,使其首位相接闭合起来,将其转化为GL_LINE_STRIP,然后使用前述方法进行绘制。
与前述实施例相对应,本发明还提供了系统的实施例。对于系统实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
参照图8,本发明实施例的系统包括:在CPU端:线型编码模块,用于根据要绘制的线条建立一维整数数组,其中,一维整数数组中每个元素值交替表示为实线长度或空白长度;数组转换模块,用于将一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:距离数据计算模块,用于计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;采样距离计算模块,用于将距离数据以顶点属性方式传入顶点着色器,根据距离数据的顶点属性计算采样距离,并将采样距离传递给片元着色器;片元信息生成模块,用于根据采样距离,在片元着色器中对生成的一维纹理进行采样并生成片元信息;绘制模块,用于根据片元信息进行可视化表达。
参照图9,本发明另一实施例的系统包括:在CPU端:线型编码模块,用于根据要绘制的线条建立一维整数数组,其中,一维整数数组中每个元素值交替表示为实线长度或空白长度;数组转换模块,用于将一维整数数组转换为一维纹理数组并传送到GPU端;在GPU端:间距数组计算模块,计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;SSBO模块,用于在顶点着色器中定义一个SSBO,该SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;采样距离计算模块,根据顶点的间距数组计算得到采样距离,将采样距离传递给片元着色器;片元信息生成模块,用于根据采样距离,在片元着色器中对生成的一维纹理进行采样并生成片元信息;绘制模块,用于根据片元信息进行可视化表达。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种例示性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的例示性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (9)
1.一种基于OpenGL的线型绘制方法,其特征在于,包括:
在CPU端:
根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;
将所述一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;
将所述距离数据以顶点属性方式传入顶点着色器,根据所述距离数据的顶点属性计算采样距离,并将所述采样距离传递给片元着色器;
根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;
根据所述片元信息进行可视化表达。
2.根据权利要求1所述的基于OpenGL的线型绘制方法,其特征在于,所述将所述一维整数数组转换为一维纹理数组步骤包括:
根据所述一维整数数组中表示实线长度的元素的值,生成对应数量的值为255的元素;
根据所述一维整数数组中表示空白长度的元素的值,生成对应数量的值为0的元素。
3.根据权利要求1所述的基于OpenGL的线型绘制方法,其特征在于,所述方法还包括:在绘制GL_LINE_LOOP图元时,在其顶点序列最后添加该序列的第一个顶点。
4.一种基于OpenGL的线型绘制方法,其特征在于,包括:
在CPU端:
根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;
将所述一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;
在顶点着色器中定义一个SSBO,所述SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;
根据所述顶点的间距数组计算得到采样距离,将所述采样距离传递给片元着色器;
在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;
根据所述片元信息进行可视化表达。
5.根据权利要求4所述的基于OpenGL的线型绘制方法,其特征在于,所述将所述一维整数数组转换为一维纹理数组步骤包括:
根据所述一维整数数组中表示实线长度的元素的值,生成对应数量的值为255的元素;
根据所述一维整数数组中表示空白长度的元素的值,生成对应数量的值为0的元素。
6.根据权利要求4所述的基于OpenGL的线型绘制方法,其特征在于,所述方法还包括:在绘制GL_LINE_LOOP图元时,在其顶点序列最后添加该序列的第一个顶点。
7.一种基于OpenGL的线型绘制系统,其特征在于,包括:
在CPU端:
线型编码模块,用于根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;
数组转换模块,用于将所述一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
距离数据计算模块,用于计算要绘制的线条上每个顶点距离起点的距离,记为距离数据;
采样距离计算模块,用于将所述距离数据以顶点属性方式传入顶点着色器,根据所述距离数据的顶点属性计算采样距离,并将所述采样距离传递给片元着色器;
片元信息生成模块,用于根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;
绘制模块,用于根据所述片元信息进行可视化表达。
8.一种基于OpenGL的线型绘制系统,其特征在于,包括:
在CPU端:
线型编码模块,用于根据要绘制的线条建立一维整数数组,所述一维整数数组中每个元素值交替表示为实线长度或空白长度;
数组转换模块,用于将所述一维整数数组转换为一维纹理数组并传送到GPU端;
在GPU端:
间距数组计算模块,计算要绘制的线条上每个顶点距离起点的距离,得到顶点的间距数组;
SSBO模块,用于在顶点着色器中定义一个SSBO,所述SSBO包括要绘制的顶点数组,每个顶点的间距数组和一个bool值;
采样距离计算模块,根据所述顶点的间距数组计算得到采样距离,将所述采样距离传递给片元着色器;
片元信息生成模块,用于根据所述采样距离,在所述片元着色器中对生成的一维纹理进行采样并生成片元信息;
绘制模块,用于根据所述片元信息进行可视化表达。
9.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至6中任一项的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110142558.3A CN112907436B (zh) | 2021-02-02 | 基于OpenGL的线型绘制方法、系统及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110142558.3A CN112907436B (zh) | 2021-02-02 | 基于OpenGL的线型绘制方法、系统及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112907436A true CN112907436A (zh) | 2021-06-04 |
CN112907436B CN112907436B (zh) | 2024-06-07 |
Family
ID=
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113345050A (zh) * | 2021-08-09 | 2021-09-03 | 杭州安恒信息技术股份有限公司 | 一种修改二维几何边框方法及相关装置 |
CN113426113A (zh) * | 2021-07-05 | 2021-09-24 | 未来科技(襄阳)有限公司 | 3d游戏启动器及2d游戏的3d启动方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306391A (zh) * | 2011-09-20 | 2012-01-04 | 深圳Tcl新技术有限公司 | 基于OpenGL的倒影显示处理装置及方法 |
CN102903139A (zh) * | 2012-09-07 | 2013-01-30 | 罗健欣 | 一种等值线加速渲染方法 |
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
US8537169B1 (en) * | 2010-03-01 | 2013-09-17 | Nvidia Corporation | GPU virtual memory model for OpenGL |
CN105741228A (zh) * | 2016-03-11 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 图形处理方法及装置 |
CN106295306A (zh) * | 2016-08-15 | 2017-01-04 | 长春工程学院 | 一种图片验证码的生成方法 |
CN107564087A (zh) * | 2017-09-11 | 2018-01-09 | 南京大学 | 一种基于屏幕的三维线状符号渲染方法 |
CN108447121A (zh) * | 2018-03-26 | 2018-08-24 | 南京恩瑞特实业有限公司 | NRIETWebGIS动态色斑图绘制方法 |
CN110544290A (zh) * | 2019-09-06 | 2019-12-06 | 广东省城乡规划设计研究院 | 数据渲染方法及装置 |
CN110706326A (zh) * | 2019-09-02 | 2020-01-17 | 广东省城乡规划设计研究院 | 数据展示方法及装置 |
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8537169B1 (en) * | 2010-03-01 | 2013-09-17 | Nvidia Corporation | GPU virtual memory model for OpenGL |
CN102306391A (zh) * | 2011-09-20 | 2012-01-04 | 深圳Tcl新技术有限公司 | 基于OpenGL的倒影显示处理装置及方法 |
CN102903139A (zh) * | 2012-09-07 | 2013-01-30 | 罗健欣 | 一种等值线加速渲染方法 |
CN103268626A (zh) * | 2013-04-11 | 2013-08-28 | 江苏省在这里数字科技有限公司 | 基于gpu的地图线形符号绘制方法及系统 |
CN105741228A (zh) * | 2016-03-11 | 2016-07-06 | 腾讯科技(深圳)有限公司 | 图形处理方法及装置 |
CN106295306A (zh) * | 2016-08-15 | 2017-01-04 | 长春工程学院 | 一种图片验证码的生成方法 |
CN107564087A (zh) * | 2017-09-11 | 2018-01-09 | 南京大学 | 一种基于屏幕的三维线状符号渲染方法 |
CN108447121A (zh) * | 2018-03-26 | 2018-08-24 | 南京恩瑞特实业有限公司 | NRIETWebGIS动态色斑图绘制方法 |
CN110706326A (zh) * | 2019-09-02 | 2020-01-17 | 广东省城乡规划设计研究院 | 数据展示方法及装置 |
CN110544290A (zh) * | 2019-09-06 | 2019-12-06 | 广东省城乡规划设计研究院 | 数据渲染方法及装置 |
Non-Patent Citations (1)
Title |
---|
刘君妍;陈雅茜;高亦远;李创;佘江峰;: "一种基于屏幕的三维地图线状符号渲染方法", 地球信息科学学报, no. 08, pages 15 - 22 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113426113A (zh) * | 2021-07-05 | 2021-09-24 | 未来科技(襄阳)有限公司 | 3d游戏启动器及2d游戏的3d启动方法 |
CN113345050A (zh) * | 2021-08-09 | 2021-09-03 | 杭州安恒信息技术股份有限公司 | 一种修改二维几何边框方法及相关装置 |
CN113345050B (zh) * | 2021-08-09 | 2021-10-29 | 杭州安恒信息技术股份有限公司 | 一种修改二维几何边框方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109840931B (zh) | 骨骼动画的合批渲染方法、装置、系统及存储介质 | |
US9916674B2 (en) | Baking path rendering objects into compact and efficient memory representations | |
KR102122454B1 (ko) | 이전 타일의 이미지를 이용하여 현재 프레임을 렌더링하는 방법 및 장치 | |
US7394464B2 (en) | Preshaders: optimization of GPU programs | |
CN110544290A (zh) | 数据渲染方法及装置 | |
US9275493B2 (en) | Rendering vector maps in a geographic information system | |
US9495767B2 (en) | Indexed uniform styles for stroke rendering | |
US11600044B2 (en) | Rendering textures utilizing sharpness maps | |
CN110706326B (zh) | 数据展示方法及装置 | |
US11763514B1 (en) | Hard ware-assisted emulation of graphics pipeline | |
US9858708B2 (en) | Convex polygon clipping during rendering | |
CN111091620B (zh) | 基于图形学的地图动态路网处理方法及系统、计算机设备 | |
US20160307294A1 (en) | Systems and Methods for Displaying Patterns of Recurring Graphics on Digital Maps | |
US10192348B2 (en) | Method and apparatus for processing texture | |
KR20180023856A (ko) | 그래픽 처리 시스템 및 그래픽 프로세서 | |
US11593992B2 (en) | Rendering three-dimensional objects utilizing sharp tessellation | |
KR20160068204A (ko) | 메시 지오메트리를 위한 데이터 처리 방법 및 이를 기록한 컴퓨터 판독 가능 저장 매체 | |
US11989807B2 (en) | Rendering scalable raster content | |
CN112907436A (zh) | 基于OpenGL的线型绘制方法、系统及介质 | |
CN112907436B (zh) | 基于OpenGL的线型绘制方法、系统及介质 | |
CN118043842A (zh) | 一种渲染格式选择方法及其相关设备 | |
US11417058B2 (en) | Anti-aliasing two-dimensional vector graphics using a multi-vertex buffer | |
CN114020390A (zh) | Bim模型显示方法、装置、计算机设备和存储介质 | |
Limberger et al. | OpenLL: an API for dynamic 2D and 3D labeling | |
US11776179B2 (en) | Rendering scalable multicolored vector content |
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 |