包围盒

NAV导航网格寻路(4) -- 生成nav网格

妖精的绣舞 提交于 2020-03-01 21:28:57
这篇是转的文章,原文 http://blianchen.blog.163.com/blog/static/131056299201037102315211/ 假设上图是一个游戏地图,红色的区域是不可行走的区域,浅灰色区域是可行走区域,要想在游戏中实现nav寻路,必须将可行走区域转化为nav网格并保存为一种固定形式的数据,如下图浅红色的三角形。 nav网格必须是凸多边形,这里使用三角型,当然也可以使用4边形。下面介绍一种任意多边形的三角化算法。算法来自论文《平面多边形域的快速约束 三角化》 作者:曾薇 孟祥旭 杨承磊 杨义军。详细内容请参考该论文。 先来看几个定义: A. 我们称点 p3 为直线 p1p2 的 可见点 ,其必须满足下面三个条件: (1) p3 在边 p1p2 的右侧 (顶点顺序为顺时针); (2) p3 与 p1 可见,即 p1p3 不与任何一个约束边相交; (3) p3 与 p2 可见 B. DT点 在一个约束Delaunay三角形中,其中与一条边相对的顶点称为该边的DT点。 确定 DT 点的过程如下: Step1. 构造 Δp1p2p3 的外接圆 C(p1,p2,p3)及其网格包围盒 B(C(p1,p2,p3)) Step2. 依次访问网格包围盒内的每个网格单元: 对未作当前趟数标记的网格单元进行搜索,并将其标记为当前趟数 若某个网格单元中存在可见点 p, 并且

DirectX11 With Windows SDK--18 使用DirectXCollision库进行碰撞检测

痞子三分冷 提交于 2020-01-01 22:07:19
前言 在DirectX SDK中,碰撞检测的相关函数位于xnacollision.h中。但是现在,前面所实现的相关函数都已经转移到Windows SDK的DirectXCollision.h中,并且处于名称空间DirectX内。这里面主要包含了四种包围盒(Bounding Volumes),并且是以类的形式实现的: BoundingSphere类--包围球(Bounding Box) BoundingBox类--轴对齐包围盒(Axis-aligned bounding box),又称AABB盒 BoundingOrientedBox类--有向包围盒(Oriented bounding box),又称OBB盒 BoundingFrustum类--包围视锥体(Bounding Frustum) 除此之外里面还包含有三角形(射线)与其余物体的碰撞检测。 后续的项目将会使用该碰撞库。 DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。 常见包围盒 包围球(Bounding Box) 一个球体只需要使用圆心坐标和半径就可以表示。结构体的一部分如下: struct BoundingSphere { XMFLOAT3 Center; // 球体中心坐标 float

【物理】AABB物理碰撞检测

独自空忆成欢 提交于 2019-12-06 06:01:47
什么是AABB? AABB,指 轴对齐包围盒 (Axis-aligned bounding boxes)。在3D空间中,AABB是一个长方体,在2D空间中是一个长方形。特征是面法线皆平行于坐标轴,即当物体旋转时,AABB不会随物体旋转,也因此特性,AABB可以最快判断两物体是否重叠。 AABB表达 《实时碰撞检测算法技术》一书中提到3种AABB的表达方式,这里仅举其中最高效,要求存储空间最少的一种——即存储包围盒的中心位置和包围盒的半径: struct AABB { Vector3 boxPos; Vector3 boxSize; } 来源: https://www.cnblogs.com/liez/p/11965027.html

three.js 检测两个物体是否相交(触发检测)

独自空忆成欢 提交于 2019-12-02 08:42:43
由于使用unity和UE4比较多,很多时候会用到触发检测这个功能,意思就是两个物体穿透的时候可以检测到,并做相应的操作,于是在three.js找了一大圈,最后在官方文档看到了相应的API,下面来讲述一下: 思路其实就是如果两个物体互相穿透,我们就给每个物体建一个包围盒,并把包围盒绑定物体,然后使用包围盒判断相交的api来实现,下面看看代码吧: var scene, renderer, camera; var redBox, blueBox, redBbox, blueBbox; var controls; init(); animate(); function init() { renderer = new THREE.WebGLRenderer( {antialias:true} ); var width = window.innerWidth; var height = window.innerHeight; renderer.setSize (width, height); document.body.appendChild (renderer.domElement); scene = new THREE.Scene(); camera = new THREE.PerspectiveCamera (45, width/height, 1, 10000); camera

《PCL》点云的最小外包围盒实现

和自甴很熟 提交于 2019-11-27 07:40:47
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> int main(int argc, char** argv) { //定义一个点云cloud //pcl::PointCloud<pcl::PointXYZ> cloud; pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ>("E:\\abx.pcd", *cloud) == -1) { std::cout << "读取失败"; } //定义储存极值的两个点 pcl::PointXYZ minPoint, maxPoint; pcl::getMinMax3D(*cloud,minPoint, maxPoint); //输出结果 std::cout << "max:x" << maxPoint.x << std::endl; std::cout << "max:y" << maxPoint.y << std::endl; std::cout << "max:z" << maxPoint.z

Realtime Ray Tracing RenderMan Point Cloud

瘦欲@ 提交于 2019-11-27 06:29:54
这里演示的是演示的是光线与包围盒测试。在装备Winfast 8800GT 512M的台式机上可以进行每秒4.6亿次点到射线的距离计算计算,用于判断点是否真正的与射线相交。外部数据的填充与准备延迟依旧是GPGPU应用的一个巨大门槛。白色是命中的包围盒,绿色的就是射线了,在用于录制动画的7300go T2250上为大约15fps。下面是用于测试的点云Cornell Box模型。 这个是使用RT出的阴影PASS,即将用于Relighting工具的阴影PASS结果计算。 转载于:https://www.cnblogs.com/Jedimaster/archive/2008/09/20/1294821.html 来源: https://blog.csdn.net/weixin_30896511/article/details/99510302