首页 / 专利库 / 玩具与游戏 / 游戏机 / 用于实时生成细分表面的方法和系统

用于实时生成细分表面的方法和系统

阅读:930发布:2022-08-29

专利汇可以提供用于实时生成细分表面的方法和系统专利检索,专利查询,专利分析的服务。并且一种用于实时生成细分表面的方法。生成细分的面的面信息和细分数据,细分的面由大量的细分表面构成。细分的面的面信息和细分数据分别包括确定细分的面的 顶点 和边。两个位标记对应于细分的面的细分数据中识别的每个边。一个位标记用于识别对应的边是否正第二次被使用,另一位标记用于显示对应的边是否被使用两次。细分的面的细分数据然后用于生成细分的附加边。由细分的面的细分数据所识别的每一边被一对细分的边确定。如果一个边被使用两次和正在被第二次使用,构成边的细分的边的顺序相反。细分表面的面信息然后使用细分的面的面信息和细分数据生成,细分表面的细分数据使用细分的附加边生成。类似地,细分表面的面信息和细分数据分别包括确定细分表面的顶点和边;两个位标记对应于细分表面的细分数据中识别的每一边。在细分的面和细分表面的面信息和细分数据分别生成之后,为确定细分的面的每一边创建新的顶点。一个内部的顶点位标记被用于显示新创建的顶点是否是一个内部顶点。如果新顶点是一内部顶点,那么使用一标准(3/8,3/8,1/8,1/8)顶点加权系统,边共享相邻顶点的合成权数被减半。所有的顶点然后被替换以创建更平滑的细分的面。,下面是用于实时生成细分表面的方法和系统专利的具体信息内容。

