首页 / 专利库 / 电脑图像 / 着色器 / 顶点着色器 / 执行路径渲染的方法和设备

执行路径渲染的方法和设备

阅读:473发布:2020-05-18

专利汇可以提供执行路径渲染的方法和设备专利检索,专利查询,专利分析的服务。并且公开了一种执行路径 渲染 的方法和设备,所述方法包括:获取 帧 中的将被渲染的对象中的 顶点 的信息;基于 像素 的 位置 和连接所述顶点的路径的行进方向之间的关系,计算帧中的像素的卷绕数。所述方法还包括:基于所述卷绕数,确定是否将 颜色 分配给像素。,下面是执行路径渲染的方法和设备专利的具体信息内容。

1.一种执行路径渲染的方法,所述方法包括:
获取中将被渲染的对象中的多个顶点的信息;
在不在模板缓冲器中对包括对象的三形进行渲染的情况下,基于帧中的像素位置和连接所述多个顶点的路径的行进方向之间的关系,计算像素的卷绕数;
基于所述卷绕数,确定是否将颜色分配给像素,
其中,计算步骤包括:
基于像素的位置,检查所述路径是否位于像素的一侧;
基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;
根据所述路径的行进方向是顺时针方向还是逆时针方向,使所述卷绕数增大或减小预定值。
2.如权利要求1所述的方法,其中,所述路径位于像素的一侧。
3.如权利要求2所述的方法,其中,所述一侧包括像素的位置的左侧、右侧、上侧或下侧。
4.如权利要求2所述的方法,还包括:
基于像素的位置和所述路径的位置,确定所述一侧。
5.如权利要求1所述的方法,其中,使所述卷绕数增大或减小预定值的步骤包括:
响应于所述行进方向被确定为顺时针方向,使所述卷绕数增大所述预定值;
响应于所述行进方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
6.如权利要求5所述的方法,其中,所述预定值为1。
7.如权利要求1所述的方法,其中,使所述卷绕数增大或减小预定值的步骤包括:
响应于所述行进方向被确定为顺时针方向,使所述卷绕数减小所述预定值;
响应于所述行进方向被确定为逆时针方向,使所述卷绕数增大所述预定值。
8.如权利要求7所述的方法,其中,所述预定值为1。
9.如权利要求1所述的方法,还包括:
基于所述多个顶点中的每个顶点的坐标,在帧中设置边界框,
其中,计算步骤包括计算边界框中的像素的卷绕数。
10.如权利要求9所述的方法,其中,设置步骤包括:
基于所述坐标中的平坐标的最大值和最小值以及垂直坐标的最大值和最小值,设置边界框。
11.如权利要求10所述的方法,其中,边界框是包括连接第一坐标和第二坐标的对角线的矩形,其中,第一坐标包括所述水平坐标的最大值和所述垂直坐标的最大值,第二坐标包括所述水平坐标的最小值和所述垂直坐标的最小值。
12.如权利要求1所述的方法,其中,所述多个顶点包括与至少一个路径中的每个路径的开始位置相应的顶点和与所述每个路径的结束位置相应的顶点。
13.如权利要求1所述的方法,其中,确定是否将颜色分配给像素的步骤包括:
基于预设规则,确定是否将颜色分配给像素。
14.如权利要求13所述的方法,其中,所述预设规则包括第一规则或第二规则,其中,在第一规则下将颜色分配给卷绕数不为0的每个像素,在第二规则下将颜色分配给卷绕数为奇数的每个像素。
15.如权利要求1所述的方法,还包括:
基于对是否将颜色分配给像素进行确定的结果,将颜色分配给像素;
存储像素的颜色。
16.一种被配置为执行路径渲染的设备,所述设备包括:
获取单元,被配置为获取帧中将被渲染的对象中的多个顶点的信息;
运算单元,被配置为在不在模板缓冲器中对包括对象的三角形进行渲染的情况下,基于帧中的像素的位置和连接所述多个顶点的路径的行进方向之间的关系,计算像素的卷绕数;
确定单元,被配置为基于所述卷绕数,确定是否将颜色分配给像素,
其中,运算单元被配置为:
基于像素的位置,检查所述路径是否位于像素的一侧;
基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;
根据所述路径的行进方向是顺时针方向还是逆时针方向,使所述卷绕数增大或减小预定值。
17.如权利要求16所述的设备,其中,所述路径位于像素的一侧。
18.如权利要求17所述的设备,其中,所述一侧包括像素的位置的左侧、右侧、上侧或下侧。
19.如权利要求17所述的设备,其中,运算单元还被配置为:
基于像素的位置和所述路径的位置,确定所述一侧。
20.如权利要求16所述的设备,其中,运算单元被配置为:
响应于所述行进方向被确定为顺时针方向,使所述卷绕数增大所述预定值;
响应于所述行进方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
21.如权利要求20所述的设备,其中,所述预定值为1。
22.如权利要求16所述的设备,其中,运算单元被配置为:
响应于所述行进方向被确定为顺时针方向,使所述卷绕数减小所述预定值;
响应于所述行进方向被确定为逆时针方向,使所述卷绕数增大所述预定值。
23.如权利要求22所述的设备,其中,所述预定值为1。
24.如权利要求16所述的设备,还包括:
设置单元,被配置为基于所述多个顶点中的每个顶点的坐标,在帧中设置边界框,其中,运算单元被配置为计算边界框中的像素的卷绕数。
25.如权利要求24所述的设备,其中,设置单元被配置为:
基于所述坐标中的水平坐标的最大值和最小值以及垂直坐标的最大值和最小值,设置边界框。
26.如权利要求25所述的设备,其中,边界框是包括连接第一坐标和第二坐标的对角线的矩形,其中,第一坐标包括所述水平坐标的最大值和所述垂直坐标的最大值,第二坐标包括所述水平坐标的最小值和所述垂直坐标的最小值。
27.如权利要求16所述的设备,其中,所述多个顶点包括与至少一个路径中的每个路径的开始位置相应的顶点和与所述每个路径的结束位置相应的顶点。
28.如权利要求16所述的设备,其中,确定单元被配置为:
基于预设规则,确定是否将颜色分配给像素。
29.如权利要求28所述的设备,其中,所述预设规则包括第一规则或第二规则,其中,在第一规则下将颜色分配给卷绕数不为0的每个像素,在第二规则下将颜色分配给卷绕数为奇数的每个像素。
30.如权利要求16所述的设备,还包括:
像素着色器,被配置为基于对是否将颜色分配给像素进行确定的结果,将颜色分配给像素;
帧缓冲器,被配置为存储像素的颜色。
31.一种被配置为产生帧中的像素的卷绕数的设备,所述设备被连接到执行路径渲染的图形处理单元,所述设备包括:
处理器,被配置为:
从图形处理单元接收路径的顶点的坐标的信息以及像素的坐标的信息,
在不在模板缓冲器中对包括对象的三角形进行渲染的情况下,基于路径的顶点的坐标的信息以及像素的坐标的信息,计算像素的卷绕数,
将所述卷绕数输出到图形处理单元,
其中,处理器被配置为:
基于路径的顶点的坐标的信息识别路径的行进方向;
基于像素的坐标的信息,检查路径是否位于像素的一侧;
基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;
根据所述路径的行进方向是顺时针方向还是逆时针方向,使所述卷绕数增大或减小预定值。
32.一种被配置为执行路径渲染的设备,所述设备包括:
运算单元,被配置为在不在模板缓冲器中对包括对象的三角形进行渲染的情况下,基于连接对象的多个顶点的路径的方向来计算像素的卷绕数,其中,所述路径在像素的一侧;
确定单元,被配置为基于卷绕数确定是否将颜色分配给像素,
其中,运算单元被配置为:根据所述路径的方向是顺时针方向还是逆时针方向,使所述卷绕数增大或减小预定值。
33.如权利要求32所述的设备,其中,运算单元被配置为:
响应于所述方向被确定为顺时针方向,使所述卷绕数增大所述预定值;
响应于所述方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
34.如权利要求32所述的设备,其中,确定单元被配置为:
响应于所述卷绕数不为0,将颜色分配给像素;或
响应于卷绕数为奇数,将颜色分配给像素。

