在可编程图形架构上渲染修整的nurb的制作方法

文档序号:6583629阅读:208来源:国知局
专利名称:在可编程图形架构上渲染修整的nurb的制作方法
技术领域
本发明总体上涉及在基于处理器的系统中渲染图像。
背景技术
为了描绘复杂几何形状,必须以数学形式来表示这些形状。在图形中,样条具有在 表面上从零到一变化的参数值t。样条可以由等式来表示,该等式对邻近点进行加权并且描 述了如何将他们组合以创建曲线部分。 通常,在三维空间中,整个表面由多个样条的组合来确定。因此,在一个点处的改 变会导致该表面的一部分的变形,所述表面的大小按照多项式的阶数成比例地增长。
B样条是一种曲面表示。B样条为它的各种控制点提供局部控制和影响。B样条具 有与自然样条相同的连续性,但是它们不内插它们的控制点。控制点是在用于表示几何图 像的形状的多边形中的顶点。在B样条中的B代表"基本(basis)",因为B样条可以被表 示为多个多项式基函数的加权和。 有理B样条是多项式的比率。非均匀有理B样条或NURB的特征在于所谓的结点 的非均匀位置。结点是沿着一个弯曲段的样条参数的起始值。通过使连续的结点值具有相 同的起始值,可以在空间中的该特定点处改变表面的曲率。 如果结点是等间隔的,那么该表面将被称为是均匀的。在NURB中的非均匀意味着 结点位置可能不是等间隔的。 通过定义在NURB的表面上的曲线并且在NURB表面中开孔,来得到修整的非均匀 有理B样条或修整的NURB。 NURB允许在游戏、计算机辅助设计、科学研究可视化和电影中 所使用的高保真弯曲几何图形的表示。


