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

View File

@@ -357,7 +357,7 @@ bool buildNavMeshData(const int nverts, const float* verts,
//build adjacency info for detailed mesh triangles //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 //create detailed mesh description for each navigation polygon
npolys = dtrisToPolysMap[ndtris-1]; npolys = dtrisToPolysMap[ndtris-1];

View File

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