算法
只要你在
这个作者很懒,什么都没留下…
展开
-
bvTree 碰撞检测
是一棵二叉树,包围层次盒BVH是一种场景管理技术,广泛应用于碰撞检测、射线相交测试之类的应用场合中。bvTree有两种节点(Node)类型:Interior Node 和 Leaf Node。LeafNode 是最终存放tile的地方划分策略可以选择比较高端的表面积启发式算法(SurfaceArea Heuristic)SAH基于的思想:如果某物的表面积越大,那么它被射线击中的...原创 2018-05-15 19:39:47 · 2900 阅读 · 0 评论 -
detour TopologyOptimization
dtCrowd::update在updateMoveRequest后会执行updateTopologyOptimization----------dtCrowd::updateTopologyOptimization(dtCrowdAgent**agents,constintnagents,constfloatdt):强制位移可能导致agent position不在corrido...原创 2019-03-11 14:51:13 · 508 阅读 · 1 评论 -
detour seperation 根据弹力散开
for (intj= 0; j < ag->nneis;++j){ 对于所有的neighbour dtVsub(diff,ag->npos,nei->npos); 算出我到neighbour的向量,是二维平面的 如果其长度小于separationDist 说明进入了Separation的范围 算出weight=...原创 2019-03-11 01:32:19 · 295 阅读 · 0 评论 -
detour getDistanceToGoal(constdtCrowdAgent*ag,constfloatrange)
getDistanceToGoal(constdtCrowdAgent*ag,constfloatrange): 如果ag->cornerFlags[ag->ncorners-1]& DT_STRAIGHTPATH_END 说明这个点是path的终点,是在findStraightPath中设置的 这个时候就是endOfPath,可以计...原创 2019-03-11 01:30:04 · 256 阅读 · 0 评论 -
detour 寻路核心逻辑 CrowdToolState::updateTick dtCrowd::update
CrowdToolState::updateTick(constfloatdt)作为寻路模拟过程的主要函数主要就是干3件事:1 crowd->update(dt, &m_agentDebug);2 Update agent trails表示agent的足迹,不是寻路的必要部分,可以不用3 m_agentDebug.vod->normalizeSamples();...原创 2018-05-20 12:37:56 · 2755 阅读 · 2 评论 -
navmesh 生成网格信息 三角化切分多边形中检测有效分割的算法
Detecting Valid PartitionsTwo algorithms are used to determine whether a group of three vertices can form a valid internal triangle. The first algorithm is fast and can quickly cull partitions that ...原创 2019-02-26 18:05:51 · 959 阅读 · 0 评论 -
detour Filter的设定和判定过程
Filter的设定和判定过程: m_filters[ag->params.queryFilterType]表示一个具体的agent所使用的filter m_navquery->initSlicedFindPath的时候 令m_query.filter= filter; 表示这一次使用m_navquery来查询的时候用到的filter,这个是作为客...原创 2018-05-27 13:30:41 · 322 阅读 · 0 评论 -
TOGGLE_POLYS flags
handleClickTOOLMODE_TOGGLE_POLYS 以点击的点为中心用navquery->findNearestPoly(p, halfExtents,&filter, &ref, tgt); 找到最近的poly和poly上面距离p最近的点tgt 如果找到了 flags ^= SAMPLE_POLYFLAGS_DISA...原创 2018-05-16 12:08:02 · 254 阅读 · 0 评论 -
dtNavMesh::addTile connectIntLinks baseOffMeshLinks connectExtOffMeshLinks connectExtLinks ...
函数:dtNavMesh::addTile connectIntLinks baseOffMeshLinks connectExtOffMeshLinks connectExtLinks connectExtOffMeshLinks=============================首先关于polydtpoly是寻路的基本单元包含信...原创 2018-05-15 18:30:23 · 806 阅读 · 0 评论 -
checkPathValidity 检查所有agent的corridor的m_path是否有效
如果是无效的要进行重新设置并且设置replan 首先获得第一个polygon,m_path[0]这里,因为addagent的时候,ag->corridor.reset(ref, nearest);m_path[0] = ref;所以就算是没有设定目标,const int npath = ag->corridor.getPathCount();也是1 然后根据...原创 2018-05-15 14:19:36 · 202 阅读 · 0 评论 -
四元数(Quaternion)和旋转 & Unity中的旋转
四元数本质上是一种高阶复数,是一个四维空间,相对于复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即x = a + bi,i是虚数单位,如果你还记得的话应该知道i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。 Unity里,tranform组件里...原创 2018-07-22 13:56:01 · 3919 阅读 · 0 评论 -
recast_navigation dtIntersectSegmentPoly2D 2D上的线段与多边形相交计算 产生结果:是否相交,线段跨越的开始和结束百分比,相交的边
dtIntersectSegmentPoly2D(startPos, endPos, verts, nv, tmin, tmax, segMin, segMax): 参看: http://geomalgorithms.com/vector_products.html 首先:2D perp Operator表示一个向量(v1,v2)的逆时针法线 然后,在2D...原创 2018-05-15 14:21:25 · 687 阅读 · 0 评论 -
计算法线
m_normals = new float[m_triCount*3]; for (int i = 0; i < m_triCount*3; i += 3) { const float* v0 = &m_verts[m_tris[i]*3]; const float* v1 = &m_verts[m_tris[i+1]*3]; const float* v2 = &am...原创 2018-07-04 10:23:30 · 944 阅读 · 0 评论 -
寻路 pathfinder 狂乱画
原创 2018-05-23 19:47:52 · 720 阅读 · 0 评论 -
raycast 一小段距离碰撞到的poly recast_navigation
dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, const float* endPos,const dtQueryFilter* filter, const unsigned int options, dtRaycastHi...原创 2018-05-15 14:22:19 · 742 阅读 · 0 评论 -
影子跟随算法
影子跟随算法由普通DR(dead reckoning)算法发展而来:1. 屏幕上现实的实体(entity)只是不停的追逐它的“影子”(shadow)。2. 服务器向各客户端发送各个影子的状态改变(坐标,方向,速度,时间)。3. 各个客户端收到以后按照当前重新插值修正影子状态。4. 影子状态是跳变的,但实体追赶影子是连续的,故整个过程是平滑的。图1 算法演示前面的1...原创 2018-07-24 14:15:22 · 3576 阅读 · 0 评论