raycast 一小段距离碰撞到的poly
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的更多相关文章
- 需要中文版《The Scheme Programming Language》的朋友可以在此留言(内附一小段译文)
首先给出原著的链接:http://www.scheme.com/tspl4/. 我正在持续翻译这本书,大概每天都会翻译两小时.若我个人拿不准的地方,我会附上原文,防止误导:还有些不适合翻译的术语,我会 ...
- 处理TCP连包的一小段代码
学习网络编程也有一段时间了,一直听说TCP数据会连包,但一直不知道怎么测试好.最近测试了下:发送方使用对列,将发送的数据存入队列,然后开线程,专门发送.发送多包数据之间不延时.在接收方,他们确实连在一 ...
- Cookie是存储在客户端上的一小段数据
背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaSc ...
- 昨天周末晚上没有出去,码了一小段,先留着kangkang。
昨天周末晚上没有出去,码了一小段,先留着kangkang. import numpy as npimport matplotlibmatplotlib.use('Agg')import matplot ...
- 软件工程-构建之法 理解C#一小段程序
一.前言 老师给出的要求: 阅读下面程序,请回答如下问题: 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长 ...
- 一天一小段js代码(no.4)
最近在看网上的前端笔试题,借鉴别人的自己来试一下: 题目: 写一段脚本,实现:当页面上任意一个链接被点击的时候,alert出这个链接在页面上的顺序号,如第一个链接则alert(1), 依次类推. 有一 ...
- img外头包着a时底部出现的一小段高度的解决方法。图片水平垂直居中用css解决的方法。
<a><img/></a> 这种结构有时候在界面预览的时候会出现一段多出来的高度.这个高度,一开始我很奇怪是什么原因产生的.鼠标移动到a标签上会有高度出现,一开始我 ...
- <a>标签里面嵌图片<img>下面出现一小段空白的原因
今天做项目的时候,发现在a标签,里面嵌入<img>会出现空白 css 内容: a{ border:1px solid black; } img{ width:200px; } html内容 ...
- 曹工说JDK源码(4)--抄了一小段ConcurrentHashMap的代码,我解决了部分场景下的Redis缓存雪崩问题
曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位? 曹工说JDK源码(2)--ConcurrentHashMap的多线 ...
随机推荐
- 第九节,MXNet:用im2rec.py将图像打包生成.rec文件
1.生成.lst文件 制作一个文件路径和标签的列表: import os import sys #第一个参数是输入路径 input_path=sys.argv[1].rstrip(os.sep) #第 ...
- [Kubernetes]谈谈Kubernetes的本质
当下k8s算是比较火的一个内容,那么它到底是什么呢,它为什么会这么火呢,它解决的是什么问题呢.这篇文章就尝试着来讲讲,Kubernetes的本质. 当我们谈Kubernetes的时候,总是会想起来Do ...
- torch画散点图
import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...
- selenium——鼠标事件
右键操作: 双击:
- SpringMVC+Spring+Hibernate整合开发
最近突然想认真研究下java web常用框架,虽然现在一直在用,但实现的整体流程不是很了解,就在网上搜索资料,尝试自己搭建,以下是自己的搭建及测试过程. 一.准备工作: 1/安装并配置java运行环境 ...
- 在浏览器中查看.vue文件的源码
- linux 乌班图 nginx php直接下载下来
location ~ \.php(.*)$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets ...
- openwrt MT7628 编译前更改为DHCP,root 密码、ssid、时区、主机名
一.设置为DHCP动态获取ip地址 在:/home/OpenWrt/openwrt_CC_mt76xx_zhuotk_source/ 目录下,新建文件名/files/etc/config. 将配置好的 ...
- iOS开发多线程之NSOperation
NSInvocationOperation The NSInvocationOperationclass is a concrete subclass of NSOperationthat you u ...
- 《学习之道》第八章孤军奋战or组队合作
孤军奋战与组队合作:别再苦思冥想,拖延行为需要差别对待 对拖延我得提一个小建议,你要暂时把自己与那些会干扰你的人和事隔离开.自己到一个房间里去,或者去图书馆,这样就没什么事能让你分心了. 如果一门课让 ...