说明书全文

执行路径渲染的方法和设备

[0001] 本申请要求于2014年4月23日在韩国知识产权局提交的第10-2014-0048879号韩国专利申请的优先权,该申请的全部公开通过所有目的的引用合并于此。

技术领域

[0002] 下面的描述涉及一种执行路径渲染的方法和设备。

背景技术

[0003] 近来已对在执行矢量图形或路径渲染时提高图形处理单元(GPU)的加速性能的方法进行了研究。设计GPU的硬件结构基于这样的假设:所有输入数据被配置为三形以便加速三维图形。然而,对于路径渲染,输入数据不是用三角形配置,而是用命令和顶点的组合来配置。因此,当执行路径渲染时难以提高GPU的加速性能。
[0004] 例如,为了通过使用GPU来绘制曲线,控制处理单元(CPU)首先通过使用曲线的开始点作为中心来将曲线划分为多个三角形,并指导GPU将划分的三角形重新配置为曲线。因此,当将曲线划分为多个三角形时,CPU消耗大量的时间。此外,每当CPU调用多个OpenGL API时都与GPU通信,并且GPU的状态发生很多变化。
[0005] 关于这一点,已提出了在GPU中使用模板缓冲器的基于模板的路径渲染方法。然而,根据基于模板的路径渲染方法,在渲染期间过多地产生了输入到存储器的数据/从存储器输出的数据,从而模板存储器不能够进行并行处理。因此,GPU的加速性能的提高受到限制。发明内容
[0006] 提供发明内容以用简化的形式介绍构思的选择,其中,所述构思在以下具体实施方式中被进行进一步描述。该发明内容不是意在确定声明的主题的主要特征或必要特征,也不是意在用作协助确定声明的主题的范围。
[0007] 在一总体方面,提供了一种执行路径渲染的方法,所述方法包括:获取中的将被渲染的对象中的多个顶点的信息;基于帧中的像素位置和连接所述多个顶点的路径的行进方向之间的关系,计算像素的卷绕数;基于所述卷绕数,确定是否将颜色分配给像素。
[0008] 所述路径可位于像素的一侧。
[0009] 所述一侧可包括像素的位置的左侧、右侧、上侧或下侧。
[0010] 所述方法还可包括:基于像素的位置和所述路径的位置,确定所述一侧。
[0011] 计算步骤可包括:检查所述路径是否位于像素的一侧;基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;响应于所述行进方向被确定为顺时针方向,使所述卷绕数增大预定值;响应于所述行进方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
[0012] 所述预定值可以为1。
[0013] 计算的步骤可包括:检查所述路径是否位于像素的一侧;基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;响应于所述行进方向被确定为顺时针方向,使所述卷绕数减小预定值;响应于所述行进方向被确定为逆时针方向,使所述卷绕数增大所述预定值。
[0014] 所述方法还可包括:基于所述多个顶点中的每个顶点的坐标,在帧中设置边界框。计算步骤可包括计算边界框中的像素的卷绕数。
[0015] 设置步骤可包括:基于所述坐标的平坐标的最大值和最小值以及垂直坐标的最大值和最小值,设置边界框。
[0016] 边界框可以是包括连接第一坐标和第二坐标的对角线的矩形,其中,第一坐标包括所述水平坐标的最大值和所述垂直坐标的最大值,第二坐标包括所述水平坐标的最小值和所述水平坐标的最小值。
[0017] 所述多个顶点可包括与至少一个路径中的每个路径的开始位置相应的顶点和与所述每个路径的结束位置相应的顶点。
[0018] 确定步骤可包括:基于预设规则,确定是否将颜色分配给像素。
[0019] 所述预设规则可包括第一规则或第二规则,其中,在第一规则中将颜色分配给具有不为0的卷绕数的每个像素,在第二规则中将颜色分配给具有为奇数的卷绕数的每个像素。
[0020] 所述方法还可包括:基于确定的结果,将颜色分配给像素;存储像素的颜色。
[0021] 一种非暂时性计算机可读的存储介质,所述存储介质可存储包括使计算机执行所述方法的指令的程序。
[0022] 在另一总体方面,提供了一种被配置为执行路径渲染的设备,所述设备包括:获取单元,被配置为获取帧中的将被渲染的对象中的多个顶点的信息;运算单元,被配置为基于帧中的像素的位置和连接所述多个顶点的路径的行进方向之间的关系,计算像素的卷绕数;确定单元,被配置为基于所述卷绕数,确定是否将颜色分配给像素。
[0023] 运算单元还可被配置为:基于像素的位置和所述路径的位置,确定所述一侧。
[0024] 运算单元可被配置为:检查所述路径是否位于像素的一侧;基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;响应于所述行进方向被确定为顺时针方向,使所述卷绕数增大预定值;响应于所述行进方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
[0025] 运算单元可被配置为:检查所述路径是否位于像素的一侧;基于检查的结果,确定所述路径的行进方向是顺时针方向还是逆时针方向;响应于所述行进方向被确定为顺时针方向,使所述卷绕数减小预定值;响应于所述行进方向被确定为逆时针方向,使所述卷绕数增大所述预定值。
[0026] 所述设备还可包括:设置单元,被配置为基于所述多个顶点中的每个顶点的坐标,在帧中设置边界框。运算单元可被配置为计算边界框中的像素的卷绕数。
[0027] 设置单元可被配置为:基于所述坐标的水平坐标的最大值和最小值以及垂直坐标的最大值和最小值,设置边界框。
[0028] 确定单元可被配置为:基于预设规则,确定是否将颜色分配给像素。
[0029] 所述设备还可包括:像素着色器,被配置为基于确定的结果,将颜色分配给像素;帧缓冲器,被配置为存储像素的颜色。
[0030] 在另一总体方面,提供了一种被配置为产生帧中的像素的卷绕数的设备,所述设备被连接到执行路径渲染的图形处理单元,所述设备包括:处理器,被配置为从图形处理单元接收路径的顶点的坐标的信息以及像素的坐标的信息,基于路径的顶点的坐标的信息以及像素的坐标的信息,计算像素的卷绕数,将所述卷绕数输出到图形处理单元。
[0031] 在另一总体方面,提供了一种被配置为执行路径渲染的设备,所述设备包括:运算单元,被配置为基于连接对象的多个顶点的路径的方向来计算像素的卷绕数,其中,所述路径在像素的一侧;确定单元,被配置为基于卷绕数确定是否将颜色分配给像素。
[0032] 运算单元可被配置为:响应于所述方向被确定为顺时针方向,使所述卷绕数增大预定值;响应于所述方向被确定为逆时针方向,使所述卷绕数减小所述预定值。
[0033] 确定单元可被配置为:响应于所述卷绕数不为0,将颜色分配给像素;或响应于卷绕数是奇数,将颜色分配给像素。
[0034] 其他特征和方面将从下面的详细描述和附图中变得明显。

附图说明

