diff --git a/source/blender/editors/util/navmesh_conversion.cpp b/source/blender/editors/util/navmesh_conversion.cpp index 6a8ee709c99..62e26e2cd55 100644 --- a/source/blender/editors/util/navmesh_conversion.cpp +++ b/source/blender/editors/util/navmesh_conversion.cpp @@ -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]; diff --git a/source/blender/modifiers/intern/MOD_navmesh.cpp b/source/blender/modifiers/intern/MOD_navmesh.cpp index fb322086bbc..e02ad8896a9 100644 --- a/source/blender/modifiers/intern/MOD_navmesh.cpp +++ b/source/blender/modifiers/intern/MOD_navmesh.cpp @@ -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; idata; 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; ifaceData, CD_RECAST, CD_REFERENCE, recastData, numFaces, "recastData"); } } }