fixed bugs (wrong number of triangle in buildMeshAdjacence, wrong face indexes in applyModifier)

This commit is contained in:
Nick Samarin 2010-08-09 10:20:53 +00:00
parent e42f487aed
commit 7ec16a7c6e
2 changed files with 12 additions and 15 deletions

@ -357,7 +357,7 @@ bool buildNavMeshData(const int nverts, const float* verts,
//build adjacency info for detailed mesh triangles
buildMeshAdjacency(dtris, ntris, nverts, 3);
buildMeshAdjacency(dtris, ndtris, nverts, 3);
//create detailed mesh description for each navigation polygon
npolys = dtrisToPolysMap[ndtris-1];

@ -129,10 +129,13 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
int maxFaces = dm->getNumFaces(dm);
result = CDDM_copy(dm);
int *recastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
CustomData_add_layer_named(&result->faceData, CD_RECAST, CD_DUPLICATE,
recastData, maxFaces, "recastData");
recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST);
if (!CustomData_has_layer(&result->faceData, CD_RECAST))
{
int *sourceRecastData = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
CustomData_add_layer_named(&result->faceData, CD_RECAST, CD_DUPLICATE,
sourceRecastData, maxFaces, "recastData");
}
int *recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST);
result->drawFacesTex = navDM_drawFacesTex;
result->drawFacesSolid = navDM_drawFacesSolid;
@ -162,8 +165,8 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
{
unsigned short triidx = dtrisToTrisMap[tbase+ti];
unsigned short faceidx = trisToFacesMap[triidx];
if (recastData[triidx]>0)
recastData[triidx] = -recastData[triidx];
if (recastData[faceidx]>0)
recastData[faceidx] = -recastData[faceidx];
}
}
}
@ -218,23 +221,17 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
//2)add and init recast data layer
if (!hasRecastData)
{
int numFaces = derivedData->getNumFaces(derivedData);
CustomData_add_layer_named(&derivedData->faceData, CD_RECAST, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&derivedData->faceData, CD_RECAST);
for (int i=0; i<numFaces; i++)
{
recastData[i] = i+1;
}
Mesh* obmesh = (Mesh *)ob->data;
if (obmesh)
{
int numFaces = obmesh->totface;
CustomData_add_layer_named(&obmesh->fdata, CD_RECAST, CD_CALLOC, NULL, numFaces, "recastData");
int* recastData = (int*)CustomData_get_layer(&obmesh->fdata, CD_RECAST);
for (int i=0; i<numFaces; i++)
{
recastData[i] = i+1;
}
CustomData_add_layer_named(&derivedData->faceData, CD_RECAST, CD_REFERENCE, recastData, numFaces, "recastData");
}
}
}