1.一种用于从一细分的面生成多个细分表面的方法,包括:
生成用于所述细分的面的第一组面信息和第一组细分数 据,其中所述第一组面信息和第一组细分数据分别包括多个顶 点和多个边;
使用所述第一组细分数据生成多个细分的边和多个附加 边;
按照第一顺序使用一对经过细分的边,限定所述多个边 中的每个边,其中,如果一个边被使用两次和正在被第二次使 用,则按照与所述第一顺序相反的第二顺序,重新排列这对经 过细分的边,这对经过细分的边限定了所述多个边中的每个 边;
使用所述第一组面信息和细分数据,为所述多个细分表 面中的每一个生成第二组面信息;
使用所述多个经过细分的边和所述多个附加边,为所述 多个细分表面中的每一个生成第二组细分数据;
为所述多个边的每一个生成一个顶点;以及
替换所述多个顶点和为所述多个边生成的顶点。
2.根据权利要求1所述的方法,其中,为所述多个边的每一个生 成所述顶点的步骤还包含:
如果所述顶点是一内部顶点以及使用(3/8,3/8,1/8,1/8) 顶点加权系统,对一共享边顶点的合成权数除二。
3.根据权利要求1所述的方法,其中关于所述边是否被使用两次 和正在被第二次使用的信息分别被储存在与边对应的第一和 第二位标记中。
4.根据权利要求3所述的方法,其中,为所述多个边的每一个生 成所述顶点的步骤还包括:
通过使用储存在所述第一位标记中的信息确定被生成的 所述顶点是否是一内部顶点或外部顶点。
5.根据权利要求1所述的方法,其中:
所述多个顶点包括第一顶点、第二顶点、和第三顶点;
所述多个边包括第一边、第二边、和第三边;以及
生成所述第二组面信息的步骤还包括:
通过使用所述第一边、所述第二顶点、和所述第二边获 得第一细分表面的面信息;
通过使用所述第二边、所述第三顶点、和所述第三边获 得第二细分表面的面信息;
通过使用所述第三边、所述第一顶点、和所述第一边获 得第三细分表面的面信息;
通过使用所述第一边、所述第二顶点、和所述第三边获 得第四细分表面的面信息。
6.根据权利要求5所述的方法,其中:
所述多个细分的边包括组成所述第一边的第一对细分的 边、组成所述第二边的第二对细分的边、和组成所述第三边的 第三对细分的边;
所述多个附加边包括第一附加边、第二附加边、和第三 附加边;以及
生成所述第二组细分数据的步骤还包含:
通过使用所述第一对细分的边中的第二边、所述第二对 细分的边中的第一边、和所述第一附加边获得所述第一细分表 面的细分数据;
通过使用所述第二对细分的边中的第二边、所述第三对 细分的边中的第一边、和所述第二附加边获得所述第二细分表 面的细分数据;
通过使用所述第三对细分的边中的第二边、细分的边的 第一对的第一个、和第三个附加边获得所述第三细分表面的细 分数据;以及
通过使用所述第一附加边、第二附加边、和第三附加边 获得所述第四细分表面的细分数据。
7.根据权利要求1所述的方法,其中,所述第二组面信息和所述 第二组细分数据分别包括用于限定所述对应的细分表面的多 个顶点和边。
8.根据权利要求1所述的方法,其中,通过使用计算机软件实施 所述方法。
9.根据权利要求8所述的方法,其中,所述方法被实时地实施, 因此允许所述多个细分表面被实时地生成。
10.根据权利要求8所述的方法,其中,使用计算机软件实施的所 述方法被储存在计算机可读介质上。
11.一种用于从一细分的面生成多个细分表面的系统,包括:
用于生成所述细分的面的第一组面信息和第一组细分数 据的模,其中,所述第一组面信息和第一组细分数据分别包 括多个顶点和多个边;
用于使用所述第一组细分数据生成多个细分的边和多个 附加边的模块;
用于以第一顺序使用一对细分的边限定所述多个边中的 每个边的模块,其中,如果一个边被使用两次和正在被第二次 使用,以与所述第一顺序相反的第二顺序重新排列这对细分的 边,这对细分的边用于限定所述多个边中的每一个边;
用于使用所述第一组面信息和所述第一组细分数据为所 述多个细分表面中的每一个细分表面生成第二组面信息的模 块;
用于使用所述多个细分的边和所述多个附加边为所述多 个细分表面中的每一个细分表面生成第二组细分数据的模块;
用于为所述多个边中的每个边生成一顶点的模块;以及
用于对所述多个顶点和为所述多个边而生成的顶点进行 替换的模块。
12.根据权利要求11所述的系统,其中,用于为所述多个边中的 每个边生成所述顶点的模块还包括:
一模块,用于在一共享边顶点是一内部顶点和使用一 (3/8,3/8,1/8,1/8)顶点加权系统的情况下,把所述顶点 的合成权数除二。
13.根据权利要求11所述的系统,其中有关所述边是否被使用两 次和正在被第二次使用的信息分别被储存在与所述边对应的 第一标记和第二位标记中。
14.根据权利要求13所述的系统,其中,用于所述多个边中的一 个边生成所述顶点的模块还包括:
用于通过使用储存在所述第一位标记中的信息确定被生 成的所述顶点是一内部顶点还是一外部顶点的模块。
15.根据权利要求11所述的系统,其中:
所述多个顶点包括第一顶点、第二顶点、和第三顶点;
所述多个边包括第一边、第二边、和第三边;以及
用于生成所述第二组面信息的所述模块还包括:
一模块,用于通过使用所述第一边、所述第二顶点、和 所述第二边,获得第一细分表面的面信息;
一模块,用于通过使用所述第二边、所述第三顶点、和 所述第三边,获得第二细分表面的面信息;
一模块,用于通过使用所述第三边、所述第一顶点、和 所述第一边,获得第三细分表面的面信息;以及
一模块,用于通过使用所述第一边、所述第二顶点、和 所述第三边,获得第四细分表面的面信息。
16.根据权利要求15所述的系统,其中:
所述多个细分的边包括组成所述第一边的第一对细分的 边、组成所述第二边的第二对细分的边、和组成所述第三边的 第三对细分的边;
所述多个附加边包括第一附加边、第二附加边、和第三 附加边;以及
用于生成所述第二组细分数据的所述模块还包括:
一模块,用于通过使用所述第一对细分的边中的第二个 边、所述第二对细分的边中的第一个边、和所述第一个附加边, 获得所述第一个细分表面的细分数据;
一模块,用于通过使用所述第二对细分的边中的第二个 边、所述第三对细分的边中第一个边、和所述第二个附加边, 获得所述第二个细分表面的细分数据;
一模块,用于通过使用所述第三对细分的边中的第二个 边、所述第一对细分的边中的第一个边、和所述第三个附加边, 获得所述第三个细分表面的细分数据;以及
一模块,用于通过使用所述第一附加边、第二附加边、 和第三附加边,获得所述第四细分表面的细分数据。
17.根据权利要求11所述的系统,其中,所述第二组面信息和所 述第二组细分数据分别包括多个限定所述对应的细分表面的 顶点和边。
18.根据权利要求11所述的系统,其中,通过使用计算机软件执 行所述系统。
19.根据权利要求18所述的系统,其中,所述系统被实时运行, 因此允许所述多个细分表面被实时地生成。
20.根据权利要求18所述的系统,其中,使用计算机软件实施的 所述系统被储存在一计算机可读介质上。
21.一种计算机可读介质,用于储存从一细分的面生成多个细分表 面的指令,其包括:
一组用于为所述细分的面生成第一组面信息和第一组细 分数据的指令,其中所述第一组面信息和第一组细分数据分别 包括多个顶点和多个边;
一组用于使用第一组细分数据生成多个细分的边和多个 附加边的指令;
一组用于通过按照第一顺序使用一对细分的边来限定来 自所述多个边中每一个边的指令,其中如果一个边被使用两次 或正在被第二次使用,限定所述边的该对细分的边按照与第一 顺序相反的第二顺序重新排列;
一组用于使用所述第一组面信息和细分数据为所述多个 细分表面中的每一个细分表面生成第二组面信息的指令;
一组用于使用所述多个细分的边和所述多个附加边为所 述多个细分表面中的每一个细分表面生成第二组细分数据的 指令;
一组用于为所述多个边中的每一个边生成一顶点的指 令;以及
一组用于对所述多个顶点和为所述多个边生成的顶点进 行替换的指令。
22.根据权利要求21所述的计算机可读介质,其中用于为所述多 个边中的每一个边生成顶点的该组指令还包括:
一组用于在一共享边顶点是一内部顶点以及使用(3/8, 3/8,1/8,1/8)顶点加权系统的情况下把所述顶点的合成权数 除二的指令。
23.根据权利要求21所述的计算机可读介质,其中关于所述边是 否被使用两次以及正在被第二次使用的信息分别储存在与所 述边对应的第一标记和第二位标记中。
24.根据权利要求23所述的计算机可读介质,其中用于为所述多 个边中的每一个边生成顶点的指令还包括:
一组用于通过使用存储在所述第一位标记中的信息确定 被生成的所述顶点是否是内部顶点或外部顶点的指令。
25.根据权利要求21所述的计算机可读介质,其中:
所述多个顶点包括第一顶点、第二顶点、和第三顶点;
所述边的多数包括第一边、第二边、和第三边;以及
用于生成第二组面信息的该组指令还包括:
一组用于通过使用所述第一边、所述第二顶点、和所述 第二边获得第一细分表面的面信息的指令;
一组用于通过使用所述第二边、所述第三顶点、和所述 第三边获得第二细分表面的面信息的指令;
一组用于通过使用所述第三边、所述第一顶点、和所述 第一边获得第三细分表面的面信息的指令;以及
一组用于通过使用所述第一边、所述第二顶点、和所述 第三边获得第四细分表面的面信息的指令。
26.根据权利要求25所述的计算机可读介质,其中:
所述多个细分的边包括组成所述第一边的第一对细分的 边、组成所述第二边的第二对细分的边、和组成所述第三边的 第三对细分的边;
所述多个附加边包括所述第一附加边、所述第二附加边、 和所述第三附加边;以及
用于生成所述第二组细分数据的指令还包括:
一组指令,用于通过使用所述第一对细分的边中的第二 个细分的边、所述第二对细分的边中的第一个细分的边和所述 第一附加边,获得所述第一细分表面的细分数据;
一组指令,用于通过使用所述第二对细分的边中的第二 个细分的边、所述第三对细分的边中的第一个细分的边和所述 第二附加边,获得所述第二细分表面的细分数据;
一组指令,用于通过使用所述第三对细分的边中的第二 个细分的边、所述第一对细分的边中的第一个细分的边和所述 第三附加边,获得所述第三细分表面的细分数据;以及
一组指令,用于通过使用所述第一、第二和第三附加边, 获得所述第四细分表面的细分数据。
27.根据权利要求21所述的计算机可读介质,其中,所述第二组 面信息和所述第二组细分数据分别包括多个限定所述对应的 细分表面的顶点和边。
28.根据权利要求21所述的计算机可读介质,其中,保存在所述 计算机可读介质上的所述指令被实时执行,因此允许所述多个 细分表面被实时生成。
29.根据权利要求21所述的计算机可读介质,其中,所述计算机 可读介质是光盘或数字视频盘。
30.一种具有多个用于从一细分的面生成多个细分表面的组件的 集成电路,包括:
一组件,用于为所述细分的面生成第一组面信息和第一 组细分数据,其中所述第一组面信息和所述第一组细分数据分 别包括多个顶点和多个边;
一组件,用于使用第一组细分数据生成多个细分的边和 多个附加边;
一组件,用于通过使用一对细分的边按照第一顺序从所 述多个边限定每一个边,其中如果一个边被使用两次或正在被 第二次使用,限定所述边的该对细分的边按照与第一顺序相反 的第二顺序重新排列;
一组件,用于使用所述第一组信息和所述第一组细分数 据为所述多个细分表面中的每一个细分表面生成第二组面信 息;
一组件,用于使用所述多个细分的边和所述多个附加边 为所述多个细分表面中的每一个细分表面生成第二组细分数 据;
一组件,用于为所述多个边中的每一个边生成一顶点; 以及
一组件,用于对所述多个顶点和为所述多个边生成的顶 点进行替换。
31.根据权利要求30所述的集成电路,其中用于为所述多个边中 的每一个边生成一顶点的组件还包括:
一组件,用于在一共享边顶点是一内部顶点以及使用 (3/8,3/8,1/8,1/8)顶点加权系统的情况下把所述顶点的 合成权数除二。
32.根据权利要求30所述的集成电路,其中关于所述边是否被使 用两次以及正在被第二次使用的信息分别储存在与所述边对 应的第一和第二位标记中。
33.根据权利要求32所述的集成电路,其中用于为所述多个边中 的每一个边生成顶点的组件还包括:
一组件,用于通过使用储存在所述第一位标记中的所述 信息确定被生成的所述顶点是内部顶点还是外部顶点。
34.根据权利要求30所述的集成电路,其中:
所述多个顶点包括第一顶点、第二顶点、和第三顶点;
所述多个边包括第一边、第二边、和第三边;以及
用于生成所述第二组面信息的组件还包括:
一组件,用于通过使用所述第一边、所述第二顶点、和 所述第二边获得第一细分表面的面信息;
一组件,用于通过使用所述第二边、所述第三顶点、和 所述第三边获得第二细分表面的面信息;
一组件,用于通过使用所述第三边、所述第一顶点、和 所述第一边获得第三细分表面的面信息;
一组件,用于通过使用所述第一边、所述第二顶点、和 所述第三边获得第四细分表面的面信息。
35.根据权利要求34所述的集成电路,其中:
所述多个细分的边包括组成所述第一边的第一对细分的 边、组成所述第二边的第二对细分的边、和组成所述第三边的 第三对细分的边;  
所述多个附加边包括第一附加边、第二附加边、和第三 附加边;以及
用于生成所述第二组细分数据的组件还包括:
一组件,用于通过使用所述第一对细分的边中的第二个 边、所述第二对细分的边中的第一个边和所述第一个附加边, 获得所述第一细分表面的细分数据;
一组件,用于通过使用所述第二对细分的边中的第二个 边、所述第三对细分的边中的第一个边和所述第二附加边,获 得所述第二细分表面的细分数据;
一组件,用于通过使用所述第三对细分的边中的第二个 边、所述第一对细分的边中的第一个边和所述第三附加边,获 得所述第三细分表面的细分数据;以及
一组件,用于通过使用所述第一、第二和第三附加边, 获得所述第四细分表面的细分数据。
36.根据权利要求30所述的集成电路,其中,所述第二组面信息 和所述第二组细分数据分别包括多个限定所述对应的细分表 面的顶点和边。
37.根据权利要求30所述的集成电路,其中,设置在所述集成电 路上的所述多个组件被实时执行,因此允许所述多个细分表面 被实时生成。
38.根据权利要求30所述的集成电路,其中,通过使用控制逻辑 或硬件或两者的结合来应用所述多个组件。
39.一种具有根据权利要求30所述的集成电路的视频游戏机
40.一种具有根据权利要求30所述的集成电路的图形卡。

