raycast 一小段距离碰撞到的poly

时间:2023-02-21 16:31:06

dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, const float* endPos,

const dtQueryFilter* filter, const unsigned int options,

dtRaycastHit* hit, dtPolyRef prevRef):

做2D的检测,忽略y轴

1 先让curRef = startRef;

2 while (curRef)

{

3 在curRef上进行碰撞dtIntersectSegmentPoly2D

hit->hitEdgeIndex = segMax;

把碰撞到的polygon存起来hit->path[n++] = curRef;

segMax == -1的时候说明射线的end在这个poly里面

那就不用往下碰撞了,直接hit->pathCount = n;

4 接下来碰撞nextpoly for循环

对于这个poly的所有link

找到segMax那条边

并且根据其ref找到nextPoly和nextTile

if (nextPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION)//有可能是segMax么?

如果这个link->side == 0xff也就是不是tileboundry,nextRef = link->ref;

if (link->bmin == 0 && link->bmax == 255)也就是link跨越了整个边

下一个polyref就找到了

else

就是只覆盖了部分边的link

float z = startPos[2] + (endPos[2]-startPos[2])*tmax;求交点,

如果是在lmin和lmax之间,则说明相交。

下一个polyref就找到了

竖着的两个格子也是一样的

5 lastPos用来存之前的curPos

curpos移动到碰撞点 dtVmad(curPos, startPos, dir, hit->t);

获得segMax对应的边的两个顶点e1,e2

算出curPos的高度值 curPos[1] = e1[1] + eDir[1] * s;

eDir是e1到e2的向量,s是curpos在线段上的插值

计算curpos移动这一段的cost,也就是lastPos, curPos之间的cost

累加到hit->pathCost

6接下来就是,end不在poly的里面,又没有找到nextref的情况

那就是we hit a wall.

计算碰撞点在xz平面上的法线hit->hitNormal,并且dtVnormalize

7 如果没有碰撞上这个poly,进入nextPoly,因为毕竟还有nextRef

raycast 一小段距离碰撞到的poly的更多相关文章

  1. 需要中文版《The Scheme Programming Language》的朋友可以在此留言(内附一小段译文)

    首先给出原著的链接:http://www.scheme.com/tspl4/. 我正在持续翻译这本书,大概每天都会翻译两小时.若我个人拿不准的地方,我会附上原文,防止误导:还有些不适合翻译的术语,我会 ...

  2. 处理TCP连包的一小段代码

    学习网络编程也有一段时间了,一直听说TCP数据会连包,但一直不知道怎么测试好.最近测试了下:发送方使用对列,将发送的数据存入队列,然后开线程,专门发送.发送多包数据之间不延时.在接收方,他们确实连在一 ...

  3. Cookie是存储在客户端上的一小段数据

    背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaSc ...

  4. 昨天周末晚上没有出去,码了一小段,先留着kangkang。

    昨天周末晚上没有出去,码了一小段,先留着kangkang. import numpy as npimport matplotlibmatplotlib.use('Agg')import matplot ...

  5. 软件工程-构建之法 理解C#一小段程序

    一.前言 老师给出的要求: 阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长 ...

  6. 一天一小段js代码(no.4)

    最近在看网上的前端笔试题,借鉴别人的自己来试一下: 题目: 写一段脚本,实现:当页面上任意一个链接被点击的时候,alert出这个链接在页面上的顺序号,如第一个链接则alert(1), 依次类推. 有一 ...

  7. img外头包着a时底部出现的一小段高度的解决方法。图片水平垂直居中用css解决的方法。

    <a><img/></a> 这种结构有时候在界面预览的时候会出现一段多出来的高度.这个高度,一开始我很奇怪是什么原因产生的.鼠标移动到a标签上会有高度出现,一开始我 ...

  8. &lt&semi;a&gt&semi;标签里面嵌图片&lt&semi;img&gt&semi;下面出现一小段空白的原因

    今天做项目的时候,发现在a标签,里面嵌入<img>会出现空白 css 内容: a{ border:1px solid black; } img{ width:200px; } html内容 ...

  9. 曹工说JDK源码(4)--抄了一小段ConcurrentHashMap的代码,我解决了部分场景下的Redis缓存雪崩问题

    曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位? 曹工说JDK源码(2)--ConcurrentHashMap的多线 ...

随机推荐

  1. 基于Verilog HDL整数乘法器设计与仿真验证

    基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...

  2. IE全屏浏览代码

    以前做过一个网络版的商场导购触摸屏系统,用ASP写的,就是要在运行的时候全屏浏览而不能出现标题栏.工具栏.状态栏等.解决方法是用JS弹出全屏窗口,建立html文件,代码如下: <script l ...

  3. Java数组转成list,list转数组

    下面介绍一下Java中数组和List集合如何互相转换. 数组转成list 第一种: String[] userid = {"aa","bb","cc& ...

  4. Linux下访问网站

    1.将打包的文件解压到/usr/local/tomcat7/webapps/ROOT下 2.将8080端口开启 3.通过浏览器访问,结果返回来的状态时Aborted,出现 严重: The web ap ...

  5. Arduino1&period;7&period;10在Ubuntu下创建快捷方式

    从官网下载的arduino1.7.10版本没有快捷方式只有可执行文件arduino,通过下面的方法可以创建快捷方式 打开链接:http://www.easyicon.net/1171938-ardui ...

  6. 【Uva11212】 Editing a Book(IDA&ast;)

    [题意] 有n个数字的全排列,每次可以剪切一段粘贴到某个位置.问最后变成升序最少多少步. 如"{2,4,1,5,3,6}要2步 {3,4,5,1,2}只要一步 [分析] 迭代深搜真的AC了也 ...

  7. Java笔记&lpar;二十四&rpar;&hellip&semi;&hellip&semi;集合工具类Collections&amp&semi;Arrays

    Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...

  8. sql函数(转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  9. 第二次作业之微信小程序

    2.1 介绍产品相关信息 你选择的产品是? 微信小程序 为什么选择该产品作为分析? 在等待了1年多以后,小程序终于在今年初上线,即速应用在H5领域的累计,便承接在小程序上.8月7日,即速应用的用户微信 ...

  10. python itchat 爬取微信好友信息

    原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚 ...