




免费预览已结束,剩余19页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.导论Virtools dev的AI软件包为电视游戏或虚拟现实带来了更高的仿真度。AI软件包提供一组扩展的行为模块,这些行为模块可以管理特定角色或物体。使用AI软件包提供的行为模块,用户可以定义角色或物体为AI物体(一般称为AIbot),这些物体可以对周围环境做出评测,并且作出行为上的选择,创建群体行为和独立角色,使那些角色可以寻找物体、守卫巡逻区或与其他角色格斗等等。AI行为模块首先赋予角色视听感觉能力以便侦测他们的环境,然后使用更高级的行为模块(例如follow、run away、hide等)管理角色对环境做出的反应。在virtools中提供四类AI行为模块,他们是:Initialization(初始化行为模块组):在执行AI之前对场景进行测试、初始化AI引擎和场景中的AI物体、自动生成或输入AI引擎所需要的环境数据。Data Edition(数据编辑行为模块组):用户编辑环境信息的行为模块。AI Logic(逻辑行为模块组):测试条件,然后在复杂的环境中开启恰当的AI action。Action(动作行为模块组):这些行为模块是AI软件包的核心部分,这些行为模块可以使AIBots拥有相当智能的行为(例如射击、藏匿或跟随等等)AI行为模块和virtools标准的行为模块在使用方法上是相同的,通过参数调整诸如秘密行动、听觉能力和组队行为的标准。2. 流程AI过程包括三个主要任务:定义场景、了解环境以、决策和行为。用户首先要对场景和要使用的角色进行初始化定义,ai软件包提供专门的行为模块可以进行该类工作。了解环境需要使用Graph Data。Graph Data需要用户使用特定的行为模块创建,并且保存到硬盘中。决策和行为需要使用AI的Action类行为模块配合Logic类行为模块。Logic类行为模块为AIbots提供决策,然后触发各种由Action类行为模块控制的格斗、射击、藏匿或徘徊等动作。Graph Data用于通过使用动态射线选择路线或寻找可以躲避目标AIBot的位置。所有的AI动作都通过消息驱动,消息被用户的脚本解释和处理并且一般会触发一个动作。2.1. AI执行过程在使用AI功能之前,用户首先需要创建场景。用户需要保证所有的角色和动画的功能正常,并且在添加任何AI功能之前需要设置碰撞侦测和障碍物。障碍物和地板必须被声明为固定的障碍物,并且用户需要建立碰撞系统。用户需要添加PathObject属性到诸如门、梯子等一类物体上。这将影响到路径搜寻。首先有三个初始化行为模块需要在每一个场景中被运行:AI Level Settings行为模块需要出现在Level脚本中、Create AI Entity 行为模块和Set Personal Parameters行为模块需要出现在AIbot的脚本中。当用户的场景准备好,需要使用Test Agent行为模块测试场景中的位移和碰撞然后使用create graph data行为模块,为AIbot勘测地形。Graph Data可以描述环境信息,主要的作用就是简化环境信息,使用graph data可以加快角色在环境中寻找路径的能力。graph data信息会在硬盘上面保存bin文件,并且可以被edit graph行为模块查看、编辑。graph data信息可以被import data行为模块导入并在场景中保存为一个数据阵列。注意,用户可以为不同的AIbots生成不同的graph data,不同角色的graph data会相同的环境进行不同的描述。例如个子较高的角色可能不能到个子教矮的角色可以到达的区域,这时候两个角色虽然同处于同一个环境中,但是需要不同的graph data,以便定义不同的角色的活动区域。使用edit pathway行为模块创建或辑特定路径,路径独立于Graph Data。例如创建一个角色的巡逻区最后可以使用Actions类行为模块配合Logics类行为模块,添加AI功能到AIbots上面。3 使用AI软件包3.1. 准备工作AI基本上是工作的最后一个步骤。用户首先需要构建场景和脚本。然后确定所有的角色和动画功能正常,并且在添加AI功能之前需要确定碰撞监测和障碍物需要进行正确的设置。在使用AI之前,需要为场景中的特定物体添加AI (Path)Object和Collision Manager这两类属性定义障碍物地板和障碍物需要被定义为固定的障碍物。首先需要打开物体的setup窗口,为物体添加Fixed Obstacle属性,之后可以通过属性值修改固定障碍物的属性。定义路径物体路径物体是场景中用于更改所访问的区域的元素。用户可以为诸如门、梯子、电梯和传送点一类的物体添加对应的属性,并且做出正确的设置,这样做之后则可以作为路径被搜寻到。定义避让区域AI的动作类大多数行为模块可以控制物体移动,这些行为模块中的array of points to avoid参数可以定义某些区域在物体移动的时候应该避让,我们称之为避让区域。用户需要创建一个数据阵列定义避让区域,数据阵列中列出所有围成避让区域的点的Vector。行为模块中的displacement mode参数提供的Furtive displacement(隐秘行动)和avoid dangerous points(躲避)两种模式,会对避让区域做出反应。Furtive displacement(隐秘行动)模式会使物体在避让区的时候尽可能隐藏自身;avoid dangerous points(躲避)模式会使物体尽可能的远离避让点。很多时候,删除Graph Data中的点也可以使AIbots避让某些区域,这比创建避让点更加容易一些,但是这种方法生成的避让区域将是静态的,在避让区域时常需要更改的时候这种方法就无能为力了。有些行为模块中会有referential for the points to avoid参数,当使用referential for the points to avoid参数的时候,描述避让区域的数据阵列中的点的Vector值,将不再使用世界坐标系统。创建角色群组AI Action类某些行为模块中会有Displacement Mode参数,当使用参数的furtive displacement considering the characters view angle选项的时候,物体会在角色的视觉范围内隐秘行动,这个时候用户需要设置Groups of characters to avoid参数为某个特定的由角色组成的群组。3.2. 初始化AI与程序测试3.2.1.初始化AI用户需要使用一些AI Initialization类行为模块初始化AI,并且在脚本开始的时候这些行为模块必须被触发。AI Level Settings一般用于整个场景的AI初始化,而Create AI Entity行为模块和Set Personal Parameters行为模块用于单个物体的初始化。AI Level Settings 行为模块AI Level Settings行为模块必须使用在level script上,并且只需要也只允许在AI角色被初始化之前启动一次。在AI Level Settings行为模块里面有三个重要的设置:Max entity:场景中允许出现的最大AI物体数量。比较大的参数值会占用更多的cpu和内存资源。allowed time per frame(ms):AI time将ai的计算任务分配到很多桢,以便保持桢速率。参数值为0代表着没有时间限制。参数值比较低的时候,计算会被分配到更多桢,aibot的响应速度会降低。参数值比较高的时候,桢速率会降低。这个参数值常被设置为1到5毫秒之间,设置这个参数需要考虑AIbots的数量、场景的复杂程度、aibots的响应速度和桢速率需求。value of a meter:用于变换创建模型的单位。如果模型所使用的单位是英寸,那么这个参数值应该设置为39.37这个行为模块添加诸如AI_WALK、AI_RUN等消息。他允许AI Action类行为模块发送这些消息,这些消息将会作用于用户的脚本中。这些消息会触发类似Unlimited Controller一类的行为模块控制的角色动作。Create AI Entity行为模块在物体运行任何其他AI行为模块之前,用户需要为物体运行Create AI Entity行为模块,这会将物体添加到AI引擎的物体列表。任何需要被AI引擎计算的物体都必须使用create AI Entity行为模块进行定义。所有的路径物体同样需要使用create AI Entity行为模块进行定义。create AI Entity行为模块可以将物体定义为三种不同类型的AI物体。Player:有游戏者控制的物体,虽然这些物体不被AI引擎控制,但是这些物体会影响AI引擎内其他的物体。AIbot:这一类物体时被AI引擎控制的自动物体Path Object:这类物体只会对搜寻路径起作用,一般用于定义门、电梯、传送点或梯子一类的物体。注意:在create AI Entity行为模块必须是物体脚本中第一个被触发的行为模块,所以create AI Entity行为模块出口处的连接必须被设置延迟,这样才能保证所有的AI action类型为模块会在物体被初始化之后运行。因为很多的AI行为模块会需要物体作为参数输入,但这些作为参数输入的物体必须是已经被初始化的物体,所以我们说,所有的AI action类型为模块必须在create AI Entity行为模块将物体初始化之后才可以被执行。另外当一个物体不再需要被ai引擎考虑的时候,可以使用Remove AI from Entity行为模块将物体设置为非ai物体,这样会减轻ai引擎的计算负担。Set Personal Parameters行为模块这个AI初始化行为模块可以在需要的时候动态的设置角色的技能和属性:视听敏锐度、视觉角度、组队信息、Graph Data信息使用和路径搜寻精度等。(例如如果一个AIbot进入了一个黑暗的房间,那么视觉敏锐度就应该降低,并且使用新的Graph Data)。这个行为模块同样需要在物体脚本的开始被触发。在Set Personal Parameters行为模块中会出现如下参数:Entity Direction:设置物体正前方的方向Team ID:组队的编号Hearing acuteness:角色听觉的敏锐度。设置角色和声音的距离,当角色和声音之间的距离小于这个参数的时候,角色就可以听到声音。Visual acuteness:角色视觉的敏锐度。设置角色和可视物体的距离,当角色和可视物体之间的距离小于这个参数的时候,角色就可以看到物体。 Angle of view cone:角色的视角大小,设置角色可以看到的范围Bot Max Speed:bot的行动速度(单位为 米/秒)Bot Height:角色的双脚和位置之间的y轴距离Bot Width:角色的宽度Distance Between two Goals:当角色在追寻一个活动的目标,并且这个目标移动超出了参数所设置的距离,角色将启动一次新的路径搜寻。比较大的参数值将会降低目标搜寻的精准度,但是会提高程序的执行速度。Minimum Distance to the goal:当角色与目标之间的距离小于这个参数的时候,角色会认为自己已经到达。Minimum Distance to an intermediary point:当角色与路径的中间点的距离小于这个参数的时候,角色会认为自己已经到达。Slowing distance to the goal:当角色与目标之间的距离小于这个参数的时候,角色会在保证不丢失目标的情况下减慢自己的速度。Slowing distance to an intermediary point:当角色与路径中间点之间的距离小于这个参数的时候,角色会在保证不丢失路径中间点的情况下减慢自己的速度。Maximum height delta:物体与目标或路径中间点的Y轴距离小于这个参数的时候,角色会认为自己已经到达。Graph Name:制定用作搜寻路径的GraphData。Level Precision of the PathFinding:选择路径搜寻模式。选择robot-like模式,在搜寻路径的时候将紧贴节点,这样得到的路径不适合生物使用,但是这样搜寻路径会占用较少的系统资源;选择human-like without dynamic avoidance模式,这种模式可以制造更加适合生物使用的路径,但是使用这种模式的时候物体之间不会进行动态比让;选择human-like with dynamic avoidance of other AIbots模式,使用这种模式的时候,会占用最大的系统资源,但是得到的路径会进行动态避让,并且更适合物体的群组行动注意:如果需要更改这些参数,这个行为模块需要被重新触发。另外,在一些AI行为模块中会有displacement mode参数,当这个参数选择use shortest path的时候会自动设置Set Personal Parameter行为模块中的level precision of the PathFinding参数为Robot like。Add Sound行为模块Add Sound行为模块可以允许ai引擎识别一个声音的位置、音量和类型。参数如下:in:触发这个行为模块out:当行为模块完成后触发这个行为出口error:当行为模块运行出错的时候触发这个行为出口Source of the sound:设置声源的位置Referential:设置声源位置的参考物体Sound type:选择声音类型。选项分别为格斗声(Combat)、环境声(ambiant)、角色声(character)和危险声(danger)。Intensity:声源的音量Duration:持续时间Owner:设置发出声音的物体3.2.2.测试环境Test Agent行为模块test agent行为模块是最先用于确定场景中物体机能是否准备完善。Test Agent行为模块一般会被安排在Set Personal Parameter行为模块后面执行。通过使用test agent行为模块,用户可以使用小键盘区控制控制aibot。当用户移动角色的时候,从角色位置投射的红色的射线用于测试角色与定义为固定障碍物的静态物体之间的碰撞。绿色的线条代表在1公里之内没有任何物体会与角色发生碰撞。但是检测之前用户需要对地面墙壁等静态障碍物进行定义。蓝色的射线从物体表面与红色射线交叉的位置发射,表示交叉位置表面的发现方向。如果蓝色的线条与表面不垂直,用户则需要校正表面的法线。当所有的物体检查结束,用户则可以进行下一个步骤:创建Graph Data.3.3.创建Graph DataCreate Graph Data行为模块是一个路径信息生成器,他通过AI引擎的计算生成graph data以便描述地形。在任何场景中graph data只需被计算一次,因为Graph data会被保存成为一个bin文件到用户的硬盘上。并且在使用import data行为模块导入到场景中之前,可以被edit graph行为模块查看、编辑。在场景中可以使用多个不同的graph data文件,在同一场景中,大型角色和体积较小的角色也许就会需要不同的graph data文件。3.3.1 Graph Data行为模块所有的物体都使用Test Agent行为模块测试完成之后,用户可以使用Create Graph Data行为模块替换原有的Test Agent行为模块。在使用Create Graph Data行为模块的时候要注意,只可以同时计算一个graph data信息。参数:Start Position:起始点的位置。Referentia:起始点的参照物体。Min Bounding Box:graph节点放置在一个占位框里面,这个参数相当于设置占位框的左下角的坐标。Max Bounding Box:graph节点放置在一个占位框里面,这个参数相当于设置占位框的右上角的坐标。Average node distance:节点之间的距离。GraphPath:graph文件保存的位置与文件名,由于会生成多个文件,所以在这里不需要键入文件的扩展名。用户在为相同类型的物体生成graph data的时候,为了加快计算速度,可以在运行的时候对这些物体进行复制,这样复制出的物体会一起参与到graph data的创建工作中。一般而言20-70个物体可以比较明显的加快计算速度。Creating Graph Data行为模块是一次只可以生成一组graph data,虽然用户需要许多不同的graph data文件,但是生成graph data的计算只允许同时进行一个。用户需要在creat graph data行为模块的参数中,设定graph data文件的路径位置和文件名。Average node distance参数会确定最终的graph密度。Graph Data (图为编辑模式下看到的图像)左边的为Average node distance参数设置为三米得到的,而右边的则是设置Average node distance参数为五米的结果。用户可以设置Creating Graph Data行为模块的Angular Density参数,默认为36,一般不超过36不小于3。比较小的参数值会使搜索路径的时候在点周围执行较少方向的勘测。如果场景的区域很大并且只需要很简单的路径,那么这个参数值可以设置的比较小在生成Graph Data的时候,Set Personal Parameters行为模块中设置的角色运动速度需要被设置成一个比较合适的数值。单击play按钮启动计算,一旦Create Graph Data行为模块被启动,在开始勘测地形的时候会出现黄色和绿色的点。这个过程将持续一段时间,依地形复杂程度的不同,时间长短会不同。黄色的点代表终点,绿色的代表被勘测过的点。注意:所有的aibot必须参与生成Graph Data!如果有aibot出现但是不参与graph data生成,那么这个过程将不会停止当创建graph data计算结束,在日志(log)窗口中会显示Graph Data Generation is finished。然后会看到graph会进行自动优化,然后消失。当那些曲线消失不见时,graph已经作为bin文件被保存到硬盘中。3.4. 预览和编辑Graph DataEdit Graph行为模块为了确定graph data文件已经被保存或者需要对graph data进行修改,用户需要在脚本中添加Edit Graph行为模块,然后指定graph data的bin文件的路径位置与文件名,关闭行为模块,之后自然会读取bin文件。用户可以看到graph data被显示为节点和连接。用户可以在播放模式下添加或删除节点,也可在停止的状态下移动或删除节点,都可以达到修改graph的目的。在播放模式下可以使用A键添加节点,使用D键删除节点,使用L键和F键在两个节点之间进行连接3.5.导入Graph Data3.5.1 Import Data行为模块import data行为模块会调用一个存储graph data和pathway的数据阵列。在保存场景的时候,在数据阵列中的信息会被导入一并保存到场景中。3.5.2 AI数据阵列一个叫做current ai data的数据阵列会被ai引擎自动创建。这个数据阵列会作为Import Data行为模块的输入参数。阵列内通常需要两列,参数类型分别为AI Graph Data和AI PathWay Data。在阵列中添加的每一行都可以控制导入其它的Graph Data文件或pathways。在倒入数据的时候,所有需要导入的的graph data都必须包含的数据阵列里面。3.5.3 保存Data到场景通过保存场景,可以将graph data信息导入到cmo文件当中。3.5.4 添加或者重新导入Data如果用户在导入之后对graph data进行了编辑,那么用户需要重新导入,因为edit graph行为模块只会对保存在硬盘上的bin文件里面的信息进行编辑。当导入或者重新导入信息的时候,所有的graph data必须包含在数据阵列中,并且需要保证所有硬盘上的的bin文件可以使用。当添加或者重新导入graph data的时候,请遵循如下步骤:1打开import data行为模块2设置current ai data参数制定的阵列3如果用户只是简单的变更当前的graph data,则不需要修改任何内容,只是保存cmo文件就可以。如果用户需要添加新的graph data或者pathways在Current AI Data数据阵列中,则需要添加新行,并且设置单元格内容。3.6.使用Pathways3.6.1 创建和编辑PathwaysPath way是使用graph data信息指定路径的补充。用户可以使用edit pathway行为模块创建或编辑pathway。用户需要在edit pathway行为模块指定pathway的保存路径,指定方式与Graph Data相同。edit pathway行为模块需要在运行模式下进行编辑,在编辑的时候可以使用一些快捷键。使用S键可以选择节点,使用A键可以在鼠标处添加点,删除点可以使用D键。最后通过保存场景可以将pathway文件保存到硬盘上用户可以通过为路径节点添加way point script属性,来修改aibot在路径上面的行为。首先选中一个节点,然后使用右键菜单打开3D Object Setup窗口,转到属性窗口,双击属性值(路径节点本身已经被添加了way point script属性),在打开的窗口中可以修改属性值,控制aibot到达这个节点之后的行为。3.6.2 导入Pathways类似导入Graph Data,Pathways也会创建bin文件保存到用户的硬盘上,并且允许被编辑。用户需要使用导入Graph Data相同的方法导入Pathways。3.6.3 使用Follow Pathways行为模块Follow a PathWay行为模块式action类型为模块中唯一使用pathway的行为模块。In:触发这个行为Failure:如果行为运行失败则触发这个行为出口PathWay Name:路径名Destination:输出当前角色与路径间的距离Percentage of the pathway covered:输出路径的完成度3.7.使用Action类和Logics类行为模块一旦用户将graph data得导入任务完成并且已经保存到场景中,ai引擎则拥有了可以指导AIbots寻找路径的优化环境信息。Action类行为模块看似简单。但当他结合logic类行为模块的时候,他们可以生成很多神奇的效果,例如秘密行动、躲避敌人或者在环境有任何异样的时候追赶可疑的角色等等。3.7.1 Action类行为模块Action类行为模块可以为角色提供一些高级的行为,例如格斗、秘密跟踪或隐藏自己等等。有一些需要graph data的名字作为参数的行为模块,可以允许物体在执行不同任务的时候使用不同的graph data。action类行为模块通过发送消息指导其他行为模块完成任务。通常action类行为模块发送下面的七个消息到目标物体的:AI_WALK:行走AI_BACKWARD:后退AI_RUN:奔跑AI_STOP:停止移动AI_JUMP:跳跃AI_FIRE:对目标开火AI_CROUCH:蹲下这些信息会被脚本中诸如Unlimited Controller一类的行为模块接受到,然后触发角色相应的动作。一个aciton行为模块在被激活后,可能会一直运行,直到同一角色的其他的action行为模块启动或行为模块的输入参数出错。参数输出点会输出一些关于aciton的信息,例如距离、角色是否已经到达或角色正在开火等一些信息。这些信息可以在脚本中使用Fight:格斗In:触发这个行为Failure:如果行为运行失败则触发这个行为出口Character To Fight against:选择要格斗的对象Fighting strategy:选择格斗策略Is in the nearby of the enemy:输出格斗对象是否已经到达攻击范围之内Is kicking:输出当前是否正在攻击Flee:躲避In:触发这个行为Failure:如果行为运行失败则触发这个行为出口Point to flee:指定需要躲避的点的坐标Referential:指定需要躲避的参考物体Stop when hidden:当角色将自身藏起来的时候就停止躲避Graph Name:选择graph。Destination:输出当前角色的目的地Follow:跟踪In:触发这个行为Failure:如果行为运行失败则触发这个行为出口Character to follow:选择要跟踪的角色Final distance from the followed character:与跟踪目标之间保持的距离Final position related to the followed character:跟踪角度,180度代表在后面跟踪,90度则代表在侧面跟踪Displacement mode:移动模式Array of Points to avoid:选择避让区域Referential for points to avoid:选择避让区域参考物体Group of Characters to avoid:选择需要避让的角色群组Destination:输出当前与角色的距离Has arrived:输出是否已经追到目标Goto:移动到指定位置In:触发这个行为Arrived:当物体到达目的地的时候触发这个行为出口Failure:如果行为运行失败则触发这个行为出口Destination:输入目的地坐标Displacement mode:选择移动方式Array of Points to avoid:选择避让区域Referential for points to avoid:选择避让区域参考物体Group of Characters to avoid:选择需要避让的角色群组Has arrived:输出物体是否已经到达目的地Distance to go:输出当前与目的地之间的距离Hide:隐藏In:触发这个行为Has arrived:已经到达隐藏位置的时候触发这个行为出口Failure:如果行为运行失败则触发这个行为出口Group of Characters to Hide from:设置要躲避的角色群组,隐藏自身,不让这个群组发现。Choice of the Hiding-Place:选择隐藏位置Far from the enemies:选择距离敌人较远的地方进行隐藏Close to initial position:选择离角色最近的位置进行隐藏Displacement mode:选择移动方式Array of Points to avoid:选择避让区域Referential for points to avoid:选择避让区域参考物体Group of Characters to avoid:选择需要避让的角色群组Position of the Hiding-Place:输出隐藏位置的坐标值Is hidden:输出物体是否已经被隐藏Set Action:指定低级动作In:触发这个行为Turn:设置转弯的角度Absolute Angle:按照设置的转弯角度进行转弯Speed:设定速度Jump:角色跳跃Crouch:角色蹲下Shoot:角色开火Shoot:射击In:触发这个行为Failure:如果行为运行失败则触发这个行为出口Character to shoot at:射击攻击的目标Range of the gun:武器射程Angle of the cone of the dangerous area:危险范围,如果有相同组别的角色在危险范围内,物体会自动到同组角色安全的位置。Angle of possible inaccuracy:角色射击的容错角度Displacement mode:选择移动方式Array of Points to avoid:选择
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护工照顾老人合同协议书
- 招聘算不算买卖合同范本
- 直接执行的采购合同范本
- 待采购合同协议模板模板
- 校园美化文化墙合同范本
- 汽车载货合同协议书模板
- 恒大解除买卖合同协议书
- 沥青混凝土加工合同协议
- 强制治疗所协议合同模板
- 植物树种植售卖合同范本
- 教科版四年级上册科学全册教案
- 图形动画毕业设计
- 工会劳动竞赛课件
- 2025-2026学年苏教版小学数学五年级上册教学计划及进度表
- 2025年建筑工程-安全员C证-安全员(C证·上海)历年参考题库典型考点含答案解析
- 光伏项目施工组织设计方案
- 2025政府采购评审专家入库题库与答案
- 仪表安全知识培训课件
- 2025年三级老年人能力评估师考试题库(附答案)
- 婴幼儿营养与喂养理论知识考核试题及答案
- 工程设计图纸技术交底
评论
0/150
提交评论