说明书全文

发明一般地涉及计算机图形处理。更具体地,本发明涉及用 于实时生成细分表面以用于与计算机图形有关的应用中的方法和 系统。

细分表面被用于创建平滑的几何表面。细分表面通过细分生 成。每个细分表面开始均具有一原始的多边形表面。原始的多边形 表面被细分成附加的多边形,所有的顶点根据某个规则集来移动。 移动顶点的规则因方案而异。例如,一些规则包括保留旧的顶点、 可选地移动它们、和引进新的顶点。

通常使用的方案之一是环状表面细分方案。环状表面细分方案 是通过生成和插入附加的顶点,然后通过预先规定的加权常数移动 原始顶点来实施的。细分表面随着每一细分步骤逐渐变的平滑。附 加的顶点基于原始顶点生成和插入到由每一对原始顶点确定的边 中间。当通过细分得到的附加的复杂几何被递归生成时,每一现有 的顶点受到与它相连的其它顶点影响。除了环状表面细分方案外, 大量的其它方案,诸如多面体方案可以用于生成细分表面。

细分表面经常用于计算机图形处理行业,最著名的是用于动画 电影或制作。然而,由于昂贵的处理和管理成本,细分表面的使用 几乎仅局限于非实时的应用,诸如图形艺术节目和电影/电视制作。

已经出现了一种方案,试图实时生成细分表面。这种方案通过 管理用于创建细分的基元的几何指针和边的大型复杂数据库来实 施。大型复杂数据库的使用造成代码量较大且处理效率低下。所以, 需要提供一种经过改进的方法和系统,能够以更高效的方式生成细 分表面,以允许这种细分表面被实时地实现和使用。