图1是一个实施例的系统描述;以及 图2示出了根据一个实施例,在图1的系统中的在中央处理单元侧和图形处理单 元侧的操作。
具体实施例方式
根据一些实施例,可以通过图形处理器来生成修整的NURB。这避免了在中央处理 单元和图形处理器之间反复地发送复杂的图形信息。这种传输会用尽可用的带宽并且使得 复杂形状的渲染变得不可行。 参照图l,典型的图形流水线从图形处理器112通过链路106向帧缓冲器114提供 渲染的图形,从而经由链路107在显示屏118上进行显示。图形处理器112可以通过总线 105,例如外围组件互连(PCI)总线,来耦合到芯片组核心逻辑电路IIO。图形处理器112可 以是多核处理器。核心逻辑电路110被耦合到主处理器或中央处理单元(CPU)IOO。中央 处理单元可以是处理计算机系统的各种处理功能的一个或多个处理器,而图形处理器专用于图形功能。核心逻辑电路还可以被耦合到可移动介质136、硬盘驱动器134,和主存储器 132,其可以存储程序139。核心逻辑电路110可以通过链路108耦合到用于显示控制的键 盘或鼠标120。程序139可以由处理器100或处理器112所执行的指令组成。因此,主存储 器132构成了根据本发明的一些实施例的可以存储可执行指令的计算机可读介质的一个 示例。 参照图2,描述了经由中间总线105在CPU 100和图形处理器单元112上的操作。 最初,中央处理单元100加载控制点。控制点是组成数字化图像的多边形的顶点。然后,处 理器100加载修整曲线(trimming curve)。修整曲线是可以被用于修整碎片(patch)以创 建曲线形状的曲线。 碎片与正方形的纸张类似。纸张可以被折叠或折皱,但是它仍然是正方形的纸张。 折叠或折皱正方形的纸张不会使得它变成圆形。相反,如果从正方形的纸张中将圆形剪下 来,那么纸张会变为圆形。 NURB是在三维空间中的参数表面。复杂的表面是由碎片来组成的并且每一个碎片 都是与某对参数u和v相对应的点的集合,其中u和v都大于或等于零并且小于或等于一。
所以,在参数空间中,碎片等同于正方形的纸张。通过将参数u和v变换到三维空 间中,将碎片进行整形,但是碎片不会变为圆形,你不能通过将正方形的纸张折叠或折皱而 使其变为圆形。通过修整可以将碎片变为圆形。 在参数空间中进行剪切并且这种剪切被叫做修整曲线(或者如果该剪是圆形的, 那么就叫做修整圆形,或者如果该剪切是直的,那么就叫做修整线)。圆形的剪切生成两个 表面。第一表面是该剪切的外侧部分(其对应于其中具有圆孔的正方形的纸张)。第二表 面是内侧部分,其是被剪切下来的圆盘。 因此,由处理器100加载修整曲线。如在块66中指示,在处理器100中还进行了 对修整的预计算。如在块64处指示,在顶点和索引缓冲器中,在处理器100中正在对顶点 和索引数据进行计算。控制点和所得到的修整曲线通过总线105传输到图形处理器112,并 且具体地是传输到其顶点着色器68。 然后,图形处理器的顶点着色器使用所传输的控制点来对NURB进行镶嵌 (tessellation)。在块68中的顶点着色器对顶点进行变换。顶点着色器68以如下方式工 作。顶点着色器对变量f 1oat2co1进行计算,其等于f 1oat2 ((float (Vertld% g_siZe)) / g_size, (float (vertld/g_size))/g_size) 。 Vertld是指范围
之内的 输入顶点的数量。总共有g_size*g_size个顶点。顶点的这个数量(vertld)对应于[u, v]的均匀的分隔(division),其在NURB参数空间中小于或等于一并且大于或等于零。该 步骤建立了在正方形内的顶点数量与位置的对应关系。 下一步骤是将float4 res4等于EvalSurface(col. x, col. y)。对于在正方 形(col)内的给定位置,通过对NURB表面上的点的求值来进行变换(u, v) — (x, y, z)。 EvalSurface()函数的内容是一种用于对表面上的点进行求值的公知的方法。顶点着色器 接下来将输入参数传递给图形流水线的下一阶段。 然后,几何着色器在块70使用从中央处理单元100传输的修整曲线来修整NURB, 这也在块70中说明了。到了修整曲线相交的程度时,沿着该修整来选择它们,以简化通过 在三角形内的两个或更多个修整段的相交而获得的修整曲线的片断(Piece)。
几何着色器以如下方式工作。首先,按照以下的方法来计算顶点的法线
float3 normal = normalize(cross(edgel,edge2));
如果该三角形必须作为整体进行修整,那么不产生输出。 使用以下伪代码来判断向量m—triml和m_trim2的红色(r)、绿色(g),和蓝色(b) 分量是否包含关于在修整曲线与被处理的三角形的顶点的邻边之间的交点的信息
if ((input
. m_triml. r | | input
. m_triml. g | | input
. m_triml. b | | input
. m_trim2. r | (input [1]. m_triml. r input [1]. m_trim2. r | (input [2]. m_triml. r input [2] m_trim2. r |
i叩ut
.m—trim2. b)&& I input [1]. m_triml. b | | input [l]. m_trim2. b)&& I input[2]. m_triml.b| | input[2]. m_trim2. b))
input
. m_trim2. g| I input[1]. m_triml. g input[1]. m_trim2. g| I input[2]. m_triml. g input[2]. m_trim2. g| 然后,处理所有顶点对从而通过使用向量m—triml和m_trim2形式的与交点相关 的信息来寻找相交的边。因此,产生了输出三角形或四边形,这取决于被处理的三角形是如 何相交的 output. m_posPS = input[tri_compl]. m_posPS ;
output. m_pos0S = input[tri_compl]. m_pos0S ;
TriStream. Append (output); output. m_posPS = input[tri_compl]. m_posPS*coefs
+input [nbors
]. m_ posPS化oefs [1]; output. m_pos0S = input[tri_compl]. m_pos0S*coefs
+input [nbors
]. m_ pos0S化oefs [1]; TriStream. Append (output); output. m_posPS = input[tri_compl]. m_posPS*coefs [2]+input [nbors [1]]. m_ posPS化oefs [3]; output. m_pos0S = input[tri_compl]. m_pos0S*coefs [2]+input [nbors [1]]. m_ pos0S化oefs [3]; TriStream. Append (output); 上述代码的结果是输出三角形。该输出三角形的顶点中的一个是经处理的三角形 (input [tri_compl])的一个顶点。其它两个顶点是经处理的三角形的边与修整曲线之间的 交点。在一些情况下,不必将经处理的三角形作为整体来修整并且它不包含如上所处理的 交点。这意味着所有的顶点都位于被修整的部分的外部并且它们刚好通过
{ output. m_posPS = input
. m_posPS ; output. m_pos0S = input
. m_pos0S ; TriStream. Append(output);
output. m_posPS = input[1]. m_posPS ; output. m_pos0S = input[1]. m_pos0S ; TriStream. Append(output); output. m_posPS = input[2]. m_posPS ;


6
output. m_posOS = input[2]. m_posOS ; TriStre咖.Append (output); } 然后,图形处理器发送这些新的多边形到像素着色器72。像素着色器将其光栅化 并且将其渲染到屏幕188。 在一些实施例中,不是使用视觉修正,而是使用几何修整。在一些实施例中,可以 在一次循环(single pass)中实现修整。在一个实施例中,不是传输整个多边形集合,而是 将要被镶嵌的网格的控制点传输到图形流水线。在一些实施例中,不是使用通用的处理单 元,而是使用几何着色器对NURB碎片执行对NURB的修整或镶嵌。 可以以各种硬件架构来实现本文所描述的图形处理技术。例如,图形功能可以集 成在芯片组内。或者,可以使用分立的图形处理器。作为另一个实施例,可以通过包括多核 处理器在内的通用处理器来实现图形功能。 贯穿该说明书所提及的"一个实施例"或"实施例"意味着结合该实施例描述的特 定特征、结构或特点包括在本发明所涵盖的至少一个实现中。因此,短语"一个实 施例"或 "在实施例中"的出现并非必然是指相同的实施例。此外,可以在除了所说明的特定的实施 例之外其它合适的形式中实现特定的特征、结构,或特点,并且所有这些形式都可以包括在 本申请的权利要求的范围之内。 虽然本发明就有限数量的实施例进行了描述,但是本领域普通技术人员应当理解 可以从上述实施例进行多种变型和改变。所附的权利要求旨在覆盖落入本发明的实质精神 和范围内的所有这种变型和改变。
权利要求
一种方法,包括在图形处理器中确定修整的NURB。
2. 根据权利要求1所述的方法,包括从耦合到所述图形处理器的中央处理单元加载控制点。
3. 根据权利要求2所述的方法,包括从所述中央处理单元加载修整曲线。
4. 根据权利要求3所述的方法,包括将所述控制点和所述修整曲线通过总线传输给 所述图形处理器。
5. 根据权利要求3所述的方法,包括在几何着色器中使用修整曲线来修整所述NURB。
6. 根据权利要求1所述的方法,包括使用顶点着色器,用所述控制点来镶嵌NURB。
7. 根据权利要求6所述的方法,包括使用所述顶点着色器来对顶点进行变换。
8. 根据权利要求7所述的方法,包括将新的多边形发送给所述像素着色器,并且在所述像素着色器中光栅化所述新的多边形。
9. 一种图形处理器,包括几何着色器,其使用修整曲线来修整NURB碎片; 顶点着色器,其使用控制点来镶嵌所述NURB碎片。
10. 根据权利要求9所述的图形处理器,其从中央处理单元接收所述控制点。
11. 根据权利要求10所述的图形处理器,其从所述中央处理单元接收所述修整曲线。
12. 根据权利要求11所述的图形处理器,所述顶点着色器对顶点进行变换。
13. 根据权利要求12所述的图形处理器,所述顶点着色器接收多边形并且将所述多边 形光栅化。
14. 一种中央处理单元,包括用于顶点和索引缓冲器的单元,其计算顶点和索引数据; 用以对修整进行预计算的设备;所述处理器将控制点和修整曲线传输给图形处理器以便渲染NURB。
15. 根据权利要求14所述的中央处理单元,其通过芯片组核心逻辑电路耦合到图形处理器。
16. —种系统,包括 中央处理单元;图形处理器,其耦合到所述中央处理单元,所述图形处理器使用修整曲线来修整NURB碎片。
17. 根据权利要求16所述的系统,所述中央处理单元将所述曲线发送给所述图形处理器。
18. 根据权利要求16所述的系统,所述图形处理器包括几何着色器,所述几何着色器 修整所述NURB碎片。
19. 根据权利要求16所述的系统,所述图形处理器使用控制点来镶嵌所述NURB碎片。
20. 根据权利要求19所述的系统,所述中央处理单元将所述控制点发送给所述图形处理器。
21. 根据权利要求19所述的系统,所述图形处理器包括顶点着色器,所述顶点着色器 镶嵌所述NURB碎片。
22.根据权利要求21所述的系统,所述顶点着色器接收多边形并且光栅化所述多边形。
全文摘要
可以在图形处理器而不是在中央处理单元上渲染修整的NURB。在一些实施例中,这可以大大减少需要从中央处理单元发送到图形处理器的信息量。
文档编号G06T15/40GK101714248SQ20091022145
公开日2010年5月26日 申请日期2009年9月30日 优先权日2008年9月30日
发明者A·莱克, V·丘马科夫 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1