本文整理汇总了C++中CAABBox::intersect方法的典型用法代码示例。如果您正苦于以下问题:C++ CAABBox::intersect方法的具体用法?C++ CAABBox::intersect怎么用?C++ CAABBox::intersect使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAABBox
的用法示例。
在下文中一共展示了CAABBox::intersect方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getZoneNameById
//.........这里部分代码省略.........
if (_ZoneIds[i] == CentralZoneId)
{
if(_ZonePtrs[i]->getNumPatchs()>0)
{
BestFittingBBox = _ZonePtrs[i]->getZoneBB().getAABBox();
BestFittingBBoxSetuped= true;
}
}
}
CAABBox enlBBox = BestFittingBBox;
enlBBox.setHalfSize(enlBBox.getHalfSize()+CVector(8.0f, 8.0f, 1000.0f));
// Add neighbor patch
for (i=0; i<_ZoneIds.size(); ++i)
{
if (_ZoneIds[i] == CentralZoneId)
{
for (j=0; (sint)j<_ZonePtrs[i]->getNumPatchs(); ++j)
{
landscape.excludePatchFromRefineAll(_ZoneIds[i], j, false);
if (useNoHmZones)
landscapeNoHm.excludePatchFromRefineAll(_ZoneIds[i], j, false);
}
if (Verbose)
nlinfo(" - selected %d/%d patches for zone %d", _ZonePtrs[i]->getNumPatchs(), _ZonePtrs[i]->getNumPatchs(), _ZoneIds[i]);
}
else
{
uint nump = 0;
for (j=0; (sint)j<_ZonePtrs[i]->getNumPatchs(); ++j)
{
CAABBox pbox = _ZonePtrs[i]->getPatch(j)->buildBBox();
bool inters = enlBBox.intersect(pbox);
if (inters)
{
landscape.excludePatchFromRefineAll(_ZoneIds[i], j, false);
if (useNoHmZones)
landscapeNoHm.excludePatchFromRefineAll(_ZoneIds[i], j, false);
++nump;
}
else
{
landscape.excludePatchFromRefineAll(_ZoneIds[i], j, true);
if (useNoHmZones)
landscapeNoHm.excludePatchFromRefineAll(_ZoneIds[i], j, true);
}
}
if (Verbose)
nlinfo(" - selected %d/%d patches for zone %d", nump, _ZonePtrs[i]->getNumPatchs(), _ZoneIds[i]);
}
}
// tessellate the landscape, get the leaves (the tessellation faces), and convert them
// into surf elements
if (Verbose)
nlinfo("Compute landscape tessellation");
if (Verbose)
nlinfo(" - tessellate landscape");
if (useNoHmZones)
{
// Before tesselate, verify that the 2 landscape zones have at least the same binds!
// Else there will be errors because of not the same tesselation
示例2: CheckZone
/** Check a zone and report the total number of errors
*/
static uint CheckZone(std::string middleZoneFile, float weldThreshold, float middleEdgeWeldThreshold)
{
uint numErrors = 0;
uint k, l, m, n, p, q; // some loop counters
// This avoid reporting errors twice (for readability)
std::set<CPatchIdentPair> errorPairs;
////////////////////////////
// Load the zones around //
////////////////////////////
std::auto_ptr<CZone> zones[9];
std::string zoneNames[9];
CZoneInfo zoneInfos[9];
uint16 xPos, yPos;
const sint16 posOffs[][2] = { {0, 0}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1} };
std::string middleZoneName = CFile::getFilenameWithoutExtension(middleZoneFile);
::getZoneCoordByName(middleZoneName.c_str(), xPos, yPos);
try
{
std::string ext = CFile::getExtension(middleZoneFile);
zones[0].reset(::LoadZone(xPos, yPos, ext.empty() ? "" : "." + ext));
if (zones[0].get() == NULL)
{
nlwarning("Can't load zone %s", middleZoneName.c_str());
return 0;
}
for (uint k = 1; k < 9; ++k)
{
zones[k].reset(::LoadZone(xPos + posOffs[k][0], yPos + posOffs[k][1], ext.empty() ? "" : "." + ext));
}
}
catch (NLMISC::Exception &e)
{
nlinfo("Zones loading failed : %d", e.what());
return 0;
}
///////////////////////////////
// retrieve datas from zones //
///////////////////////////////
for (k = 0; k < 9; ++k)
{
::getZoneNameByCoord(xPos + posOffs[k][0], yPos + posOffs[k][1], zoneNames[k]);
if (zones[k].get() != NULL) zones[k]->retrieve(zoneInfos[k]);
}
// fill the quad grid
CAABBox zoneBBox = zones[0]->getZoneBB().getAABBox();
float zoneSize = 2.f * weldThreshold + std::max(zoneBBox.getMax().x - zoneBBox.getMin().x,
zoneBBox.getMax().y - zoneBBox.getMin().y);
TPVQuadGrid qg;
const uint numQGElt = 128;
qg.create(numQGElt, zoneSize / numQGElt);
// insert vertices in quadgrid
for (k = 0; k < 9; ++k)
{
for (l = 0; l < zoneInfos[k].Patchs.size(); ++l)
{
CPatchInfo &patch = zoneInfos[k].Patchs[l];
// for each base vertex of the patch
for (m = 0; m < 4; ++m)
{
CVector &pos = patch.Patch.Vertices[m];
CBSphere s(pos, weldThreshold);
if (zoneBBox.intersect(s)) // does this vertex and its zone of influence intersect the bbox ?
{
CVector half(weldThreshold, weldThreshold, weldThreshold);
// yes, insert it in the tree
qg.insert(pos - half, pos + half, CPatchVertexInfo(k, l, m, pos));
}
}
}
}
////////////////////////////////////////////////
// check wether each patch is correctly bound //
////////////////////////////////////////////////
for (l = 0; l < zoneInfos[0].Patchs.size(); ++l)
{
CPatchInfo &patch = zoneInfos[0].Patchs[l];
// deals with each border
for (m = 0; m < 4; ++m)
{
// if this border is said to be bound, no need to test..
if (patch.BindEdges[m].NPatchs == 0)
{
// maps from an index to a (s, t) couple
static const float indexToST[][2] = {{0, 0}, {0, 1}, {1, 1}, {1, 0}};
// index of this border vertices
const uint vIndex[] = { m, (m + 1) & 0x03 };
bool errorFound = false;
//.........这里部分代码省略.........