发明内容

本发明提供了一种用于实时生成细分表面以用于与计算机图 形有关的应用中的方法和系统。根据本发明的一具体实施例,首先 生成一细分的面的面信息和细分数据。细分的面由大量的细分表面 构成。细分的面的面信息和细分数据分别包括确定细分的面的顶点 和边。而且,两个位标记对应于在细分的面的细分数据中识别的每 一边。位标记用于识别对应的边是否正在被第二次使用,另一位标 记用于显示对应的边是否被使用两次。
细分的面的细分数据然后用于生成细分的附加边。由细分的面 的细分数据所识别的每一边被一对细分的边确定。如果一个边被使 用两次和正在被第二次使用,构成该边的细分的边的顺序相反。遵 循第一个预先规定的一套方法,使用细分的面的面信息和细分数 据,然后生成细分表面的面信息,遵循第二个预先规定的一套方法, 使用细分的附加边,生成细分表面的细分数据。类似地,细分表面 的面信息和细分数据分别包括确定该细分表面的顶点和边;并且两 个位标记对应于在该细分表面的细分数据中识别的每条边。
在细分的面和细分表面的面信息和细分数据分别生成之后,为 确定细分的面的每一边创建新的顶点。一个内部的顶点位标记被用 于显示新创建的顶点是否是一个内部顶点。如果新顶点是一内部顶 点,那么使用一标准(3/8,3/8,1/8,1/8)顶点加权系统,共享边 相邻顶点的合成权数被减半。然后,所有的顶点被替换(replace, 移位)以创建更平滑的细分的面。
参照说明书的其它部分,包括附图权利要求,将实现本发明 的其它特征和优势。本发明的其它特征和优势和本发明的各种实施 例的结构和操作将在下面参照附图加以详细描述,相同的参考标记 表示相同或功能类似的部分。

附图说明

图1是阐明依据本发明的示范性方法生成细分表面所要采取的 步骤的流程图
图2是显示一具有三形形状的原始多边形表面(或细分表面) 依据本发明的示范性方法被细分的示意图;
图3是阐明依据本发明的示范性方法的两个面共用一条边的示 意图;
图4是阐明依据本发明的示范性方法的细分一条边的示意图;
图5是阐明如图3所示的两个面的细分结果的示意图;
图6是阐明如图3所示的两个面的细分结果和进一步阐明添加 到细分面的附加边的示意图;
图7是阐明内部顶点构造的示意图;
图8是阐明用于构造内部顶点的合成权数的示意图;
图9是阐明边界/界线或外部顶点的构造的示意图;
图10是阐明用于构造一外部顶点的合成权数的示意图;
图11是阐明一内部顶点替换的示意图;
图12是阐明一外部顶点替换的示意图;以及
图13是显示使用依据本发明的两个位标记为合成权数编索引 的图表。

具体实施方式

