没有合适的资源?快使用搜索试试~ 我知道了~
图形和视觉计算:一种用于程序形状建模的体积方法和新的程序形状建模语言PSML
图形和视觉计算4(2021)200018技术部分用于形状表示的体过程模型安德鲁河,澳-地Willisa, Prashant Ganeshb,1, Kyle Volleb,1, Jincheng Zhanga, Kevin BrinkcaUniversity of North Carolina at Charlotte,Charlotte 28223,USAb佛罗里达大学,1350 N Poetry Road,Shalimar 32579,USAc空军研究实验室,埃格林空军基地,32579,美国Ar ticlei n f o ab st ract文章历史记录:收到2020年2021年1月11日修订2021年3月9日接受2021年4月20日网上发售关键词:建模语言过程模型形状语法形状表示体积建模本文描述了一种用于程序形状建模的体积方法和一种新的程序形状建模语言(PSML),它有助于这些模型的规范化PSML为程序员提供了根据其3D元素来描述形状的能力,其中每个元素可以是3D对象的语义组,例如,砖墙或不可分割的物体,例如,一块独立的砖。以这种方式对形状建模有助于创建更接近组织和结构的模型真实世界的对手。这样,用户可以查询这些模型的体积信息,例如3D元素的数量、位置、方向和体积,这些信息不能使用基于表面的模型构建技术来提供。PSML还提供了许多新的特定于语言的功能,这些功能允许丰富的上下文敏感行为和后处理功能。这些功能包括模型设计的面向对象方法、查询模型中基于组件的信息的方法以及访问模型元素和组件以在模型部件上执行布尔操作的能力。PSML是开源的,包括免费提供的教程视频,演示代码和集成开发环境,以支持编写PSML程序。版权所有© 2021作者。由Elsevier Ltd.发布。这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)1. 介绍用于计算机图形应用(例如虚拟现实、计算机游戏和电影制作)的真实形状模型的生成可能是耗时的任务。这些模型通常以类似于电影场景的方式构建,即, 建筑物的正面结合了几何结构和外观,这些几何结构和外观在拍摄(电影)或从有限的视角体验(游戏)时提供视觉上令人信服的体验。然而,重要的上下文存在于被建模的对象的整个结构感兴趣的地方。这些环境的例子本文详细介绍了一种新的程序形状建模语言(PSML),这是一种用于指定体积程序模型的编程语言。本文介绍了PSML和几个贡献这篇文章由Marco Attene推荐出版。∗通讯作者。电子邮件地址:prashant.ganesh@u juju.edu(P.Ganesh)。1平等贡献者。与扩展现有语言的当前方法相比,这与用于过程模型规范的完整语言的存在相关联。还描述了执行PSML程序以生成3D模型PSML的最初目标是为程序员提供将对象描述为3D形状元素的语义层次结构的能力,其中每个元素可以是对象的语义组,例如,建筑物的地板,或不可分割的物体,即,一块砖一栋楼每个不可分割的对象,例如,从一栋楼里拿一块砖,根据其几何形状和外观进行建模。对象的语义分组,例如,建筑物的地板被表示为用于定义近似范围的几何3D图元,即,被认为是语义组的一部分的元素的位置、姿态和大小。这种分层方法允许程序员在一个级别上进行更改,然后将更改传播到其他级别。例如,更改砖的尺寸可以自动调整使用该砖定义的墙的图元数。以这种方式对形状建模有助于创建更接近其真实世界对应物的组织和结构的模型。因此,用户可以查询这些模型,以获得使用现有模型构建方法难以提供的语义标签上定义的信息。https://doi.org/10.1016/j.gvc.2021.2000182666-6294/© 2021作者。爱思唯尔有限公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)可在ScienceDirect上获得目录列表图形与视觉计算期刊首页:www.elsevier.com/locate/gvcA.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000182图1.一、 本文介绍了一种基于体积的过程形状建模语言,简称PSML,它使用户能够生成体积的3D模型。一个办公楼(a,b)和城堡大门(c,d),已被建模专门在其体积元素使用PSML。例如,建筑模型可能包括大量的砖和将这些砖粘合在一起所需的一定体积的砂浆。可以生成PSML构造的模型,其可以容易地提取关于砖的数量和砂浆的体积(以及所有砖和砂浆元素的位置和姿态)的该信息的这一主题的工作最初受到人类学家和考古学家的合作启发,他们需要高度精确的历史重要结构(通常是建筑)模型。在这种情况下,3D模型有可能对解决在其当前实现中执行通常既耗时又繁琐的任务非常有用。这些任务中最重要的是记录和跟踪架构元素,即,古代建筑的建筑材料和装饰品。在这种情况下,文化遗产研究人员需要类似于建筑信息建模(BIM)的3D模型,即,必须对每个不可分割元件的几何形状进行建模。这项工作描述了一个系统,有利于有效的生成模型,可以将这些信息。作为我们方法的一部分,我们定义了一种新的语言PSML,它在语法和结构上与Java相似考虑到该语言借用了Java的编程概念,熟悉Java或其他面向对象编程的用户将能够轻松学习和创建新对象。与其他过程建模实现[1,2]一样,这些语法用于使用split()和repeat()操作将形状替换为其他形状所得到的模型可以应用于BIM系统,因为当代建筑通常包含结构规则性,即,几何形状和外观相似且其相对位置和方向通常由一小组简单规则支配的不可分割的对象PSML最终可以用于历史结构的文档编制。然而,不可分割的元素中的不规则性(因为它们通常是手工制作的)和古代建筑常见的构造中的不规则性使得使用PSML的当前实现对这样的结构进行建模变得困难概括起来,本文的贡献如下:• 我们将形状建模为3D结构的分层集合,目的是从它们的大规模子结构到它们不可分割的体积元素来建模对象。因此,生成的模型与其真实世界的对应物相似,因此可以被询问以提供真实世界对象的重要量的估计。• 体积形状语法将标签与对象空间(即几何对象)和空空间(即界定对象的空空间)两者相关联。 这些标签可用于促进需要两种类型的信息的知识的分析,例如,家具放置、可访问性、虚拟空间导航、路径规划等。• 我们介绍了一种语言,集成顺序编程明与非顺序和高度递归的形状语法编程。在形状语法程序中创建的对象可以被引用和操作(使用布尔运算)在顺序代码中,可以使用从顺序代码定义的形状和变量来启动形状语法。这种集成使新的上下文敏感的编程能力,否则难以解决。• PSML支持面向对象的模型设计方法。复杂的模型可以通过组装独立编写的简单部分来创建。此功能通过允许设计人员同时处理独立零件,促进了设计人员之间的协作。此外,PSML还提供了选择用一种语法定义的卷并使用其他语法的实例填充它们的方法,有效 或者向它们引入依赖关系。图1用于直观地传达PSML的中心概念,并描绘了这些功能的一些实例,这些功能将在以下部分中更详细地解释。在(a,b)中,删除了一些体积元素,以证明PSML允许用户在构建块级别上对结构进行建模,并捕获外部和内部结构(如走廊、楼梯和楼梯)之间的关系。(c,d)显示了PSML中指定的单个城堡门形语法的两个模型。这些图展示了如何检测形状之间的高级语义关系,并用于自动转换几何形状以适应环境。(a)显示了一个城堡的大门与一个高连接的屋顶。请注意屋顶和城垛的几何形状自动调整拼接在一起顺利。(b)显示了一个城堡大门与分离的屋顶和一个凹陷的走道之间。在这里,几何形状已被修改,以适应较低的人行道和门道已自动添加到人行道,以允许步行(详见第3.3.5节以这种方式检测和作用于形状之间的体积关系是不可能使用常规的,即,基于表面的程序模型。2. 相关工作过程建模变得越来越流行,并已应用于各个领域,例如,使用L-Systems[3]进行植物建模,使用分形[4,5]进行地形建模,使用模型合成生成给定输入模型的大变化[6,7],使用生成建模语言[8,9]程序化创建哥特式窗花。生产系统通常用于生成大型城市场景的高度详细的模型,包括城市[10Smelik在[17]中对虚拟世界的过程建模的使用进行了调查。这些工具及其扩展的净效应,例如,[18]中实现的挤出表面、[19]中基于连贯性的立面编辑、[20]中实现的住宅建筑布局和组织的自动计算以及[21基于语法的过程模型的当前实现从几何图元开始,几何图元是通常来自预定义集合的实体几何。初步议事规则A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000183图二. (a)描绘了对立方体的分量分割操作,其对立方体形状进行操作作为输入,并生成立方体的6个面作为输出。(b)描绘了一个分裂在PSML中的立方体。PSML限制了形状语法操作,因此所有元素都必须是体积的。创建这些基本体的实例,并将其放置到相对配置中以生成体量模型(其他方法通过挤出闭合的2D多边形来生成体量模型)。然后,通过使用组件拆分操作将每个图元分解为其组成平面,从质量模型中提取质量模型的表面(参见图2)。然后,后续规则在体量模型的面上操作,以生成三维“壳”模型。这种方法已经被证明可以为建筑物外部产生非常详细的模型,并且对于质量模型的适当定义,可以用于对建筑物的内部和外部的壳体进行建模,例如,[2]中虚拟庞贝城的一些罗马建筑有庭院。因此,这项工作解决了生成具有高度详细建筑物的大规模城市模型的重要问题。在考古学中使用的程序化建模的其他应用包括[24然而,“壳”模型不适合更高级的应用,如物理模拟和空间分析。有几种方法集中于对这些地区使用体积语法。Whiting等人从CityEngine这种体积语法被优化以产生结构合理的建筑物。由该语法生成的终端仅限于可见的体积形状,并且不提供空空间的标记,因为它不需要结构优化。Cutler等人的另一项工作解决了实体模型的创建[28]。Cutler等人介绍了一种将封闭曲面转换为实体模型的程序方法。然而,他们的工作目标仅限于将表面转换为体积,而不是旨在生成复杂的结构形状和层次结构。类似地,Jesus等人在[29]中使用了基于层的建模技术,该技术为算法提供了一种结构化方法,以合并两个独立开发的大型文法。这允许更简单的语法用于更大的模型,并使用更少的代码行编写语法。最近的工作[30]提供了在分层框架中建模固体和空白空间的能力,但没有PSML提供的一些灵活性。PSML和以前的实现之间的主要区别PSML被限制为完全从封闭的几何图形中工作,并将语义标签与 非 终 端 , 可 见 终 端 和 空 白 空 间 相 关 联 。 与 [27] 相 比 ,PSMLPSML生成的端子符号的闭合几何可以转换为实心几何,以便在需要时进行进一步处理。因此,我们认为工作作为可以应用于终端符号的可能的后处理步骤。PSML创建具有相关语义标签的体积层次结构的能力允许人们询问模型以询问重要的问题,例如一些语义元素(例如砖块)的数量和体积。这些信息使令人印象深刻的古代城市模型(如古代庞贝[2])和其他古代建筑(如[31]中显示的Puuc建筑)能够被人类学家和考古学家发现有用的信息。很明显,这些数字将是近似的,然而,由文化遗产研究人员验证的高精度模型的发展显示出对这些结构的研究提供新的见解的希望,例如古代文明所采用的建筑方法,测量单位和建筑技术过程建模的另一个重要应用是计算机视觉。最近有相当多的工作研究了形状语法在视觉任务中的应用,产生了大量的文章,这些文章集中于图像内的建筑分割[32然而,这些技术仅限于2D文法,因为由所使用的文法产生的标记图元仅限于2D面部。可以设想,PSML可以是可以应用这些视觉算法的有效上下文。这里的问题陈述通常是用户试图使用形状语法程序作为图像内容的模型来推断图像的内容。语法通过要求解来自语法的语言来将解空间约束到语义元素的合理组织。实际上这通过优化算法来完成,该优化算法搜索最佳地“拟合”图像数据的语法形状的形状语法变量值并不是所有的语法都同样适合这种类型的优化,并且有一些有趣的研究如何使语法尽可能功能化[40]。[41]中的工作代表了使用机器学习生成结构形状程序的最近示例,这些程序寻求与其现实世界的对应物在几何上一致。其他方法使用蒙特卡罗方法[42,43]来实现类似的程序建模目标。这些工作还调查了在生成的模型之间进行插值的机会[44]。所有这些应用程序都可以受益于PSML作为其形状的新表示2.1. 为什么不直接使用现有的语言?存在用于指定顺序程序的语言,例如, C、C++、Java等,以及用于指定语法的语言,例如ANTLR、YACC/Lex、Bison等。然而,据我们所知,没有一种语言可以在一个源文件中同时包含这两种语言。过程模型的一个好处是它们的上下文敏感行为。这是指生成的几何体由于特定的上下文条件而改变的情况,例如,[2]中的可见性或遮挡约束。检测和处理这些上下文需要顺序逻辑(脚本或特殊功能),用于检测上下文并更改几何形状以适应特定情况。因此,顺序逻辑是指定过程模型所固有的。另一方面,过程模型通常被指定为形式语法,因此,它们需要适合于指定形式语法的语法。由于顺序代码和形式语法的语法是完全不同的,因此提出了一种新的语言,它探索了这两种语言的特定组合。2.2.为什么不扩展现有的语言?已发布的过程建模语法的实现已作为现有语言的扩展实现。例如,CityEngine [10,11]扩展了Python脚本语言。在这种情况下,用户编写python代码并调用形状语法(.cga)文件,这些文件与执行形状语法并产生几何形状的单独解释器相关联。这种方法已被证明是有效的生成形状,如这种方法的普及和它所产生的令人印象深刻的结果所证明的[2]。然而,从编程的角度来看,在此上下文中进行开发可能是困难的,因为Python代码中的逻辑与CGA形状语法中用于形状生成的逻辑是分开的。这种巨蟒和A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000184脚本和形状语法之间的差异使得逻辑的开发变得复杂,从而需要Python解释器与形状语法解释器进行通信。这两种解释器之间的兼容程度可以限制顺序逻辑和形状语法之间我们不扩展现有语言的根本原因是基于PSML程序是形状的概念,即,语言中的基本对象是形状。所有PSML程序都是这个“基类”的派生实例。在这方面,PSML程序可以被看作是形状规范的语义集合。现有语言的基类,例如,Java对这些类的重新定义需要对整个语言进行重大的重构,这促使了一种独立的完整语言的发展。我们仍在研究扩展现有顺序语言(特别是Java)的方法,这些方法既易于处理,又允许我们维护本文中作为PSML呈现的所需抽象和语法3. PSML形状文法PSML采用的方法是使用简单的语法将顺序语句与语法语句(规则)分开。PSML是顺序代码和形状语法代码的组合,顺序代码具有受Java启发的结构和语法,形状语法代码具有受L系统启发的结构和语法[3]。PSML程序的总体结构包括一个语法声明,其中包含一个或多个方法声明。每个方法声明必须包含至少一个规则声明。 在算法1中示出了这种结构的非常基本的示例。如第2.2节所述,每个语法都旨在 来表示某种形状,即,算法1中的CoffeeMug.psm语法旨在制作如图3所示的咖啡杯的几何模型。通常,在每个语法中定义了一个方法集合,并且这些方法中的每个方法都将引用形状和可选参数列表作为输入,并对引用形状进行操作,将其替换为子树从该方法中定义的语法生成的其他形状。传递给方法的参数允许每个语法使用上下文敏感的信息来实现形状生成过程,这对于控制细节级别非常有用。规则块必须在每个方法中定义算法1.PSM L 文 件 的内容:CoffeeMug.psm图三. (a)由CoffeeMug.psm(算法1)生成的形状的可视化(并且用于指定形状语法。这些语法使用传递的形状和参数变量以及局部定义的变量来生成语法形状的实例,例如,算法1的语法生成算法定义一个圆锥截头体(线6)与孔(线7和8),使在杯子的身体上。手柄是一个绿色(第12行)圆柱体(第6行),从中心(第11行)去除一个孔,并切成两半(第10行),与髋臼杯的侧面对齐并接触(根据其定义的定位)。图3示出了咖啡杯对象的各种实现,并演示了尽管有几个参数变化,表示如何强制形状约束,例如,对于这些变化,手柄和马克杯容器表面一致地连接。更一般地,PSML用于检测当前体积的大小和位置的语法允许用户开发在参数变化上一致地重新组织其子分量的形状,例如,各向异性标度3.1. PSML程序算法1显示了PSML程序文件的示例。在Java中,程序文件名必须与程序开始时的gram- mar声明的名称相匹配。程序主体用大括号“{}”定义。与Java/C++/C中一样,大括号if/else条件语句、for循环、while循环等。它们还划分了我们新定义的规则块,其中包含PSML形状语法规则。作用域还用于以类似于Java的方式控制可变分辨率。每个PSML语法的主体可以包括变量声明和初始化以及类似于函数的方法的集合。方法只能从形状语法规则中调用,并且当它们在某些形状语法的规则中作为非终结符后继符号出现时被调用(有关详细信息,请参见规则块和规则)。import指令用于将语法及其方法导入到另一个语法,并确定可以从任何语法调用的方法集合(类似于Java类的import)。调用语法方法的规则将控制转移到所选方法的语句。3.2.规则块和规则每个方法都必须包含一个rules块,该块由关键字rules表示,并具有由匹配的大括号定义的范围。每个规则块包含一组形状语法产生式规则,其中每个产生式规则具有如(1)中指定的通用形式。predecessor:condition:successor;(1)执行产生式规则会导致称为predecessor的非终结符符号被successor替换其可以是一个或多个终端或非终端符号。的conditionterm是一个分支表达式:如果condition的计算结果为true,则执行该规则;否则,执行具有相同前导的产生式规则的下一个的A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000185PSML规则的语法受到[3]中L系统描述的语法的启发,但不同之处在于不允许规则中的内联脚本。这些脚本函数已被可用的后继方法所取代。可以为给定的非终结符符号编写多个规则,以允许基于规则条件的评估的不同行为。这些规则的优先级由这些规则在语法中出现的顺序定义,其中第一个规则因为符号具有最高优先级。 可以通过使用特殊字符串终端指示形状是终端来指定新形状为真实世界对象(参见算法1,第8、11、12行)。端子符号在任何产生式规则中都不会作为前置元素出现,并且是存在于最终3D模型中的可见元素,但声明为void()的端子除外(有关详细信息,请参见第3.3节“空空间建模”)。虽然PSML中对非终结符的处理与[45]类似,但关键区别在于PSMLPSML处理规则块的方式有几个优点。由于块是语言本身的一部分,因此规则可以直接访问定义它们的顺序范围内的可用变量。此外,规则块本身可以被视为同一范围内的变量,允许后续的顺序代码访问和后处理在早期规则块中创建的形状。3.3.规则函数形状语法内的每个规则可以包括被称为规则函数的一个或多个特殊函数的序列。这些函数被插入在后继符号的列表之前,并且用于将前趋形状变换为后继形状,例如,改变形状、漫反射率或颜色(参见算法1,第8、11行)。PSML规则函数包括用于创建和转换(旋转/缩放/缩放)对象的特殊函数以及[1]和[2]中描述的split()和repeat()操作。然而,在可用操作的列表中明显缺少的是将3D体积划分为较小尺寸的形状的组件分割或Comp()操作,即,面、边或顶点(见图 2(a)对于立方体的面分裂的示例)。省略这个功能有效地限制了我们所有的语法形状,以保持体积,并保留每个终端作为虚拟对象的语义解释。这往往会产生更复杂的模型,但这些模型编码的重要信息,使PSML执行操作,可能难以处理使用基于外壳的表示。以下部分提供了可用规则函数的完整列表3.3.1.创建形状实例这个函数用一个全新的形状替换先前的形状,语法为:I(Stringtype,double[]params),其中type表示要创建的形状,params定义创建形状所需的参数。该函数可以被多次调用,并且后续符号与每个创建的形状相关联,其顺序与在规则内创建它们的顺序相同。例如,在算法1(第5行)中,创建圆锥体并将其与符号血管相关联,并且创建圆柱体并将其与符号handle_c相关联。所有实例都从一组预定义的3D形状描述中绘制。有六个基本 图 元 : {box , cylinder , sphere , cone , ramp ,Tetrahedron}。每个基元可以沿着其主轴细分/分割成其他导出的形状,使得可以创建19个不同的基元,如图4所示。例如,通过将圆锥截头体分成具有不同半径并且通过将圆柱体分割成环(手柄)和空间而在线10上生成马克杯手柄。在PSML内置函数库中预先定义了这些几何形状与[46]类似,PSML除了欧几里德坐标系之外还支持圆柱和球面欧几里德坐标系用于长方体、斜面和四面体。圆柱坐标系用于圆柱体和圆锥体,球面坐标系用于球体,使PSML能够用圆形几何体建模架构。3.3.2.拆分/重复这些函数用一系列新形状替换前趋形状,并需要两个参数。这些函数的第一个参数指示分割的坐标轴,即,新的形状将通过用垂直于所指示的轴方向的平面切割先前的形状来定义。第二个参数确定了这些划分将沿着该轴在何处发生(参见算法1第6、7、9、10行)。repeat函数接受可选的第三个参数,该参数用于为初始划分引入偏移量,这在具有偏移量的结构(如连续的砖行)中特别有用 在墙上请注意,分割操作沿着为每个形状定义的坐标系的轴进行。规则可以通过指定连续敏感的代码来适应不同的原语,或者使用顺序的流水控制语句,例如,if/then,或者使用仅在特定原语类型上执行的3.3.3.空间变换这些函数通过更改确定对象的大小、位置和方向的线性变换来对前驱图形进行操作。有三种变换操作:缩放、旋转和平移。缩放函数由S(sx, sy, sz)表示,并通过调整其在XYZ中的边界框分别由SX、SY和SZ给出的因子。旋转函数用R(θ,φ,θ)表示,并将旋转矩阵指定为围绕xyz轴的轴对齐旋转序列(欧拉角);按此顺序。平移函数表示为T(tx, ty, tz),并通过移动在xyz中的其边界框的中心分别增加tx、 ty和tz的量。这些函数可以与实例化或构造函数结合调用,以创建和放置原语,这通常是PSML形状语法的公理规则的一部分3.3.4.外观提供了一个通用函数来更改前驱形状的外观。该函数表示为外观(属性类型,属性值)其中,attrT type是指定应用程序属性类型的字符串值,attrVvalue表示该属性将采用的值。以下列表描述了可以直接在PSML中修改的属性类型:颜色、材质、环境光、发射、漫反射、镜面反射、光泽度、凹凸、凹凸贴图、凹凸权重、纹理、透明度。3.3.5.空隙空间一个特殊的函数void()用于使相关的符号成为最终模型中的一个不可见的终端(参见算法1第13行)。PSML模型中指定的空隙对于空隙空间分析特别有用,即,检测需要语义对象的特殊目的放置的上下文敏感情况。如前所述,标记空空间终端 的 能 力 是与 以 前 的 体 积 方 法 的 主 要 区 别 ,[27][28][29][29]这些空间的正式定义以及PSML提供的查询和操作这些空间的能力表明,A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000186图四、 (a-s)描绘19种不同的体积基元,其可用于PSML程序中以构建3D形状。这些形状是通过分裂六个基本形状之一来生成的从这些基本形状导出其他形状如下:(c,d)从(b)导出,(算法2. PSML文件的内容:Bricks.psm。程序的讨论作为图的一部分提供。五、图五. (a)通过运行PSML程序Bricks.psm(算法2)生成的模型序列。(b)演示了useAttributes()函数的实用性,特别是,该模型是通过在线替换“岩石”来生成的26.第4行和第5行显示了instanceof运算符用于确定传递的基元的坐标系的实用性,这使得能够使用不同的方法来放置取决于传递的基元的坐标系的砖块。第7-10行为自动建筑布局设计[20]和自动家具放置[21空隙空间的使用示例如图1A和1B所示。1(c,d),9和10,并将在结果部分进一步讨论。3.4.属性程序形状模型通常包括大量用于定义对象属性(如外观、大小、位置、装饰等)的常量。在许多情况下,对这些常量的特定选择决定了生成形状的“外观和感觉”。由于常量只是确定形状语法中变量的起始值,因此我们创建了属性文件作为一种机制,使这些常数外部的形状程序。包含属性文件允许用户与形状生成过程进行交互,而不需要他们理解PSML代码。在这种情况下,用户修改属性文件并从语法中生成不同形状的实例。这为没有经验的用户提供了控制形状生成过程的方法,并为他们的模型提供了视觉上独特的风格(见图5)。我们将这些常量统称为属性,PSML提供了一个规则函数,useAttributes( filtering, attrGroup)其中,文件引用外部属性文件,如算法3所示,attrGroup表示要从属性文件加载的属性的特定集合。 每次调用此函数都会从文件中加载这些常量的集合,并使其值可用于后续规则。这个规则函数的上下文相关使用允许单个形状语法根据上下文展现不同的几何形状和外观的规则。在调用useAttributes之后,使用前缀“@”引用加载的值算法3显示引用属性文件的内容。算法3. PSML属性文件的内容:brick.properties在算法2的Bricks.psm的第26行引用。3.5.myShape和作用域变量以及操作空间如前所述,可以从PSML形状语法规则调用方法。这些方法隐式地传递了调用规则的适当后继符号的形状。这个形状在被调用的方法中被指定为一个特殊的Shape变量,其中变量的标识符是myShape。myShape变量类似于许多面向对象编程语言中可用的this引用,并带有传递给方法的形状的许多重要属性这些A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000187见图6。不规则图案:a)是现实中具有不规则图案的实际石墙的图像。b)展示了我们使用随机递归文法对随机石墙的两个实现。见图7。递归嵌套模式:(a)由7行递归语法生成的斐波那契螺旋。(b)用两级递归生成的哥特式窗口。(c)用三级递归生成的哥特式窗口包括传递形状的基本类型、传递形状的坐标系以及定义形状的所有参数的值。 可以应用空间变量来检测所传递的基元形状的基元类型,instanceof操作符。此操作符的行为方式与Javainstanceof操作符完全相同。然而,该运算符用于检测不同前驱形状的实例或检测前驱形状的优选坐标系。有22个命名空间变量,其中19个用于图4所示的每个基元形状类型,另外3个仅检测传递的基元类型的坐标系类型(参见算法2行4、5)。顺序语句可以计算使用myShape变量执行上下文特定规则块的表达式,如图所示。 五、scope变量与myShape非常相似。不同之处在于,范围指的是规则的前身。这允许访问在每个规则中,直接的前趋者的维度,并促进递归语法的构造,如下一节所解释的。3.6.递归递归是文法的一个内在属性。递归文法是一种具有非终结符β的文法,它在派生树的更下游产生一个后继者β。递归允许PSML产生复杂的形状,如不规则的图案(图6),或嵌套的图案(图7),这是很难实现使用顺序代码,如[47]。PSML提供范围变量作为检查当前非终结符的属性的手段,如果满足某些标准,则停止递归,这用于终止图的形状推导。 7(a).3.7.执行模型语句分为顺序语句,即,Java风格的代码和规则块,即,形状语法代码。执行从指定的初始PSML语法的main()方法开始。main()方法传递单位立方体,因为它是初始形状。每个方法中的语句按顺序执行,直到遇到规则块所指示的形状语法。在每个规则块中,定义了一个由规则集合组成的形状语法。 语法的第一条规则被认为是语法的公理,即,使用传递到该方法的形状作为前驱应用的初始产生式形状语法的执行通过查找规则/方法来扩展每个后继形状直到所有符号都是终端符号而继续。执行的产生式规则的特定序列生成解析树。此树将产生式规则的序列记录为层次结构,其中非终结符符号是树的内部节点,终结符符号是树的叶子。如在[2]中,场景图用于跟踪生成每个终端对象所执行的语法产生式的序列,即,解析树(或派生树)。最终的场景图包括来自非常大的对象集合的语义上有意义的对象分组的层次结构 在根部附近,例如,建筑物的底层,一直到叶子处的不可分割的元素,例如,一座建筑物的一块砖。每个规则块的末尾可以跟随附加代码,这些代码可以使用terminals()或instances()函数查询场景图,并对返回的符号进行操作,以做出关于添加模型细节的决策或采取其他所需的上下文特定操作(第3.8节对此进行了更详细的解释)。当main()方法的最后一条语句被执行时,执行结束。形状语法的执行模型是深度优先的,即,解释器将第一个继承者完全扩展到所有在继续到下一个符号之前,它的终端元素。PSML执行模型的这种选择限制了[2]中描述的基于优先级的执行模型所提供的某些功能。具体来说,基于优先级的语法允许程序员在评估其他规则之前要求评估(执行)特定规则。这可用于创建将影响上下文敏感标准(例如后续规则中的可见性测试)的几何图形。然而,这些限制在某种程度上被以下事实所抵消:正确利用基于优先级的语法中的优先级值需要用户意识到分配给所有规则的优先级之间的可能复杂的关系,以便预测模型构造结果。对于涉及大量语法的模型,每个语法可能包含一个单独的优先级方案,跟踪特定派生的给定规则的优先级对于程序员和解释器来说都是复杂的。 因此,优先级的广泛使用有可能混淆执行序列,并使其更难以预测给定特定输入的派生模型。由于这个原因,我们认为基于优先级的执行模型所带来的好处被增加的复杂性所抵消用户需要有效地利用规则优先级。3.8.形状上的布尔运算PSML提供了独特的功能,在下一段描述,允许程序员访问和操作派生的非终端和终端形状从顺序代码。这是通过形状路径来实现的。特定解析树节点的形状路径是通过跟踪该节点的祖先并连接该节点中每个父节点的形状名称来创建的-尝试使用例如,在算法2中,形状路径A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000188见图8。 布尔运算用于创建一系列哥特式丁坝拱顶。这是通过创建一个体积集合(灰色)来完成的,这些体积集合用于使用布尔减法运算从头顶天花板上移除砖块。剩下的砖(棕色)形成了腹股沟拱顶的石头PSML提供了两个访问函数,允许顺序代码引用形状语法(规则块)中生成的形状:(1)终端(symbolPath)和(2)实例(symbolPath)。参数symbolPath被解释为“匹配任何”正则表达式,即,返回的形状将是其符号路径可以按顺序匹配symbolPath的元素的所有节点,例如,路径在墙里。/.砖头。“这允许程序员使用这种语义“速记”直观地引用大型且可能复杂的形状排列。默认情况下,搜索从解析树中与被调用方法相关联的子树开始,但在字符串前面加上“/”字符会从解析树根开始搜索。这两个函数都返回一个形状变量数组。然后,可以使用顺序逻辑来完成上下文敏感的操作,该顺序逻辑检查这些形状的属性,例如范围、几何形状、方向、外观等。两个独立的访问函数是必要的,因为它们提供了对这些节点的不同类型的引用。具体来说,instances()函数返回一个非终端形状的集合,即,在语义上将端子分组在一起但在最终模型中不可见的形状。函数的作用是:返回被引用的非终结几何的副本。这些形状可用于测试以检测上下文敏感的情况并创建新形状。相反,terminals()函数返回对形状的引用,并允许用户修改作为引用形状的后代的所有终端形状的几何形状。目前,由terminals()函数返回的形状通过在相关形状数组的元素上应用构造性实体几何(CSG)布尔操作来修改,如图所示。(八)。由于在规则块内生成的符号的数量和顺序通常不能被跟踪或先验已知,这些函数总是返回一个形状数组,这个数组的长度可以为0。可以使用函数形状1. geometricBoolean( Shape2, op)其 中 Shape1 和 Shape2 是 Shape 变 量 , op 是 表 示 操 作 类 型 的String。op的有效值为这些布尔运算产生新的形状,然后可以通过表1该表总结了布尔运算如何影响对称的几何形状,作为作为传递给几何布尔运算的第一和第二操作数的Shape类型的函数。我们将第一个操作数称为形状1,将第二个操作数称为形状2,NT表示非终端形状变量(通过调用实例()生成),T表示终端形状变量(通过调用终端()生成)。形状1形状2操作结果NT NT任何新NTNT T任何新NTT NT任何T更改T1 T2+,T1改变,T2删除T1 T2-T1改变它们的边界框的大小使用作用域变量,或者它们的体积使用特殊函数volume(),该函数可以在任何形状基元上调用。图10示出了这些函数如何可以用于基于走道的存在的门的上下文敏感的放置。布尔运算通常会生成无法建模为图4中19个形状之一的形状。因此,它们不能直接用作新形状语法的初始符号,即,规则块。为解决此问题,将布尔形状作为其前导符号的规则块作为规则块的初始形状传递给布尔形状的边界框如图10所示,当交叉点的边界框被传递到规则块时,该规则块执行减法和用门进行替换。布尔运算对形状变量的影响取决于与两个涉及的操作数关联的引用类型。当第一个操作数,即,左操作数不是终端引用,即,第一个操作数是通过调用instances()生成的形状,布尔运算生成一个新的形状,不会影响解析树形状的几何形状。当第一个操作数是终端引用时,变量引用的所有终端形状都将使用布尔值进行操作,该布尔值可以更改解析树的终端形状的几何形状。当第一个和第二个操作数都是端子,并且布尔运算是并集或交集时,第一个操作数的几何体接收布尔运算的结果,第二个操作数引用的端子形状被删除。这些规则总结在表1中。添加用于修改终端形状和用于初始化新规则块的布尔操作,使得能够实现丰富多样的上下文敏感行为,并极大地扩展了语言的表示能力。多边形模型上的布尔运算已经被证明是难以实现的,这是由于在确定多边形模型的相交时发生的数值不稳定性。最近的方法[48在这项工作中,布尔运算是使用Carve软件库[51]完成的,该软件库已被其他开源项目用于CSG运算,例如,搅拌机3.9.PSML开发工具我们已经实现了一个集成开发环境(IDE),通过定制Oracle的Netbeans软件编写PSML代码。通过ANTLR支持的语法(http://www.antlr.org/),IDE支持PSML语法和编程,包括语法突出显示、缩进和代码完成。Netbeans IDE原型具有集成的PSML解释器,允许用户创建、编辑、运行和可视化使用PSML指定的模型。PSML程序的集合也可供下载。这些模型从简单的A.R. Willis,P.Ganesh,K.Volle等人图形和视觉计算4(2021)2000189见图9。PSML用于办公楼建模。(a,b)显示使用建筑物的不同(宽,高,深)尺寸生成的两个模型。(c,d)示出作为全局解析树的子树提取的子结构。(e)描绘构建的3D空隙空间,并按功能对这些空间进行颜色编码(讨论见第4.1节表2图1中所示的办公楼模型的元素实例和体积的计数。 9(a、b).见图10。(a-c)描绘了空隙空间如何能够提供上下文敏感的几何形状生成。(a)显示了图1(d)中城堡露台的一部分和一个相邻的塔楼,露台顶部有一个绿色的走道。(c)显示了布尔相交之间的走道空和相邻的塔橙色。(d)显示了减去相交
下载后可阅读完整内容,剩余1页未读,立即下载
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 基于嵌入式ARMLinux的播放器的设计与实现 word格式.doc
- 经典:大学答辩通过_基于ARM微处理器的嵌入式指纹识别系统设计.pdf
- 嵌入式系统课程设计.doc
- 基于飞思卡尔控制器的智能寻迹车设计ARM基础课程课程设计.doc
- 下载基于ARM7的压电陶瓷换能器导纳圆测量仪的研制PDF格式可编辑.pdf
- 课程设计基于ARM的嵌入式家居监控系统的研究与设计.doc
- 论文基于嵌入式ARM的图像采集处理系统设计.doc
- 嵌入式基于ARM9的中断驱动程序设计—课程设计.doc
- 在Linux系统下基于ARM嵌入式的俄罗斯方块.doc
- STK-MirrorStore Product Release Notes(96130)-44
- STK-MirrorStore Storage Connectivity Guide for StorageTek Disk A
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-本科毕业设计.doc
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-.doc
- 龙虾养殖远程监控系统的设计与实现数据采集上位-机软件模块-本科生毕业论文.doc
- 麻阳风貌展示网站的设计与实现毕业论文.pdf
- 高速走丝气中电火花线切割精加工编程设计.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)