Added PLC_Navigation hint for gathering navmesh polygon data.

This commit is contained in:
Daniel Buckmaster 2013-07-04 17:23:23 +10:00
parent 95ef5ec226
commit d9c731b73f
4 changed files with 77 additions and 2 deletions

View file

@ -653,6 +653,29 @@ bool ConvexShape::buildPolyList( PolyListContext context, AbstractPolyList *plis
const Vector< ConvexShape::Face > faceList = mGeometry.faces;
if(context == PLC_Navigation)
{
for(S32 i = 0; i < faceList.size(); i++)
{
const ConvexShape::Face &face = faceList[i];
S32 s = face.triangles.size();
for(S32 j = 0; j < s; j++)
{
plist->begin(0, s*i + j);
plist->plane(PlaneF(face.centroid, face.normal));
plist->vertex(base + face.points[face.triangles[j].p0]);
plist->vertex(base + face.points[face.triangles[j].p1]);
plist->vertex(base + face.points[face.triangles[j].p2]);
plist->end();
}
}
return true;
}
for ( S32 i = 0; i < faceList.size(); i++ )
{
const ConvexShape::Face &face = faceList[i];

View file

@ -288,11 +288,45 @@ void GroundPlane::buildConvex( const Box3F& box, Convex* convex )
}
}
bool GroundPlane::buildPolyList( PolyListContext context, AbstractPolyList* polyList, const Box3F&, const SphereF& )
bool GroundPlane::buildPolyList( PolyListContext context, AbstractPolyList* polyList, const Box3F& box, const SphereF& )
{
polyList->setObject( this );
polyList->setTransform( &MatrixF::Identity, Point3F( 1.0f, 1.0f, 1.0f ) );
if(context == PLC_Navigation)
{
F32 z = getPosition().z;
Point3F
p0(box.minExtents.x, box.maxExtents.y, z),
p1(box.maxExtents.x, box.maxExtents.y, z),
p2(box.maxExtents.x, box.minExtents.y, z),
p3(box.minExtents.x, box.minExtents.y, z);
// Add vertices to poly list.
U32 v0 = polyList->addPoint(p0);
polyList->addPoint(p1);
polyList->addPoint(p2);
polyList->addPoint(p3);
// Add plane between first three vertices.
polyList->begin(0, 0);
polyList->vertex(v0);
polyList->vertex(v0+1);
polyList->vertex(v0+2);
polyList->plane(v0, v0+1, v0+2);
polyList->end();
// Add plane between last three vertices.
polyList->begin(0, 1);
polyList->vertex(v0+2);
polyList->vertex(v0+3);
polyList->vertex(v0);
polyList->plane(v0+2, v0+3, v0);
polyList->end();
return true;
}
Box3F planeBox = getPlaneBox();
polyList->addBox( planeBox, mMaterial );