예제 #1
0
void NavmeshPruneTool::handleClick(const float* /*s*/, const float* p, bool shift)
{
	if (!m_sample) return;
	InputGeom* geom = m_sample->getInputGeom();
	if (!geom) return;
	dtNavMesh* nav = m_sample->getNavMesh();
	if (!nav) return;
	dtNavMeshQuery* query = m_sample->getNavMeshQuery();
	if (!query) return;
	
	dtVcopy(m_hitPos, p);
	m_hitPosSet = true;
	
	if (!m_flags)
	{
		m_flags = new NavmeshFlags;
		m_flags->init(nav);
	}
	
	const float ext[3] = {2,4,2};
	dtQueryFilter filter;
	dtPolyRef ref = 0;
	query->findNearestPoly(p, ext, &filter, &ref, 0);

	floodNavmesh(nav, m_flags, ref, 1);
}
예제 #2
0
bool OgreRecastNavmeshPruner::floodNavmesh(Ogre::Vector3 startPoint)
{
    unsigned char flag = 1; // Flag to assign to all marked polys (must not be already assigned)

    // First find nearest navmesh poly to startPoint
    dtPolyRef startPoly;
    Ogre::Vector3 foundPt;
    if (!mRecast->findNearestPolyOnNavmesh(startPoint, foundPt, startPoly))
        return false;

    floodNavmesh(startPoly, flag);
    return true;
}