[0035] 图1是示出执行路径渲染的设备的示例的框图
[0036] 图2是示出卷绕数的示例的示图;
[0037] 图3A和图3B是示出运算单元计算卷绕数的示例的示图;
[0038] 图4A、图4B、图4C和图4D是示出运算单元通过选择不同侧来计算像素的卷绕数的示例的示图;
[0039] 图5是示出运算单元计算像素的卷绕数的算法的示例的示图;
[0040] 图6A、图6B和图6C是示出确定单元确定是否将颜色分配给每个像素的示例的示图;
[0041] 图7是示出执行路径渲染的设备的另一示例的框图;
[0042] 图8A和图8B是示出设置单元设置边界框的示例的示图;
[0043] 图9是示出卷绕数产生设备的示例的框图;
[0044] 图10是示出运算单元和卷绕数产生设备进行操作的示例的框图;
[0045] 图11是示出在GPU中实现计算像素的卷绕数的方法的示例的框图;
[0046] 图12是示出执行像素所有权测试的方法的示例的流程图
[0047] 图13是示出计算卷绕数的方法的示例的流程图;
[0048] 图14是示出确定路径是否位于像素的一侧的方法的示例的流程图;
[0049] 图15是示出执行路径渲染的方法的示例的流程图。
[0050] 在整个附图和详细的描述中,除非另有描述或规定,否则相同的附图标号将被理解为表示相同的元件、特征和结构。附图可能不按照比例,并且为了清楚、说明和方便,可夸大附图中的元件的相对大小、比例和描述。

具体实施方式

