PathFinding进阶教程

上传人:仙*** 文档编号:158883586 上传时间:2022-10-07 格式:DOC 页数:13 大小:1.95MB
返回 下载 相关 举报
PathFinding进阶教程_第1页
第1页 / 共13页
PathFinding进阶教程_第2页
第2页 / 共13页
PathFinding进阶教程_第3页
第3页 / 共13页
点击查看更多>>
资源描述
Q3D寻径功能进阶我在看过软件自带例子和Xiao大哥的教程以后,对Pathfinding有了初步了解,但要把它用好,还有不少问题要注意,我在这里就把自己研究的结果跟大家分享一下。首先简述一下,寻径功能就是让指定物体按照某些路径走到指定位置的过程,系统会自动选择符合要求的最短路线。所以这里牵扯到几大问题。1,路径如何画,2,如何存储和调用目标位置3,如何指定进行寻径的物体 4,如何限制可选择路径。下面我们就这几个问题分别说明,最后再提出一些Bug解决的方法。l 在讲解之前我先解释一下该功能各个模块的含义。我用的是Quest4.3 首先我们找到Pathfinding 模板的位置,拖一个Pathfinding Example到场景中出来这么一坨东西顶部的英文注释,其实已经很清楚地告诉你一步步怎么做了,只要你懂英文。1,咱们先看最左边的一组channel完全没用的东西,一个触发器让你重置寻径物体的位置,不多说了,删除之即可2,最右边的Result的模块,类型是一个Matrix,是寻径物体计算的返回值,我们把它连接到物体3D object的第一个子连接块,替换原来物体的Object Motion模块(或者相机的Camera Matrix),Result 下面的文件夹里的内容决定了这个矩阵是怎么算出来的,其具体内容后面再说。3,中间的Motion Planning这是控制中心,我们要把它连接到最开始的channel caller上,保证它一直被调用。第一个子模块叫Original Position,连接了一个fast collision response相当于物体的位置向量,它下面的六个快捷方式不要随便动,因为他们都是那个result下文件夹中参与运算的东西,删掉就不好找了。只有小黄的“”那里需要你连接collision object,表示寻径的矩阵在运动时会撞上这些东西(和Walkthrough Camera中的对应模块一样),只是一般你不会故意把路径画的横穿障碍物,所以这下面一般不用连接什么,主要连接一个地面就行,让你的物体落在地面上(Result矩阵的计算是有重力的)第二个连接块写的是Destination(是一个表示目标位置的向量),我们需要替换一个motion planning info vector 模块它下面有两个子链接,第一个连接到上面的Motion Planning就成,可以做一个快捷方式拉下来。第二个名称是Node to get position from输入一个数值,该数值是所画路径中节点的编号(根据这个节点编号,系统就能找到场景中对应的位置了,也就是目的地)。至于这个编号怎么存,后面再说。第三个子链接块叫Next node range 我到目前还没有试出什么特别作用,大概是选择下一个节点范围的含义,就用默认的1可以了,就是按序号逐个寻找节点。乱改好像会出错。最后一个连接块是3D graph,是你画路径的基础。需要你从Template里揪一个channel过来连接上,这个3D graph有两个子链接块,均连接Collision Obj。不过前面的叫Source Object,含义是你要把路径画在这些物体上(一般连接地面、道路之类的),后面的是Collision Object,表示路径的碰撞,用于限制系统的可选路线,当你连接了碰撞物后,寻径所选择的路线就会避开碰撞物。l 好了,模块含义讲解完了,我提到要添加模块的你也要跟添加,否则后面就做不成了。着下面就开始说一开始提到的四大问题咯。1,路径如何画把Motion Planning和3Dgraph都调用(可以用一个Channel Caller集中调用它们),这样在寻径功能中才能够看到路径。切换到寻径面板勾上显示路径。要开始画,按下Paint按钮(默认在Idle上)此时场景中你的鼠标就带上了一个小棍和一个圈(注意,小棍和圈出现在面的正方向,即其法线的正向,如果你的面是朝下的,就基本看不到这个标志了,如果3Dgraph没连接好,你也看不到这个标志)现在就可以尽情地点了,路径自动生成右键结束绘制,画过的地方有编号,这个就是Node,物体的目的地就是这些Node。重新起笔的时候要让笔自动吸到原有节点,保证路径的连续性。还有注意,路径一定要连成回路,出现断头路的话寻径会出错。我的场景画好了以后看起来就是这样的效果,白色数字都是节点编号。至此,第一个问题解决。2,如何存储和调用目标位置前面说过了,所谓目标位置,就是这些Node的编号,从MotionPlanningInfoVector channel中调这些编号即可。但是你很快就会发现你画出了很多Node,有时候能到几百号,但你的目的地只有几个,就像这样上图后面的数字就是这些目的地对应的Node编号。所以当节点很多的时候,你需要把这些编号存入数组,以便调用。打开数组编辑器,从channels找到Array Table揪进Channel Graph双击它起个名字,我就叫Destination了,这样数组编辑器中就出现了你的数组Destination点击插入列的图标,插入一列,构成一维数组(插入列)输入你的列名,选择类型,我们用Value类型。之后点击插入元组按钮插入数组元素。最左侧是自动生成的数组元素序号,右侧是对应景点的Node。这样当你调用数组的某个值时,就相当于调用了对应的值(Node值)接下来就是把数组值传递给寻径找到刚才讲过的第二个模块Node to get position from在它下面放一个Array Value,双击它设置到刚才设置好的数组和列这个模块下面只有一个值的输入,就是Value指定你要调用数组的哪个元素。这个数值你怎么传递进来随意,直接输入,switch选择,或者随机都可以,我就不多说了。总结下来就是,把目的地Node存进数组,通过调用数组编号,取出对应的Node值,把Node值传递给寻径模块使他找到目的地。第二个问题至此解决。3,如何指定进行寻径的物体前面提到了,Result就是表示运算结果的矩阵,把它连接到物体的矩阵即可我就把它连接到了行走相机的矩阵,于是就出现了自动漫游的效果。打开result的文件夹,天哪里面好多东西我们完全可以不管它,只要result连接好了就可以寻径,如果你追求更多效果就尝试着动这里的值吧,反正我看着好乱。唯独知道那个圈红的Envelope表示旋转的混合速度,把函数曲线调陡一些转弯就变快了。其他的包括速度和重力运算。我利用result矩阵和普通行走相机矩阵的切换,做到了一个自动游览和行走的切换操作。4,如何限制可选择路径其实完成前三步就已经可以开始寻径了,但是还有一些问题首先,物体会从一个节点直奔目的地节点,完全忽视你画的路线。所以我们要改一个设置勾上Disable direct path checking这样物体就会一个一个节点地走了。下面的Never Leave Path我选中的时候会发生场景抖动,不知道为什么。还有一些问题,寻径的时候物体会抄近道,就是一条路径还没走到头的时候就直接转向下一条路径,导致从一些建筑物中间穿过,对此我们不鼓励使用在fast collision response中添加碰撞物,因为那样物体会卡住,而是要在3D graph 的Collision Object中添加阻碍物,像系统自带的教程,只留下道路的空间只不过最后不渲染该物体就好。这样寻径物体会尽量绕开碰撞边界,沿你想要的路径走。但是我在试验的过程中发现由于寻径的fast collision response里有Collision Spheroid Radius,它会导致运动过程中矩阵与障碍物相碰,寻径终止并且无法再启动。所以把碰撞半径改成很小也很重要这样物体就可以按你想要的路线走并且不会被扔在半路啦我研究的结果就到此为止了,至于系统自带的例子那个寻径矩阵的运算方法我还没搞清,如果可以简化的话当然更好。/没有版权保护,转载请注明出处
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!