现在将描述本发明的各种具体实施例。本发明主要涉及一种用 于实时生成细分表面的改进的方法。根据一具体实施例,该方法使 用了多个进行过索引的基元(indexed primitive)。这些基元包括顶 点阵列、被索引进这些顶点的面阵列、和细分数据。在其它的信息 中,细分数据包括对由一对顶点、多个顶点、多个面、和多个特殊 边所限定的边的描述。关于这些基元如何被得到和它们如何被用于 生成细分表面的细节将在下面加以描述。
每个细分表面开始都是一原始的多边形表面。一个或多个原始 多边形表面构成一物体,将为该物体创建一图形模型。该图形模型 是对该物体的一个图形描述。每一原始多边形表面被细分成附加的 多边形或细分表面。每一细分表面然后可以被看作类似于一原始多 边形表面,如果需要的话,可进一步细分成更多的细分表面。实现 细分的数量取决于大量因素,例如,这些因素包括设计选择。
根据一具体实施例,本发明的方法采用三个步骤生成细分表 面。参照图1,该典型方法的三个步骤包括(1)生成递归的面信息, (2)创建新顶点,以及(3)替换现有的顶点。这三个步骤中的每 个步骤将在下面进一步加以详细描述。
当生成递归面信息时,为每一表面或要细分的面生成面信息。 根据一具体实施例,每一原始多边形表面具有三角形形状,也就是 说,每一要细分的面具有三角形形状。因此,如下面将要显示的, 在每一细分步骤之后生成的所有细分表面也具有三角形形状。图2 显示一具有三角形形状将被细分的原始多边形表面(或细分表面) 20的图。该表面或面20由三个顶点(0,1,2)确定。也就是说, 面20由三条连接三个顶点(0,1,2)的特殊的边,也就是说不受 顶点对(0,1)限制的边、不受顶点对(1,2)限制的边和不受顶 点对(2,0)限制的边形成。一个特殊边被定义为通过连接两个和 仅仅两个顶点形成的边,也就是说,一个受一对顶点限制的边。
对于每一细分步骤,附加的顶点被添加到形成面20的三条边。 更具体地,现有的每个边的中间被添加一附加的顶点。如图2所示, 新顶点(3,4,5)分别被添加到由顶点(0,1)对确定的边、由 顶点(1,2)对确定的边和由顶点(2,0)对确定的边。相关数字 (3,4,5)也被分别用于对应包含新顶点的边。例如,相关数字 (3)可用于对应顶点(0,1)之间的边;相关数字(4)可用于对 应顶点(1,2)之间的边,相关数字(5)可用于对应顶点(2,0) 之间的边。
在每一细分步骤的过程中,面20的每一现有的边被分成两个 细分的边。例如,如图2所示,边(3)被分成两个相同的细分的 边,也就是,顶点(0,3)之间的细分的边和顶点(3,1)之间的 细分的边;类似地,边(4)和(5)每一个也分成两个相同细分的 边。
另外,在每一细分步骤的过程中,使用新创建的顶点(3,4, 5),在面20的中间创建了三个新的附加边。如图2所示,新附加 边是:顶点(3,5)之间附加边,顶点(3,4)之间附加边和顶点 (4,5)之间附加边。这些附加边,反过来用于细分面20,结果生 成附加的细分表面。参考图2,对于面20,如分别由顶点(3,1, 4)、(4,2,5)、(5,0,3)和(3,4,5)所确定的四个细分表面 生成。
如上所述,每一细分步骤增加了面(face)、顶点(vertices)和 边(edge)的数量。通过使用一个三角形表面,诸如面20,当每一 细分步骤为每一现有的面生成四个新面时,面的数量增加四倍。面 的数量由下面的方程式描述:面n+1=面n×4,其中“n”描述第n 个细分步骤,“n+1”描述紧跟第n个细分步骤的细分步骤。
顶点的数量按照特殊边的数量而增加。这是因为附加的顶点在 每一特殊边的中央生成。下面的方程式描述在第n+1细分步骤之后 的顶点的数量:顶点n+1=顶点n+边n。
当一新顶点添加到特殊边的中央时,这个新顶点连接到其它新 顶点形成附加的特殊边。下面的方程式描述在第n+1细分步骤之后 的特殊边的数量:边n+1=边n×2+面n×3。
而且,根据一典型方法,仅仅两个面可以连接到相同特殊边, 也就是说,一特殊边最多仅被两个面共享或使用。两个面对相同边 的使用是遵循某一顺序的,这将在下面进一步描述。为了跟踪每一 边的状态,两个面位标记对应于形成面20的每一边。第一个面位 标记用于显示对应的边是否是一个“边重复使用”,也就是说那个 对应的边是否正在被第二次使用。第二个面位标记用于显示对应的 边是否是“双面的”,也就是说那个对应的边是否被多个面包括或 共享。另外,如下面将进一步描述的,对应于每一要细分的边都有 一内部顶点位标记。当一个边被细分时,在该边的中央也创建了一 新顶点。该内部顶点位标记用于显示该新创建的顶点是否是一“内 部”顶点。这些位标记的使用将在下面进一步加以描述。关于这些 位标记的实现,它们通常使用软件实现和用作权数表的查询指针。
简单总结,参考图2,当面20要被细分时,为将被细分的面 20生成下面的面信息和细分数据:
面0(Face0)[0]:顶点(0,1,2)和
细分0(Sub0)[0]:(3,4,5)
面0[0]:顶点(0,1,2)代表由顶点(0,1,2)限定的面20; 细分0[0]:(3,4,5)代表确定面20的三条边。边(3)位于顶点 (0,1)之间;边(4)位于顶点(1,2)之间;以及边(5)位于 顶点(2,0)之间。
细分面20生成顶点(0,1)之间的顶点(3)、顶点(1,2) 之间的顶点(4)以及顶点(2,0)之间的顶点(5)。顶点的生成 将在下面进一步描述。另外,由于面20被细分成四个细分表面, 附加的面信息被生成。例如,继续图2,对面20的细分生成下面的 面信息:
面1[0]:顶点(3,1,4)-附属元素0,面元素1,附属元素 1
面1[1]:顶点(4,2,5)-附属元素1,面元素2,附属元素 2
面1[2]:顶点(5,0,3)-附属元素2,面元素0,附属元素 0
面1[3]:顶点(3,4,5)-附属元素0,附属元素1,附属元 素2
面1[0]:顶点(3,1,4)代表由顶点(3,1,4)限定的细分 表面;面1[1]:顶点(4,2,5)代表由顶点(4,2,5)限定的第 二个细分表面;面1[2]:顶点(5,0,3)代表由顶点(5,0,3) 限定的第三个细分表面;以及面1[3]:顶点(3,4,5)代表由顶点 (3,4,5)限定的第四个细分表面。
细分之后生成的面信息的右边的信息显示细分前的面信息中 的元素和用于生成细分后的面信息的细分数据。例如,为了构造面 1[0],使用了细分数据细分0[0]的第一个元素边(3)、面信息面0[0] 的第二个元素(1)、和细分数据细分0[0]的第二个元素边(4),产 生(3,1,4);为了构造面1[1],使用了细分数据细分0[0]的第二 个元素边(4)、面信息面0[0]的第三个元素(2)、和细分数据细分 0[0]的第三个元素边(5),产生(4,2,5)。应该提到细分元素0 代表第一个细分元素;元素以“0”开始。同样,面1[2]和面1[3]以 相同的方式构造。
对于每一细分步骤,如上所述每一面20的面信息被生成。如 果要采取附加的细分步骤,也就是说从原始细分表面生成的细分表 面要进一步被细分,那么要细分的每一细分表面的面信息和细分数 据将得如上所述生成。
现在将描述第一面位标记的使用。如上所提到的,第一面位标 记用于显示一个边是否正第二次被使用(“边重复使用”)。如果该 边正在被第二次使用,那么该边应该在第二次使用时以相反的顺序 使用。图3是阐明两个面使用一个边的图。参考图3,有两个面由 顶点(0,1,2,3)限定。第一面Face[0]由顶点(0,1,2)限定, 第二面Face[1]由顶点(0,2,3)限定。边(6)是顶点(0,2)之 间的边。如图3所示,边(6)由两个面Face[0]和Face[1]共享或使 用。根据一典型方法,假定顺时针方向,边(6)被Face[0]以从顶 点(2)到顶点(0)的顺序使用。在面Face[1]中,该顺序相反,也 就是说边(6)被Face[1]以从顶点(0)到顶点(2)的顺序使用。 同样,顶点(6)被两个从Face[0]和Face[1]的细分出的细分的面 共享。对于顶点(6),当顶点(6)位于顶点(0,2)之间的边上 时,顶点(0,2)被认为是相邻点,顶点(1,3)被认为是相对的 点。
一个边重复使用由一添加到细分数据元素的字母“r”表示。一 个边双面由添加到细分数据元素的字母“d”表示。边双面将在下 面进一步描述。
基于图3,获得Face[0]和Face[1]的下面的面信息:
Face0[0]:顶点(0,1,2)-sub0[0]:(4,5,6d)以及
Face0[1]:顶点(0,2,3)-sub0[1]:(6r,d,7,8)
Face0[0]:顶点(0,1,2)代表组成Face[0]的三个顶点(0,1, 2)。sub0[0]:(4,5,6d)代表限定Face[0]的三个边(4,5,6);“6d” 指示边(6)被使用两次。
Face0[1]:顶点(0,2,3)代表组成Face[1]的三个顶点(0,2, 3)。sub0[1]:(6r,d,7,8)代表限定Face[1]的三个边(6,7,8); “6r,d”指示边(6)被使用两次(也就是说被两个面共享)以及它 正在被第二次使用。
如上所提到的,由下一个细分生成的边的数量遵循方程式:边 n+1=边n×2+面n×3。对一个边的细分生成两个由边中央的一顶点 相连的细分的边。那么第二次细分总共造成四个细分的边和三个顶 点。参考图4,示出一在顶点(0,1)之间形成的边。在对该边细 分之后,一新顶点(2)和顶点(0,2)和顶点(2,1)之间分别 形成的两个细分的边被创建。对顶点(0,2)和顶点(2,1)之间 形成的两个细分的边的细分进一步创建了两个更新的顶点(3,4) 和顶点(0,3),(3,2),(2,4)和(4,1)之间分别形成的四个 新细分的边。应该提到在细分一个边之后,用于描述这两个细分的 边的顶点对以下列顺序保存,也就是说对于第一个细分的边,新顶 点是顶点对的第二个顶点;对于第二个细分的边,新顶点是顶点对 的第一个顶点。例如,在图4中,由顶点(0,1)之间的边形成的 两个细分的边有下面的顶点对:分别是(0,2)和(2,1),顶点 (2)是新创建的顶点。
然后细分的边以相同的顺序添加到现有的边。图5阐明如图3 所示的Face[0]和Face[1]的细分结果。如图5所示,在细分之后边 (4)变成两个细分的边(9)和(10);边(5)变成细分的边(11) 和(12);以及边(6)变成细分的边(13)和(14)等等。如上所 述,对一个边的细分也导致了一新顶点的生成,该新顶点添加在边 的中央,连接两个细分的边。例如,当边(4)被细分时,新顶点 (4)被创建和添加到顶点(0,1)之间的边的中央,结果连接细 分的边(9)和(10)。通过以这种方式为边编索引,新创建的顶点 添加到现有的顶点之后,一个边的给定的细分边的两个细分的边索 引可通过把现有的边乘2和添加一偏移量来计算。
参考图5,由细分的边(s.e.)描述的两个面Face[0]和Face[1] 如下所示:
Face[0]:vertices(0,1,2)-sub(4,5,6d)-s.e.(9,10), (11,12),(13d,14d)
Face[1]:vertices(0,2,3)-sub(6r,d,7,8)-s.e.(14r,d, 13r,d),(15,16),(17,18)
关于Face[0],vertices(0,1,2)和sub(4,5,6d)已在上 面加以解释;s.e.(9,10),(11,12),(13d,14d)确定了由Face[0] 的细分生成的所有细分的边。细分的边按序以顺时针方向编号。Face [0]的细分数据中确定的每一边由一对细分的边确定。例如,边(edge) (4)由s.e.(9,10)确定。类似地,(13d,14d)表明细分的边(13) 和(14)被使用两次(也就是说,为两个面共享)。这可从之前上 面所述的细分的边(13)和(14)组成边(6)和边(6)被使用两 次得出。同样,关于面[1],顶点(0,2,3)和细分(6r,d,7,8) 已在上面解释;s.e.(14r,d,13r,d),(15,16),(17,18)确定所有 从Face[1]的细分产生的细分的边。(14r,d,13r,d)表明细分的边(13) 和(14)被使用两次(也就是说,被两个面共享)以及它们正在被 第二次使用。细分的边再次以顺时针方向按序编号。而且,组成一 共享边的细分的边的顺序相反。这是一个边正在被第二次使用的结 果。例如,关于Face[1],与s.e.(13d,14d)相比,细分的edge(13) 和(14)作为s.e.(14r,d,13r,d)存储。
而且,在细分的边创建之后,附加边被添加到每一细分的面。 对于每一细分的面,与该细分的面对应的附加边不被从该细分的面 生成的细分面外边的任何面使用,也就是说,与一细分的面对应的 附加边仅被从那个细分的面生成的细分面使用。参考图6,附加边 是(19,20,21,22,23,24)。两个面Face[0]和Face[1]的每一个 细分成四个细分面。Face[0]和Face[1]的第四个细分面分别被附加 边(19,20,21)和(22,23,24)确定。如图6所示,附加边(19, 20,21)仅仅被从细分面[0]生成的细分面使用;同样,附加边(22, 23,24)仅仅被从细分面[1]生成的细分面使用。
如上所示,在Face[0]和Face[1]第一次细分之前,可以得到下 面的面信息和细分数据:
Face0[0]:vertices(0,1,2)-sub(4,5,6d)
Face0[1]:vertices(0,2,3)-sub(6r,d,7,8)
在Face[0]和Face[1]第一次细分之后,生成下面的面信息和细 分数据:
Face1[0]:vertices(4,1,5)-sub(10,11,19d)
Face1[1]:vertices(5,2,6)-sub(12,13d,20d)
Face1[2]:vertices(6,0,4)-sub(14d,9,21d)
Face1[3]:vertices(4,5,6)-sub(19r,d,20r,d,21r,d)
Face1[4]:vertices(6,2,7)-sub(13r,d,15,22d)
Face1[5]:vertices(7,3,8)-sub(16,17,23d)
Face1[6]:vertices(8,0,6)-sub(18,14r,d,24d)
Face1[7]:vertices(6,7,8)-sub(22r,d,23r,d,24r,d)
用于“边重复使用”和“边双面”的符号已在上面作了描述。 参考图6,关于与Face[0]有关的面信息,可以看出细分的边(13) 和(14)和附加边(19)、(20)和(21)都被使用两次;更具体地, 细分的边(13)和(14)被Face[0]和Face[1]使用,附加边(19)、 (20)和(21)在从细分面[0]生成的四个细分面中使用两次。另外, 关于Face[0]的面信息也显示附加边(19)、(20)和(21)如符号“r,d” 所表明的正在被第二次使用的位置
同样,关于与Face[1]有关的面信息,可以看出细分的边(13) 和(14)和附加边(22)、(23)和(24)都被使用两次以及显示出 它们正在被第二次使用。
Face1[0]-Face1[3]的面信息和细分数据的生成如下。关于 Face1[0]-Face1[3]的面信息,如上所述,这一信息可从Face0[0]的面 信息和细分数据也就是vertices(0,1,2)-sub(4,5,6d)中获 得。使用上面描述的方法,Face1[0]从细分元素0、(4)、面元素1、 (1)和细分元素1、(5)获得,结果产生Face1[0]:vertices(4,1, 5)。类似地,Face1[1]-Face1[3]的面信息可如上述获得,产生 Face1[1]:vertices(5,2,6)、Face1[2]:vertices(6,0,4)和Face1[3]: vertices(4,5,6)。
基于细分的边(s.e.)和附加边(a.e.),在第一次细分之后生成 的细分数据可以构造如下。为了作为例子阐明,Face0[0]的面信息和 细分数据用于生成Face1[0]、Face1[1]、Face1[2]和Face1[3]的面信息 和细分数据。如上所示,在第一次细分之前可获得下面的数据:
Face0[0]:vertices(0,1,2)-sub(4,5,6d)-s.e.(9,10), (11,12),(13d,14d)-a.e.(19,20,21)。
Face1[0]的细分数据从细分的边的第一对的第二部分(10)、细 分的边的第二对的第一部分(11)和第一附加边(19)获得,结果 产生sub(10,11,19)。
Face1[1]的细分数据从细分的边的第二对的第二部分(12)、细 分的边的第三对的第一部分(13)和第二附加边(20)获得,结果 产生sub(12,13,20)。
Face1[2]的细分数据从细分的边的第三对的第二部分(14)、细 分的边的第一对的第一部分(9)和第三附加边(21)获得,结果 产生sub(14,9,21)。
最后,Face1[3]的细分数据从所有三个附加边(19,20,21) 获得,结果产生sub(19,20,21)。
其次,每一细分的边的两个面位标记被确定。一个边的两个面 位标记继续传给它的两个细分的边。这是因为细分一个边不会影响 它的两个细分的边是否是双面的或重复使用的,也就是说,如果一 个边是双面的,那么它的两个细分的边在细分之后也是双面的。所 以,细分的边(13)和(14)的第二面位标记被设置为“d”,这是 由于细分的边(13)和(14)是从被Face0[0]和Face0[1]共同使用两 次的边(6)细分而来的。至于三附加边,它们在第四细分面都被 使用两次和重复使用。所以,每一附加边的两个面位标记是常数。 当三个附加边出现在Face1[0]-Face1[2]内时,三个附加边的第二面 位标记(19,20,21)被设置为“d”,也就是双面的,而当三个附 加边出现在Face1[3]内时,设置为“r,d”,也就是双面和重复使用的。
在第一次细分之后Face1[0]-Face1[3]的面信息、细分数据和相 关的面位标记如上所述获得。同样,Face1[4]-Face1[7]可获得同样 的信息。
对于每一细分步骤,在获得面信息和细分数据(包括相关的面 位标记)之后,然后需要生成新顶点。一般地,为了细分有两种类 型的顶点,也就是说内部顶点和边界/界线或外部顶点。这两种类型 的顶点的细分规则略微不同。如上面提到的,当细分时,对于细分 数据中的每一个边,一个顶点在一个边的中央被创建。该顶点如何 产生取决于顶点位置。不同的合成权数用于不同类型的顶点。例如, 如果被创建的顶点是一内部顶点,使用(3/8,3/8,1/8,1/8)顶点 加权系统;如果被创建的顶点是一外部顶点,使用(1/2,1/2)顶 点加权系统。用于创建内部顶点和外部顶点的方法将在下面进一步 描述。
参考图7,内部顶点位于顶点坐标方格的中央,通常与六(6) 个其它顶点共享边。当构造内部顶点70时,不同的顶点有不同的 用途;更具体地,边上的每一顶点的3/8和每一顶点的1/8与该边 共同形成一三角形。
图8阐明用于构造一内部顶点的合成权数。如图8所示,要生 成的顶点(vertex)(6)是一内部顶点。顶点(6)的构造基于如下:
顶点(6)=3/8每一相邻顶点+1/8每一相对的顶点
相邻顶点是一共享边的顶点,也就是顶点(0,2),相对的顶 点是剩余的三角形共享顶点,也就是顶点(1,3)。
如图8所示,由顶点(0,2)确定的边(6)被两个面也就是 分别由顶点(0,1,2)和(0,2,3)确定的面共享。所以,顶点 (0,2)对所创建的顶点的影响应该减半,顶点(0,2)将被添加 两次。
通过数学运算,对顶点(6)计算如下:
v6=(v1+v3)/8+(v0+v2)×3/8
但是因为顶点(0,2)由于两个面而将被添加两次,顶点(0, 2)的影响被减半,如下所示:
v6=(v1+v3)/8+(v0+v2)×(3/8)/2
=(v1+v3)/8+(v0+v2)×3/16
前面的计算利用把相同的顶点添加两次有效地处理了这一问 题。在处理过面(Face)[0]之后,关于顶点(vertex)(6),通过下 式可获得:
v6=v1/8+(v0+v2)×3/16
随后,处理Face[1]。应该提到Face[1]也有助于顶点(6),这 是由于Face[1]与Face[0]共享边(6)。然后获得顶点(6)如下:
v6=(v1/8+(v0+v2)×3/16)+(v3/8+(v0+v2)×3/16)
=(v1+v3)/8+(v0+v2)×3/8
参考图9,当构造一边界/界线或外部顶点90时,使用其它的 边界/界线边顶点(实线标记)的每一个的一半(1/2)。构造一外部 顶点比构造一内部顶点简单。对于一外部顶点,根据定义,外部顶 点位于的边仅仅被一个面使用。利用这个面,然后通过对两个边顶 点求和然后对结果除二来计算外部顶点。
如图10所示,用于构造顶点(4)的合成权数为每一相邻点1/2, 这是由于仅一个面使用边(4)。也就是说,顶点(0,1)的一半(1/2) 被添加以创建位于边(4)中央的顶点(4)。边(4)是非双面的边, 也就是它仅被Face[0]使用。
当为每一边创建一个顶点时,被创建的顶点或者是一内部顶点 或者是一外部顶点。也就是说顶点位于的边或者是双面的或者是非 双面的。根据被创建的顶点的性质,使用不同的合成权数。如上所 述,对应于每一边有两个面位标记。第二面位标记表明一个边是否 是双面。所以,通过使用每一边的第二面位标记中包含的信息,可 选择使用适当的合成权数创建顶点。
而且,如上面所提到的,对应于每一顶点有一内部顶点位标记。 内部顶点位标记用于显示顶点是否是内部顶点。为了构造这一内部 顶点位标记,当细分一个边时第二面位标记的内容被复制。如果细 分的边不是双面的,那么这种边位于一个边界或界线上。因此,当 细分时,被创建在细分的边的中央的顶点也位于边界或界线。
使用图6作为一个例子,包括内部顶点位标记的面信息如下:
Face1[0]:vertices(4,1,5)-sub(10,11,19d)
Face1[1]:vertices(5,2,6i)-sub(12,13d,20d)
Face1[2]:vertices(6i,0,4)-sub(14d,9,21d)
Face1[3]:vertices(4,5,6i)-sub(19r,d,20r,d,21r,d)
Face1[4]:vertices(6i,2,7)-sub(13r,d,15,22d)
Face1[5]:vertices(7,3,8)-sub(16,17,23d)
Face1[6]:vertices(8,0,6i)-sub(18,14r,d,24d)
Face1[7]:vertices(6i,7,8)-sub(22r,d,23r,d,24r,d)
“i”表明顶点是一内部顶点。上面与图6一致,图6表明顶点 (6)是特殊的内部顶点。通常在较大的网中,绝大多数顶点是内 部的;在封闭的网中,所有的顶点是内部的。
在为边生成新顶点之后,现有的顶点将被替换。环状表面细分 方法基于周围的与现有顶点共享一个边的顶点替换(或移动)每一 现有的顶点。如果该对应的现有顶点是一内部顶点,每一输出顶点 (对应于被替换的现有顶点)受对应的现有顶点和每个周围的顶点 十六分之一的影响。
图11说明了对现有内部顶点进行替换的示意图。如11所示, 在一典型网中的绝大多数的顶点是具有六价(vertex of six)的内部 顶点。输出顶点(对应于被替换的现有顶点(0)110)受现有顶点 (0)110的10/16和与现有顶点(0)110共享一个边的每一周围顶 点的十六分之一的影响。换句话说,对应于被替换的现有顶点(0) 110的输出顶点包括被替换的现有顶点(0)110的10/16加上每一 边共享顶点(1,2,3,4,5,6)的1/16。
如果被替换的现有顶点是边界/界线或外部顶点,那么对应于该 现有顶点的输出顶点仅受边界/界线上的其它顶点的影响。在这种情 况下,该现有的顶点替换如下。图12阐明一外部顶点的替换。图 12显示三个面,也就是Face[0]:顶点(0,1,2),Face[1]:顶点 (0,2,3)和Face[2]:顶点(0,3,4)。顶点(0)120是一边界 /界线顶点。所以,对应于被替换的顶点(0)120的输出顶点的合 成权数是每一相邻点的1/8和顶点(0)120的3/4。
参考图12,示出一个具有五(5)个顶点(0,1,2,3,4)的 网。对应于被替换的顶点(0)120的输出顶点受顶点(1,4)和顶 点(0)120的影响。由于顶点(0)120是在边界上,顶点(0)120 与顶点(1,4)共享一边界。如上所显示的,输出顶点的合成权数 是每一相邻点1/8(或每一边界共享顶点)和被替换的顶点(0)120 的6/8。在一具体实施例中,如图13所示,内部顶点位标记和第二 面位标记(“双面的”位标记)用于给具有合成权数的阵列编索引。
为了完成作为外部顶点的现有顶点的替换,现有的顶点首先被 复制进一个输出顶点阵列。然后,对于每一合成步骤,通过增加适 当的合成权数倍数的顶点与现有顶点的差计算每一输出顶点,如 下:
vout=vout+weight*(vx-vsrc)
其中vout是输出(或被替换)的顶点,vsrc是现有(或未被替换) 的顶点,vx是边共享顶点。前述意味着现有顶点的一部分被移走, 而共享边顶点的相同部分被合成进来。
基于这里提供的说明,对于本领域技术人员而言,用本发明的 典型方法可以实现来更高效和实时地生成细分表面应该是显而易 见的。如上所述的面信息和细分数据代表了相当小数量的数据,因 此允许这样的信息和数据存储在最小限度的存储空间内并被更高 效和实时地处理。
在一具体实施例中,根据本发明的一典型方法通过使用图形开 发软件,诸如微软的Direct3D和/或计算机编程语言,诸如C和C++ 来实现。该典型的实现可以整体的方式或具有各种模的模块化方 式设计。典型的实现可以保存在例如一计算机可读介质诸如CD或 DVD上。在下表1中提供了一阐明包括各种位标记的面信息和细 分数据的数据结构的典型软件实施例。
表1 struct S Vertex {
float               x,y,z; }; struct SFace {
unsigned short      VertexIndex[3]; }; struct SSubFace:public SFace {
unsigned char       edgeRecycle[3]:1,
                    edgeDoubleside[3]:1;
unsigned char       vertexInterior[3]:1; }; struct SPrimitive {
int                   faces,vertices;
SFace                 *faceData;
SSubFace              *subData;
Svertex               *vertexData; };
应当理解,本发明也可通过使用硬件实现。这种硬件可以是置 于视频游戏机或图形卡中的集成电路或芯片,与计算机一起使用。 例如微码或微编程指令形式的控制逻辑可用于控制这种硬件。软件 和硬件的结合也可用于实现本发明。基于这里提供的说明,本领域 技术人员将能够使用其它的方式和/或方法实现和实施本发明。
以上所述仅为本发明的优选实施例而已,并不用于限制本发 明,对于本领域的技术人员来说,本发明可以有各种更改和变化。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进 等,均应包含在本发明的权利要求范围之内。

背景技术

相关专利内容
标题 发布/更新时间 阅读量
游戏机 2020-05-11 631
游戏机 2020-05-11 915
游戏机 2020-05-12 246
游戏机 2020-05-13 490
游戏机 2020-05-13 475
游戏机 2020-05-13 126
游戏机 2020-05-13 963
游戏机 2020-05-13 533
游戏机 2020-05-14 57
游戏机 2020-05-14 210
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