[0051] 提供下面的详细描述以协助读者获得对这里描述的方法、设备和/或系统的全面理解。然而,这里描述的系统、设备和/或方法的各种改变、修改和等同物对于本领域中的普通技术人员将是明显的。描述的处理步骤和/或操作的进度是示例,然而,除了步骤和/或操作有必要按照特定顺序发生外,否则如本领域公知的那样,步骤和/或操作的顺序不限于这里阐述的步骤和/或操作的顺序,并且可被改变。另外,为了更清楚和简洁,将省略本领域中的普通技术人员公知的功能和结构的描述。
[0052] 这里描述的功能可被以不同的形式实现,并将不被解释为限于这里描述的示例。相反,已提供这里描述的示例,使得本公开将是全面且完整的,并将向本领域中的普通技术人员充分表达本公开的全部范围。
[0053] 图1是示出执行路径渲染的设备100的示例的框图。参照图1,执行路径渲染的设备100包括获取单元110、运算单元120和确定单元130。在图1中,仅示出了执行路径渲染的设备100的构成元件。因此,除图1中示出的构成元件之外,其他普通构成元件也可包括在执行路径渲染的设备100中。
[0054] 另外,图1中示出的执行路径渲染的设备100的获取单元110、运算单元120和确定单元130可与一个处理器或多个处理器相应。可通过多个逻辑阵列来实现处理器,或者可通过普通微处理器和存储可由微处理器运行的程序的存储器的组合来实现处理器。另外,本领域中的普通技术人员将理解,可按照不同的硬件形式来实现处理器。
[0055] 获取单元110获取包括顶点的信息的数据,其中,所述顶点包括在将被渲染的对象中。可沿着包括在定义对象的坐标中的至少一条路径执行渲染。另外,可基于通过连接至少一条路径而形成的闭合的多边形或闭合的路径来执行对象的渲染。路径表示从一点连接到另一点的直线或曲线。
[0056] 由获取单元110获取的数据包括每个顶点的坐标信息和用于通过将顶点进行组合来形成路径的命令。顶点包括与路径的开始位置相应的顶点和与路径的结束位置相应的顶点。
[0057] 例如,假设从包括在帧(未示出)中的像素之中的第一像素到包括在帧(未示出)中的像素之中的第二像素的直线被定义为路径,则顶点表示与帧中的第一像素和第二像素相应的点。因此,由获取单元110获取的数据包括与第一像素相应的第一顶点的坐标、与第二像素相应的第二顶点的坐标以及用于形成从第一顶点到第二顶点的直线的命令。因此,除了获得形成路径的每个顶点的坐标的信息之外,还可通过参考数据来获得路径的方向的信息。另外,数据可包括分配给每个像素的颜色值的信息。
[0058] 运算单元120基于包括在帧中的每个像素的位置和至少一个路径的行进方向之间的关系,计算与每个像素相应的卷绕数。卷绕数N表示:当查看各个像素的一侧时指示在路径的渲染期间进行的旋转的次数的预定值。
[0059] 可通过在路径顺时针地形成完整的圆时增大预定值并在路径逆时针地形成完整的圆时减小预定值,计算卷绕数N,但是本示例不限于此。另外,可通过在路径顺时针地形成完整的圆时减小预定值并在路径逆时针地形成完整的圆时增大预定值,计算卷绕数。
[0060] 在一个示例中,当路径在顺时针方向上形成完整的圆时,像素的卷绕数可以是+1。另外,当路径在逆时针方向上形成完整的圆时,像素的卷绕数可以是-1。
[0061] 在另一示例中,当路径在顺时针方向上形成完整的圆时,像素的卷绕数可以是-1。另外,当路径在逆时针方向上形成完整的圆时,像素的卷绕数可以是+1。
[0062] 另外,预定值可以是整数,但本示例不限于此。换言之,当从像素的位置查看一侧时,卷绕数可相应于映射到在路径的渲染期间被渲染的旋转的数量的任何数。
[0063] 在一个示例中,当路径在顺时针方向上形成完整的圆时,像素的卷绕数可以是+0.1。另外,当路径在逆时针方向上形成完整的圆时,像素的卷绕数可以是+0.5。
[0064] 在下面的描述中,为了方便解释,假设当路径在顺时针方向上形成完整的圆时卷绕数是+1,当路径在逆时针方向上形成完整的圆时卷绕数是-1。如上所述,路径可以是闭合的多边形或闭合的路径。将参照图2详细描述卷绕数。
[0065] 图2是示出卷绕数的示例的示图。卷绕数与包括在帧中的像素中的像素210相应。在图2中,为了方便解释,像素210被示为人的形状。参照图2,路径230被示为在像素210的周围,并且路径230被示为闭合的路径。尽管图2示出通过使用位于像素210的右侧的路径230来计算路径230的卷绕数,但本示例不限于位于右侧的路径。另外,像素210的右侧包括沿虚构的射线220布置的点(以下称为顶点),其中,虚构的射线220从像素210开始并指向像素
210的右侧在水平方向上被渲染。
[0066] 当虚构的射线220从像素210开始并指向像素210的右侧在水平方向上被渲染时,虚构的射线220和路径230在总共四个顶点231、232、233和244处相交。换言之,路径230被渲染为包括四个顶点231、232、233和244。因此,基于路径230在四个顶点231、232、233和244中的每个顶点处被渲染的方向来确定像素210的卷绕数。
[0067] 详细地讲,路径230在第一顶点231处被渲染的方向是逆时针方向。因此,像素210的卷绕数首先被计算为-1。路径230在第二顶点232处被渲染的方向是顺时针方向,因此像素210的卷绕数第二次被计算为0(-1+1)。路径230在第三顶点233处被渲染的方向是逆时针方向,因此像素210的卷绕数第三次被计算为-1(-1+1-1)。路径230在第四顶点处被渲染的方向是逆时针方向,因此像素210的卷绕数被最终计算为-2(-1+1-1-1)。
[0068] 再参照图1,运算单元120针对位于包括在帧中的像素的一侧的路径来计算卷绕数。所述一侧与相对于像素的位置的左侧、右侧、上侧和下侧中的任意一侧相应。另外,运算单元120不仅考虑路径与从像素出发绘制的虚构的射线之间的交点,而且考虑路径的行进方向,来计算卷绕数。运算单元120可在不使用模板缓冲器的情况下计算卷绕数。
[0069] 通常,渲染设备(例如,图形处理单元(GPU))(未示出)可通过使用模板缓冲器(未示出)来执行渲染。详细地讲,渲染设备通过分析包括在形成对象的路径中的顶点来形成三角形(三角化)。换言之,渲染设备通过连接三个连续的顶点来在路径中产生三角形。随后,渲染设备将产生的三角形顺序写入模板缓冲器中。渲染设备确定包括在每个三角形中的像素中的每个像素的卷绕数,并将确定卷绕数的处理和最终的卷绕数写入模板缓冲器中。渲染设备通过使用写入到模板缓冲器的最终的卷绕数来执行像素处理。
[0070] 因此,当渲染设备通过使用模板缓冲器来执行对象的渲染时,输入到模板缓冲器/从模板缓冲器输出的大量的数据被产生。详细地讲,由于每当渲染设备对包括对象的三角形进行渲染时都产生输入到模板缓冲器/从模板输出的数据,因此在通过渲染设备渲染的路径的形状很复杂时,输入到模板缓冲器/从模板缓冲器输出的数据的量大大增加。另外,在模板缓冲器中同时对多个三角形进行渲染的并行处理是不可行的。因此,由于在模板缓冲器中对三角形进行顺序渲染,所以随着三角形的数量增加,渲染设备对三角形进行渲染所需的时间量大大增加。
[0071] 根据本示例的运算单元120在不使用模板缓冲器的情况下计算包括在帧中的每个像素的卷绕数。换言之,运算单元120在不在模板缓冲器中对包括对象的三角形进行渲染的情况下,计算包括在帧中的每个像素的卷绕数,因此,可防止在基于模板缓冲器的渲染过程中发生的输入/输出数据的量的增加和渲染时间的增加。
[0072] 另外,运算单元120通过使用多个线程来计算每个像素的卷绕数。换言之,运算单元120通过使用单个线程来计算单个像素的卷绕数。由于可对多个线程进行并行处理,因此运算单元120可通过使用多个线程来同时计算每个像素的卷绕数。因此,执行路径渲染的设备100可高速执行路径渲染。
[0073] 在下面的描述中,为方便解释,描述运算单元120通过使用一个线程计算包括在帧中的像素中的任何一个像素的卷绕数的方法。因此,尽管以下未描述,但本领域中的普通技术人员将理解,运算单元120可通过使用多个线程来同时计算多个像素的卷绕数。以下参照图3A和图3B详细描述运算单元120计算卷绕数的示例。
[0074] 图3A和图3B是示出运算单元120计算卷绕数的示例的示图。图3A示出包括顶点1、顶点2和顶点3的对象310。详细地讲,图3A的对象310包括从顶点1到顶点2的第一路径、从顶点2到顶点3的第二路径以及从顶点3到顶点1的第三路径。
[0075] 由获取单元110获取的数据包括顶点1、顶点2和顶点3的信息。详细地讲,数据包括顶点1的坐标、顶点2的坐标和顶点3的坐标。另外,数据包括指示形成对象的路径的开始点的顶点和指示路径的结束点的顶点的信息。换言之,数据包括以下信息:包括在对象310中的第一路径的开始点和结束点分别是顶点1和顶点2;包括在对象310中的第二路径的开始点和结束点分别是顶点2和顶点3;以及包括在对象310中的第三路径的开始点和结束点分别是顶点3和顶点1。因此,可基于数据中包括的顶点的信息,识别路径的行进方向。
[0076] 运算单元120基于包括在帧中的像素中的每个像素的位置,检查路径是否位于一侧。所述一侧可以是相对于像素中的每个像素的位置的左侧、右侧、上侧和下侧中的任何一个。在下面的描述中,为了方便解释,假设运算单元120检查路径是否位于像素P1的右侧。
[0077] 运算单元120基于以上检查的结果,确定路径的行进方向是顺时针方向还是逆时针方向。例如,当运算单元120确定路径位于像素P1的右侧时,运算单元120随后确定路径的行进方向是顺时针方向还是逆时针方向。另一方面,当运算单元120确定路径不位于像素P1的右侧时,运算单元120将像素P1的卷绕数确定为0。
[0078] 详细地讲,运算单元120确定形成对象310的三个路径中的位于像素P1的右侧的第二路径的行进方向是顺时针方向还是逆时针方向。换言之,由于第一路径和第三路径不位于像素P1的右侧,因此运算单元仅确定第二路径的行进方向,而不确定第一路径和第三路径的行进方向。由于第二路径从顶点2行进到顶点3,因此,运算单元120将第二路径的行进方向确定为顺时针方向。
[0079] 随后,运算单元120通过在行进方向是顺时针方向时将预定值加到卷绕数N,并在行进方向是逆时针方向时减去预定值,确定像素P1的卷绕数。如参照图1所述,预定值可以是1,但本示例不限于此。
[0080] 假设预定值是1,则将第二路径的行进方向确定为顺时针方向的运算单元120将像素P1的卷绕数确定为+1。当运算单元120按照上述方法计算包括在帧中的像素中的每个像素的卷绕数时,图3A中的存在于对象310的内部的像素(尽管未示出)的卷绕数都被确定为+1,存在于对象310的外部的像素(尽管未示出)的卷绕数都被确定为0。
[0081] 可选地,运算单元120可通过在行进方向是顺时针方向时从卷绕数减去预定值,并在行进方向是逆时针方向时将预定值加到卷绕数,来确定像素P1的卷绕数。如上参照图1所述,预定值可以是1,但本示例不限于此。
[0082] 假设预定值是0.1,则将第二路径的行进方向确定为顺时针方向的运算单元120将像素P1的卷绕数确定为-0.1。当运算单元120按照上述方法计算包括在帧中的像素中的每个像素的卷绕数时,图3A中的存在于对象310的内部的像素的卷绕数都被确定为-0.1,存在于对象310的外部的像素的卷绕数都被确定为0。
[0083] 在下面的描述中,为方便解释,当运算单元120确定像素的卷绕数时,假设在路径的行进方向是顺时针方向时将1加到卷绕数,在路径的行进方向是逆时针方向时从卷绕数减1。
[0084] 图3B示出包括顶点1、顶点2、顶点3和顶点4的第一对象320以及包括顶点5、顶点6、顶点7和顶点8的第二对象330。详细地讲,第一对象320包括从顶点1到顶点2的第一路径、从顶点2到顶点3的第二路径、从顶点3到顶点4的第三路径以及从顶点4到顶点1的第四路径。第二对象330包括从顶点5到顶点6的第五路径、从顶点6到顶点7的第六路径、从顶点7到顶点8的第七路径以及从顶点8到顶点5的第八路径。
[0085] 如上所述,由获取单元110获取的数据包括指示形成第一对象320和第二对象330的路径中的每个路径的开始点和结束点的坐标信息。在下面的描述中,为方便解释,假设运算单元120检查路径是否位于像素(即,像素P2或像素P3)的右侧。
[0086] 在一个示例中,描述通过使用运算单元120来计算像素P2的卷绕数的方法。运算单元120检查路径是否位于像素P2的右侧。详细地讲,运算单元120检查包括在第一对象320中的第三路径是否位于像素P2的右侧。
[0087] 运算单元120基于以上检查的结果,确定路径的行进方向是顺时针方向还是逆时针方向。详细地讲,运算单元120将第三路径的行进方向确定为顺时针方向。将第三路径的行进方向确定为顺时针方向的运算单元120将像素P2的卷绕数确定为+1。
[0088] 在另一示例中,描述通过使用运算单元120来计算像素P3的卷绕数的方法。运算单元120检查包括在第二对象330中的第六路径和包括在第一对象320中的第三路径是否位于像素P3的右侧。
[0089] 随后,运算单元120确定第六路径的行进方向是逆时针方向并且第三路径的行进方向是顺时针方向。运算单元120基于第六路径的行进方向被确定为逆时针方向,将像素P3的卷绕数确定为-1,并随后基于第三路径的行进方向被确定为顺时针方向,将像素P3的卷绕数最终确定为0(-1+1)。
[0090] 当运算单元120按照上述方法计算包括在帧中的像素中的每个像素的卷绕数时,图3B中的存在于第一对象320的内部但存在于第二对象320的外部的像素(尽管未示出除了P2之外的像素)的卷绕数都被确定为+1,而存在于对象330的内部的像素(尽管未示出除了像素P3之外的像素)的卷绕数都被确定为0。
[0091] 另一方面,即使当运算单元120通过选择相对于像素的位置的左侧、右侧、上侧和下侧中的任何一侧来计算卷绕数时,也可获得以上获得的相同的操作结果。以下参照图4A、图4B、图4C和图4D,描述运算单元120通过选择不同侧来计算像素的卷绕数的示例。
[0092] 图4A、图4B、图4C和图4D是示出运算单元120通过选择不同侧来计算像素的卷绕数的示例的示图。图4A至图4D示出对象,其中,每个对象都包括顶点1至顶点5。图4A至图4D中示出的对象是具有星形形状的闭合的多边形,并都是彼此完全相同的。
[0093] 参照图4A,运算单元120检查路径是否位于相对于像素P的位置的右侧。详细地讲,运算单元120检查从顶点2到顶点3的路径和从顶点5到顶点1的路径是否存在于像素P的右侧,例如,在朝向像素P的右侧的水平方向上绘制的虚构的射线上的位置处。由于从顶点2到顶点3的路径和从顶点5到顶点1的路径的行进方向都是顺时针方向,因此运算单元120将像素P的卷绕数计算为+2。
[0094] 参照图4B,运算单元120检查路径是否位于像素P的左侧。详细地讲,运算单元120检查从顶点1到顶点2的路径和从顶点3到顶点4的路径是否存在于像素P的左侧,例如,与在朝向像素P的左侧的水平方向上绘制的虚构射线相交的路径是否存在。由于从顶点1到顶点2的路径和从顶点3到顶点4的路径的行进方向都是顺时针方向,因此计算单元120将像素P的卷绕数计算为+2。
[0095] 参照图4C,计算单元120检查路径是否位于相对于像素P的位置的上侧。详细地讲,运算单元120检查从顶点2到顶点3的路径和从顶点4到顶点5的路径是否存在于像素P的上侧,例如,在朝向像素P的上侧的垂直方向上绘制的虚构的射线上的位置处。由于从顶点2到顶点3的路径和从顶点4到顶点5的路径的行进方向都是顺时针方向,因此,运算单元120将像素P的卷绕数计算为+2。
[0096] 参照图4D,运算单元120检查路径是否位于相对于像素P的位置的下侧。详细地讲,运算单元120检查从顶点5到顶点1的路径和从顶点3到顶点4的路径是否存在于像素P的下侧,例如,在朝向像素P的下侧的垂直方向上绘制的虚构射线上的位置处。由于从顶点5到顶点1的路径和从顶点3到顶点4的路径的行进方向都是顺时针方向,因此运算单元120将像素P的卷绕数计算为+2。
[0097] 如上所述,不管哪一侧被选择,运算单元120在针对像素P的位置计算卷绕数的过程中获得的结果都是相同的。另外,如图4A至图4D中所示,存在于由路径划分的区域中的同一区域内的像素的各自的卷绕数是相同的。
[0098] 运算单元120可考虑像素的位置和路径的位置,确定用于计算包括在帧中的像素中的每个像素的卷绕数的一侧。换言之,运算单元120可通过根据像素P的位置选择相对于像素P的位置的一侧来确定如何计算卷绕数。换言之,用于卷绕数的计算的一侧可被确定为在相对于像素P的位置期望存在最少数量的路径的方向上。
[0099] 例如,假设像素P存在于相对于帧的垂直中线的左侧,则运算单元120可选择像素P的左侧而不是右侧作为用于计算卷绕数的一侧,从而运算单元120可通过使用最少数量的路径来计算像素P的卷绕数。另外,假设像素P存在于相对于帧的垂直中线的右侧,则运算单元120可选择像素P的右侧而不是左侧作为用于计算卷绕数的一侧,从而运算单元120可通过使用最少数量的路径来计算像素P的卷绕数。
[0100] 因此,运算单元120可通过确定包括在帧中的像素中的每个像素的不同侧来计算卷绕数。在这样做的过程中,运算单元120可确定形成帧中的对象的路径的位置。随后,运算单元120可在相对于将被计算卷绕数的像素的位置最少数量的路径存在的方向上选择将被用于卷绕数的计算的一侧。
[0101] 图5是示出运算单元计算像素的卷绕数的算法的示例的示图。图5的算法与基于路径是否位于像素的右侧来计算卷绕数的方法相关。然而,如上所述,还可基于除了像素的右侧之外的一侧来计算卷绕数。另外,只要与图5的算法的结果相同的结果被输出,就可不受限制地采用其他算法。
[0102] 再参照图1,确定单元130通过使用由运算单元120计算出的卷绕数,确定是否将颜色分配给像素中的每个像素。换言之,确定单元130通过使用由运算单元120计算出的像素中的每个像素的卷绕数,确定是否将颜色分配给像素中的每个像素。例如,确定单元130可基于预设规则确定是否将颜色分配给像素中的每个像素。预设规则可以是第一规则和第二规则中的任何一个,其中,在第一规则中将颜色值分配给像素中具有不为0的卷绕数的像素,在第二规则中将颜色分配给像素中具有为奇数的卷绕数的像素。参照图6A、6B和图6C描述确定单元130确定是否将颜色值分配给像素中的每个像素的示例。
[0103] 图6A、图6B和图6C是示出确定单元130确定是否将颜色分配给每个像素的示例的示图。图6A示出由运算单元120执行的计算包括在帧中的像素中的每个像素的卷绕数的结果。图6B示出根据第一规则将颜色值分配给像素的结果。另外,图6C示出根据第二规则将颜色值分配给像素的结果。
[0104] 参照图6A,针对包括在帧中的像素中的每个像素计算卷绕数。详细地讲,包括在区域611中的像素的卷绕数被计算为0,包括在区域612中的像素的卷绕数被计算为+1,包括在区域613中的像素的卷绕数被计算为+2。
[0105] 在一个示例中,确定单元130可根据第一规则确定是否将颜色分配给像素中的每个像素。第一规则规定将颜色值分配给像素中具有不为0的卷绕数的像素。参照图6B,根据第一规则,确定单元130确定将颜色分配给包括在区域612和区域613中的像素中的每个像素,而不将颜色分配给图6A中包括在区域611中的像素中的每个像素。
[0106] 在另一示例中,确定单元130可根据第二规则确定是否将颜色分配给像素中的每个像素。第二规则规定将颜色值分配给像素中具有为奇数的卷绕数的像素。在本示例中,具有为奇数的卷绕数的像素表示像素的卷绕数的绝对值是奇数。例如,当卷绕数是+3时,卷绕数被确定为奇数。另外,当卷绕数是-3时,卷绕数被确定为奇数。参照图6C,根据第二规则,确定单元130确定将颜色分配给包括在区域612中的像素中的每个像素,而不将颜色分配给图6A中包括在区域611和区域613中的像素中的每个像素。
[0107] 确定单元130将像素中的被确定为被分配颜色的每个像素的信息发送到像素着色器。像素着色器将颜色值分配给像素中被确定为被分配颜色的每个像素。
[0108] 根据以上描述,执行路径渲染的设备100可在不使用模板缓冲器的情况下计算每个像素的卷绕数。因此,可解决以下问题:由于模板缓冲器的使用而导致的输入到存储器/从存储器输出的数据的过度产生和由于模板缓冲器的使用而导致的输入到存储器/从存储器输出的冗余数据的产生。另外,由于执行路径渲染的设备100针对包括在帧中的像素中的每个像素并行产生卷绕数,因此可高速执行路径渲染,从而可在短时间内实现高分辨率渲染。
[0109] 图7是示出执行路径渲染的设备101的另一示例的框图。参照图7,执行路径渲染的设备101包括获取单元110、设置单元140、运算单元120和确定单元130。在图7中,仅示出执行路径渲染的设备101的构成元件。因此,除了图7中示出的构成元件之外,其他普通构成元件也可包括在执行路径渲染的设备101中。
[0110] 另外,图7中示出的执行路径渲染的设备101的获取单元110、设置单元140、运算单元120和确定单元130可与单个处理器或多个处理器相应。可通过多个逻辑门阵列来实现处理器,或者可通过普通微处理器和存储可由微处理器运行的程序的存储器的组合来实现处理器。另外,本领域中的普通技术人员将理解,可在不同形式的硬件中实现处理器。
[0111] 另外,图7中示出的执行路径渲染的设备101的获取单元110、运算单元120和确定单元130的操作与以上参照图1至图6C描述的获取单元110、运算单元120和确定单元130的操作相同。因此,在下面的描述中省略对获取单元110、运算单元120和确定单元130的详细描述。
[0112] 设置单元140使用顶点中的每个顶点的坐标分量来在帧中设置边界框。例如,设置单元140可通过使用顶点的坐标分量中的顶点的水平坐标分量的最大值和最小值以及顶点的垂直坐标分量的最大值和最小值,在帧中设置边界框。运算单元120计算包括在由设置单元140设置的边界框中的像素中的每个像素的卷绕数。以下参照图8A和图8B描述设置单元设置边界框的示例。
[0113] 图8A和图8B是示出设置单元设置边界框的示例的示图。图8A示出包括在帧810中的具有三角形形状的对象840。运算单元120计算包括在帧中的像素中的每个像素的卷绕数。因此,当对象840在帧810的整个区域中所占据的区域较小时,运算单元120甚至可在不针对包括在帧810中的像素中的所有像素计算卷绕数时执行路径渲染。换言之,通过仅计算与对象840邻近的像素812的卷绕数而不计算与对象840分隔较远的像素811的卷绕数,运算单元120仍可生成与已计算了像素811和像素812中的所有像素而产生的结果相同的结果。因此,可快速执行路径渲染。
[0114] 参照图8B,设置单元140在帧820中设置边界框830。运算单元120仅计算位于边界框830的内部的像素831中的每个像素的卷绕数。设置单元140通过使用包括在对象850中的顶点1的坐标(x1,y1)、顶点2的坐标(x2,y2)和顶点3的坐标(x3,y3)来设置边界框830。
[0115] 例如,设置单元140通过使用顶点1的坐标(x1,y1)、顶点2的坐标(x2,y2)和顶点3的坐标(x3,y3)中的水平坐标分量的最大值和最小值以及垂直坐标分量的最大值和最小值来设置边界框。首先,设置单元140选择顶点的x坐标分量(x1,x2,x3)中的最大值x3和最小值x1。随后,设置单元140选择顶点的y坐标分量(y1,y2,y3)中的最大值y2和最小值y1或y3。随后,设置单元140通过使用x坐标分量中的最大值x3和y坐标分量中的最大值y2来形成第一坐标(x3,y2)。另外,设置单元140通过使用x坐标分量中的最小值x1和y坐标分量中的最小值y1来形成第二坐标(x1,y1)。随后,设置单元140将具有连接第一坐标(x3,y2)和第二坐标(x1,y1)的对角线的矩形设置为边界框830。
[0116] 根据以上描述,由于设置单元140设置包括用于执行路径渲染的最小数量的像素的边界框,因此运算单元120可仅计算最小数量的像素的卷绕数。因此,执行路径渲染的设备100可快速执行路径渲染。
[0117] 图9是示出卷绕数产生设备150的示例的框图。图9中示出的执行路径渲染的设备102的获取单元110、设置单元140和确定单元130的操作与参照图1至图8B描述的操作相同。
因此,在下面的描述中省略对获取单元110、设置单元140和确定单元130的操作的详细描述。
[0118] 另外,尽管图9示出执行路径渲染的设备102包括设置边界框的设置单元140,但本示例不限于此。换言之,如以上参照图7所述,执行路径渲染的设备102即使在它不包括设置单元140时也能进行操作。
[0119] 另外,图9的卷绕数产生设备150可与单个处理器或多个处理器相应。可通过多个逻辑门阵列实现处理器,或者可通过普通微处理器和存储可由微处理器运行的程序的存储器的组合来实现处理器。另外,本领域中的普通技术人员将理解,可以以不同形式的硬件来实现处理器。
[0120] 图9的卷绕数产生设备150被连接到执行路径渲染的设备102。卷绕数产生设备150产生包括在帧中的像素中的每个像素的卷绕数。尽管图9示出卷绕数产生设备150位于执行路径渲染的设备102的外部,但本示例不限于此。换言之,卷绕数产生设备150可位于执行路径渲染的设备102的内部。
[0121] 根据参照图1至图8B的以上描述,像素的卷绕数由包括在执行路径渲染的设备100或101中的运算单元120计算。然而,根据将参照图9和图10描述的示例,像素的卷绕数由独立于执行路径渲染的设备102的卷绕数产生设备150计算,并被发送到执行路径渲染的设备102。因此,运算单元120将包括在路径数据中的顶点中的每个顶点的坐标和包括在帧中的像素的坐标的信息发送到卷绕数产生设备150,并从卷绕数产生设备150接收卷绕数。
[0122] 详细地讲,卷绕数产生设备150从执行路径渲染的设备102接收与至少一个路径相应的顶点中的每个顶点的坐标和包括在帧中的像素的坐标的信息。卷绕数产生设备150通过使用接收到的信息计算像素的卷绕数。卷绕数产生设备150将计算出的卷绕数返回到执行路径渲染的设备102。参照图10详细描述运算单元120和卷绕数产生设备150进行操作的示例。
[0123] 图10是示出运算单元120和卷绕数产生设备150进行操作的示例的框图。参照图10,运算单元120将包括在路径数据中的顶点中的每个顶点的坐标和将被计算卷绕数的像素的坐标发送到卷绕数产生设备150。运算单元120可将将被计算卷绕数的像素的坐标或坐标中的每个坐标的索引发送到卷绕数产生设备150。
[0124] 卷绕数产生设备150通过使用从运算单元120接收到的坐标的信息,计算包括在帧中的像素中的每个像素的卷绕数。由卷绕数产生设备150执行的计算卷绕数的方法与参照图2至图4D描述的由运算单元120执行的计算卷绕数的方法相同。换言之,运算单元120可将与卷绕数的计算相关的信息发送到独立于执行路径渲染的设备102而存在的卷绕数产生设备150,并可委托卷绕数产生设备150来进行卷绕数的计算。
[0125] 卷绕数产生设备150将计算出的卷绕数发送到运算单元120。当运算单元120将将被计算卷绕数的像素中的每个像素的坐标发送到卷绕数产生设备150时,卷绕数产生设备150将像素中的每个像素的卷绕数发送到运算单元120。
[0126] 图11是示出在GPU 1100中实现计算像素的卷绕数的方法的示例的框图。参照图11,在GPU 1100中运行的计算像素的卷绕数的方法包括分别在图1、图7或图9中示出的执行路径渲染的设备100、101或102中按照时间序列被处理的操作。因此,可理解,尽管在下面的描述中省略了如在图1、图7或图9中示出的执行路径渲染的设备100、101或102的上述内容,但上述内容可分别应用于参照图11的下面的描述。
[0127] 参照图11,GPU 1100包括顶点着色器1120、像素着色器1140和帧缓冲器1150。顶点着色器1120可用能够产生卷绕数的着色程序或装置(诸如几何着色器或计算机着色器)来代替。在下面的描述中,为方便解释,使用顶点着色器,但本示例不限于此。另外,除了提供GPU 1100之外,还提供卷绕数产生器1130。卷绕数产生器1130可包括在GPU 1100中或独立地位于GPU 1100的外部。
[0128] 顶点着色器1120接收路径数据1110的输入,其中,路径数据1110包括将被渲染的对象中包括的顶点的信息。路径数据1110包括指示顶点中的每个顶点的坐标的信息以及与形成对象的路径中的每个路径的开始点和结束点相应的顶点的信息。
[0129] 顶点着色器1120按照需要设置边界框(1121)。边界框是虚构框,该虚拟框包括帧中所包括的像素之中的将被计算卷绕数的像素。
[0130] 顶点着色器1120对包括在帧中的像素执行像素所有权测试(1122)。像素关系测试是计算包括在帧中的像素中的每个像素的卷绕数,并确定是否将颜色分配给像素中的每个像素的处理。当顶点着色器1120设置边界框时(1121),仅在包括在边界框中的像素执行像素所有权测试(1122)。当顶点着色器1120未设置边界框时(1121),对包括在帧中的像素中的所有像素执行像素所有权测试。
[0131] 当顶点着色器1120执行像素所有权测试时(1122),每个像素的卷绕数被计算。顶点着色器1120可直接计算每个像素的卷绕数或向卷绕数产生器1130查询每个像素的卷绕数。参照图12详细描述顶点着色器1120执行像素所有权测试(1122)的示例。
[0132] 图12是示出执行像素所有权测试(1122)的方法的示例的流程图。参照图12,顶点着色器1120执行像素所有权测试(1122)的示例包括可在图1、图7和图9中示出的运算单元120和确定单元130中按照时间序列被处理的操作。因此,尽管在下面的描述中省略了关于如图1、图7和图9中示出的运算单元120和确定单元130的上述内容,但上述内容可被应用于参照图12的下面的描述。
[0133] 在操作1210,顶点着色器1120检查将被执行像素所有权测试的像素是否位于边界框内。如果顶点着色器1120未设置边界框,则省略操作1210。
[0134] 在操作1220,顶点着色器1120计算像素的卷绕数WN。如果卷绕数产生器1130计算像素的卷绕数,则顶点着色器1120向卷绕数产生器1130查询像素的卷绕数,并从卷绕数产生器1130接收卷绕数。顶点着色器1120将顶点中的每个顶点(即,图12中的“Edge[i]”)的坐标的信息和像素(即,“P”)的坐标的信息发送到卷绕数产生器1130,并从卷绕数产生器1130接收卷绕数。参照图13至图14详细描述卷绕数产生器1130计算卷绕数的示例。
[0135] 在操作1230,顶点着色器1120确定是否基于第一规则将颜色分配给像素中的每个像素。第一规则是规定将颜色值分配给像素中具有不为0的卷绕数的每个像素的非零规则。当顶点着色器1120确定基于第一规则将颜色分配给像素中的每个像素时,处理执行操作
1240。否则,处理执行操作1235。
[0136] 在操作1235,顶点着色器1120确定是否基于第二规则将颜色分配给包括在帧中的像素中的每个像素。第二规则是将颜色值分配给像素中具有为奇数的卷绕数的每个像素的偶数-奇数规则。当顶点着色器1120确定基于第二规则将颜色分配给像素中的每个像素时,处理执行操作1237。否则,处理执行操作1260。
[0137] 在操作1237,顶点着色器1120确定包括在帧中的像素的卷绕数是否为奇数。奇数表示像素的卷绕数的绝对值是奇数。例如,当卷绕数是+3时,卷绕数被确定为是奇数,当卷绕数是-3时,卷绕数被确定为是奇数。顶点着色器1120针对卷绕数是奇数的像素执行操作1250,针对卷绕数是偶数或0的像素执行操作1260。
[0138] 在操作1240,顶点着色器1120确定包括在帧中的像素的卷绕数是否不为0。顶点着色器1120针对卷绕数是0的像素执行操作1260,针对卷绕数不是0的像素执行操作1250。
[0139] 在操作1250,顶点着色器1120将被确定为被分配颜色的像素的信息发送到像素着色器1140。例如,顶点着色器1120可将被确定为被分配颜色的像素的坐标的信息发送到包括在像素着色器1140中的片段着色器。
[0140] 在操作1260,顶点着色器1120确定基于操作1210至操作1250被执行像素所有权测试的像素是否是包括在帧中的最后一个像素。如果被执行像素所有权检测的像素被确定为是最后一个像素,则顶点着色器1120终止像素所有权测试。相反,基于操作1210至操作1250对另一像素执行像素所有权测试。
[0141] 再参照图11,像素着色器1140基于从顶点着色器1120接收到的像素的信息,对像素中的每个像素执行像素处理。换言之,像素着色器1140基于从顶点着色器1120接收到的像素的信息,将颜色值分配给像素中的每个像素。
[0142] 首先,像素着色器1140或包括在像素着色器1140中的片段着色器将颜色分配给每个像素或执行片段着色(1141)。片段着色器可通过使用预先存储的纹理来将颜色值分配给每个像素。
[0143] 随后,像素着色器1140对每个像素执行后处理工作或执行片段操作(1143)。后处理工作可包括融合和/或抗锯齿
[0144] 像素着色器1140将像素处理的结果的信息发送到帧缓冲器1150。帧缓冲器1150存储从像素着色器1140接收到的信息。
[0145] 图13是示出计算卷绕数的方法的示例的流程图。参照图13,卷绕数产生器1130计算卷绕数的操作的示例包括可由图1和图7的运算单元或图9的卷绕数产生设备150按照时间序列进行处理的操作。因此,尽管在下面的描述中省略了关于如图1、图7和图9中示出的运算单元120和卷绕数产生设备150的上述内容,但上述内容可被应用于参照图13的下面的描述。
[0146] 在操作1310,卷绕数产生器1130从顶点着色器1120接收顶点中的每个顶点(即,图13中的“Edge[i]”)的坐标和像素P的坐标。
[0147] 在操作1320,卷绕数产生器1130将像素P的卷绕数(即,图13中的“N”)设置为0。
[0148] 在操作1330,卷绕数产生器1130确定路径是否位于像素P的一侧。尽管在图13中,卷绕数产生器1130确定路径是否位于像素P的右侧(即,图13中的“P在Edge[i]的左侧”),但本示例不限于此。当路径被确定为位于像素P的右侧时,程序执行操作1340。否则,程序执行操作1380。参照图14对卷绕数产生器1130确定路径是否位于像素P的一侧的示例进行详细描述。
[0149] 图14是示出确定路径是否位于像素P的一侧的方法的示例的流程图。在下面的描述中,x坐标表示与帧的水平方向相应的坐标,y坐标表示与帧的垂直方向相应的坐标。另外,在下面的描述中,假设路径位于像素P的右侧,路径的结束点V2的x坐标分量V2.x大于开始点V1的x坐标分量V1.x,并且路径的结束点V2的y坐标分量V2.y大于开始点V1的y坐标分量V1.y。然而,提供上述假设是为了方便解释,并且卷绕数产生器1130确定路径是否位于像素P的一侧的方法不限于上述假设。
[0150] 在操作1410,卷绕数产生器1130获得包括在帧中的路径的开始点V1的坐标(V1.x,V1.y)、结束点V2的坐标(V2.x,V2.y)以及将被计算卷绕数的像素P的坐标(P.x,P.y)。
[0151] 在操作1420和操作1430,卷绕数产生器1130确定路径是否位于像素P的右侧。例如,卷绕数产生器1130确定在水平右方向上从像素P延伸出的虚构射线是否与路径相交。当虚构射线与路径相交时,卷绕数产生器1130确定路径位于像素P的右侧。以下描述卷绕数产生器1130检查在水平右方向上从像素P延伸出的虚构射线是否与路径相交的方法。
[0152] 在操作1420,卷绕数产生器1130确定像素P的y坐标分量P.y是否大于开始点V1的y坐标分量V1.y,并小于结束点V2的y坐标分量V2.y。当像素P的y坐标分量P.y大于开始点V1的y坐标分量V1.y,并小于结束点V2的y坐标分量V2.y时,程序执行操作1430。否则,程序执行图13的操作1380。
[0153] 在操作1430,卷绕数产生器1130计算第一值,其中,第一值是结束点V2的x坐标分量V2.x和开始点V1的x坐标分量V1.x之间的差(V2.x-V1.x)与像素P的y坐标分量P.y和开始点V1的y坐标分量V1.y之间的差(P.y-V1.y)的乘积。卷绕数产生器1130计算第二值,其中,第二值是像素P的x坐标分量P.x和开始点V1的x坐标分量V1.x之间的差(P.x-V1.x)与结束点V2的y坐标分量V2.y和开始点V1的y坐标分量V1.y之间的差(V2.y-V1.y)的乘积。随后,卷绕数产生器1130确定第一值是否大于第二值。
[0154] 当第一值大于第二值时,卷绕数产生器1130确定在水平右方向上从像素P延伸的虚构射线与路径相交,并随后程序执行图13的操作1340。当第一值小于或等于第二值时,卷绕数产生器1130确定在水平右方向上从像素P延伸的虚构射线没有与路径相交,并随后程序执行图13的操作1380。
[0155] 再参照图13,在操作1340,卷绕数产生器1130确定位于像素P的右侧的路径是否顺时针旋转。当路径被确定为顺时针形成完整的圆时(即,图13中的“边缘是顺时针方向”)程序执行操作1350。相反,程序执行操作1360。
[0156] 在操作1350,卷绕数产生器1130将像素P的卷绕数增加1。
[0157] 在操作1360,卷绕数产生器1130确定位于像素P的右侧的路径是否逆时针旋转。当路径被确定为逆时针形成完整的圆时(即,图13中的“边缘是逆时针方向”),程序执行操作1370。否则,程序执行操作1380。
[0158] 在操作1370,卷绕数产生器1130将像素P的卷绕数减少1。
[0159] 在操作1380,卷绕数产生器1130确定是否存在另一路径。当确定存在另一路径时(即,图13中的“更多边缘”),程序执行操作1330。否则,程序执行操作1390。
[0160] 在操作1390,卷绕数产生器1130返回像素P的卷绕数。
[0161] 图15是示出执行路径渲染的方法的示例的流程图。参照图15,执行路径渲染的方法包括可分别在图1、图7或图9中示出的执行路径渲染的设备100、101或102中或在图11中示出的GPU 1100中按照时间序列被处理的操作。因此,可理解,尽管在下面的描述中省略了关于分别如图1、图7或图9中所示的执行路径渲染的设备100、101或102或关于如图11中所示的GPU 1100的上述描述,但上述描述被应用于参照图15的下面的描述。
[0162] 在操作1510,获取单元1100获取在将被渲染的对象中的顶点的信息。顶点与连接顶点的至少一个路径相应。
[0163] 在操作1520,运算单元120基于像素中的每个像素的位置与连接顶点的至少一条路径的行进方向之间的关系,计算包括在帧中的像素中的每个像素的卷绕数。
[0164] 在操作1530,确定单元130基于像素中的每个像素的卷绕数,确定是否将颜色分配给像素中的每个像素。
[0165] 可在不使用模板缓冲器的情况下执行描述的进行路径渲染的示例。因此,由于并行产生关于包括在帧中的像素中的每个像素的卷绕数,因此可高速执行路径渲染,并可在短时间内实现高分辨率渲染。
[0166] 可使用一个或更多个硬件组件、一个或更多个软件组件或者一个或更多个硬件组件和一个或更多个软件组件的组合,实现上述各种单元、元件和方法。
[0167] 硬件组件可以是例如物理地执行一个或更多个操作的物理装置,但不限于此。硬件组件的示例包括电阻器、电容器、电感器、电源、频率产生器、运算放大器功率放大器、低通滤波器高通滤波器带通滤波器、模数转换器、数模转换器和处理装置。
[0168] 可例如通过由软件或指令控制以执行一个或更多个操作的处理装置来实现软件组件,但不限于此。计算机、控制器或其他控制装置可促使处理装置运行软件或执行指令。可通过一个处理装置实现一个软件组件,通过一个处理装置实现两个或更多个软件组件,或通过两个或更多个处理装置实现两个或更多个软件组件。
[0169] 可使用一个或更多个通用或专用计算机(诸如,例如,处理器、控制器和算术逻辑单元、数字信号处理器、微型计算机、现场可编程阵列、可编程逻辑单元、微处理器或能够运行软件或执行指令的任何其它装置)来实现处理装置。处理装置可运行操作系统(OS)并可运行在OS下操作的一个或更多个软件应用。处理装置可在运行软件或执行指令时访问、存储、操作、处理和创建数据。为简单起见,虽然可在描述中使用单数的术语“处理装置”,但本领域普通技术人员将理解:处理装置可包括多个处理元件和多个类型的处理元件。例如,处理装置可包括一个或更多个处理器或者一个或更多个处理器和一个或更多个控制器。另外,不同处理配置是可能的,诸如并行处理器或多核处理器
[0170] 被配置为实现用于执行操作A的软件组件的处理装置可包括处理器,所述处理器被编程为运行软件或指令来控制处理器执行操作A。此外,被配置为实现用于执行操作A、操作B和操作C的软件组件的处理装置可具有各种配置,诸如,例如被配置为实现用于执行操作A、B和C的软件组件的处理器;被配置为实现用于执行操作A的软件组件的第一处理器和被配置为实现用于执行操作B和C的软件组件的第二处理器;被配置为实现用于执行操作A和B的软件组件的第一处理器和被配置为实现用于执行操作C的软件组件的第二处理器;被配置为实现用于执行操作A的软件组件的第一处理器、被配置为实现用于执行操作B的软件组件的第二处理器和被配置为实现用于执行操作C的软件组件的第三处理器;被配置为实现用于执行操作A、B和C的软件组件的第一处理器、被配置为实现用于执行操作A、B和C的软件组件的第二处理器或者一个或更多个处理器(每个处理器实现操作A、B和C中的一个或更多个操作)的任何其他配置。尽管这些示例是指三个操作A、B和C,但可实现的操作的数量不限于三个,而可以是实现期望的结果或执行期望的任务所需的任何数量的操作。
[0171] 用于控制处理装置实现软件组件的软件或指令可包括用于独立地或共同地指导或配置处理装置执行一个或更多个期望的操作的计算机程序、一段代码、指令或它们的一些组合。软件或指令可包括可由处理装置直接运行的机器代码(诸如由编译器产生的机器代码)和/或可由处理装置使用解释器来执行的更高级代码。可在任何类型的机器、组件、物理或虚拟装备、计算机存储介质或装置或能够将指令或数据提供给处理装置或由处理装置解释的传播信号波中永久地或临时地实施所述软件或指令以及任何关联的数据、数据文件和数据结构。也可将所述软件或指令以及任何关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得按照分布方式来存储并执行所述软件或指令以及任何关联的数据、数据文件和数据结构。
[0172] 例如,可在一个或更多个非暂时性计算机可读存储介质中记录、存储或固定所述软件或指令以及任何关联的数据、数据文件和数据结构。非暂时性计算机可读存储介质可以是能够存储所述软件或指令以及任何关联的数据、数据文件和数据结构的任何数据存储装置,使得它们可被计算机系统或处理装置读取。非暂时性计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、闪存、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘或本领域普通技术人员已知的任何其它非暂时性计算机可读存储介质。
[0173] 可由所述示例所属领域的程序员基于附图和在此提供的它们的相应描述来容易地构建用于实施在此公开的示例的功能程序、代码和代码段。
[0174] 虽然本公开包括特定示例,但是将对本领域普通技术人员清楚的是:在不脱离权利要求及其等同物的精神和范围的情况下,可在这些示例中进行形式和细节上的各种改变。如果按照不同顺序执行描述的技术,和/或如果按照不同方式组合在描述的系统、架构、装置或电路中的组件和/或由其它组件或其等同物来替代或补充在描述的系统、架构、装置或电路中的组件,则可实现适当的结果。因此,本公开的范围不由详细描述来限定,而是由权利要求及其等同物来限定,并且在权利要求及其等同物的范围内的全部变化将被解释为被包括在本公开中。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