[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29695] branches/soc-2010-nicks: added actual creation of navigation mesh for navmesh modifier

Nick Samarin nicks1987 at bigmir.net
Fri Jun 25 23:08:23 CEST 2010


Revision: 29695
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29695
Author:   nicks
Date:     2010-06-25 23:08:23 +0200 (Fri, 25 Jun 2010)

Log Message:
-----------
added actual creation of  navigation mesh for navmesh modifier

Modified Paths:
--------------
    branches/soc-2010-nicks/projectfiles_vc9/blender/modifiers/modifiers.vcproj
    branches/soc-2010-nicks/source/gameengine/Ketsji/KX_NavMeshObject.cpp

Added Paths:
-----------
    branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.cpp

Removed Paths:
-------------
    branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.c

Modified: branches/soc-2010-nicks/projectfiles_vc9/blender/modifiers/modifiers.vcproj
===================================================================
--- branches/soc-2010-nicks/projectfiles_vc9/blender/modifiers/modifiers.vcproj	2010-06-25 20:50:03 UTC (rev 29694)
+++ branches/soc-2010-nicks/projectfiles_vc9/blender/modifiers/modifiers.vcproj	2010-06-25 21:08:23 UTC (rev 29695)
@@ -182,7 +182,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenkernel\intern;..\..\..\source\blender\makesdna;..\..\..\source\blender\modifiers;..\..\..\source\blender\render\extern\include"
+				AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenkernel\intern;..\..\..\source\blender\makesdna;..\..\..\source\blender\modifiers;..\..\..\source\blender\render\extern\include;..\..\..\..\build\msvc_9\extern\recastnavigation\Recast\Include"
 				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_LZO;WITH_LZMA"
 				MinimalRebuild="false"
 				BasicRuntimeChecks="3"
@@ -395,7 +395,7 @@
 				>
 			</File>
 			<File
-				RelativePath="..\..\..\source\blender\modifiers\intern\MOD_navmesh.c"
+				RelativePath="..\..\..\source\blender\modifiers\intern\MOD_navmesh.cpp"
 				>
 			</File>
 			<File

Deleted: branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.c
===================================================================
--- branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.c	2010-06-25 20:50:03 UTC (rev 29694)
+++ branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.c	2010-06-25 21:08:23 UTC (rev 29695)
@@ -1,198 +0,0 @@
-/*
-* $Id$
-*
-* ***** BEGIN GPL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software  Foundation,
-* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*
-* The Original Code is Copyright (C) 2005 by the Blender Foundation.
-* All rights reserved.
-*
-* Contributor(s): 
-*
-* ***** END GPL LICENSE BLOCK *****
-*
-*/
-
-#include "DNA_meshdata_types.h"
-#include "BLI_math.h"
-#include "BKE_cdderivedmesh.h"
-#include "BKE_mesh.h"
-#include "BKE_modifier.h"
-#include "BKE_particle.h"
-
-
-static void initData(ModifierData *md)
-{
-	NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
-
-	nmmd->cellsize = 0.3f;
-	nmmd->cellheight = 0.2f;
-	nmmd->agentmaxslope = 45.0f;
-	nmmd->agentmaxclimb = 0.9f;
-	nmmd->agentheight = 2.0f;
-	nmmd->agentradius = 0.6f;
-	nmmd->edgemaxlen = 12.0f;
-	nmmd->edgemaxerror = 1.3f;
-	nmmd->regionminsize = 50.f;
-	nmmd->regionmergesize = 20.f;
-	nmmd->vertsperpoly = 6;
-	nmmd->detailsampledist = 6.0f;
-	nmmd->detailsamplemaxerror = 1.0f;
-}
-
-static void copyData(ModifierData *md, ModifierData *target)
-{
-	NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
-	NavMeshModifierData *tnmmd = (NavMeshModifierData*) target;
-
-}
-
-static DerivedMesh *createNavMesh(NavMeshModifierData *mmd,DerivedMesh *dm)
-{
-	int i;
-	DerivedMesh *result;
-	int numVerts, numEdges, numFaces;
-	int maxVerts = dm->getNumVerts(dm);
-	int maxEdges = dm->getNumEdges(dm);
-	int maxFaces = dm->getNumFaces(dm);
-
-	numVerts = numEdges = numFaces = 0;
-
-	result = CDDM_from_template(dm, maxVerts * 2, maxEdges * 2, maxFaces * 2);
-
-	for(i = 0; i < maxVerts; i++) {
-		MVert inMV;
-		MVert *mv = CDDM_get_vert(result, numVerts);
-		float co[3];
-
-		dm->getVert(dm, i, &inMV);
-
-		copy_v3_v3(co, inMV.co);
-		DM_copy_vert_data(dm, result, i, numVerts, 1);
-		*mv = inMV;
-		numVerts++;
-
-
-		{
-			MVert *mv2 = CDDM_get_vert(result, numVerts);
-			DM_copy_vert_data(dm, result, i, numVerts, 1);
-			*mv2 = *mv;
-			co[2] +=.5f;
-			copy_v3_v3(mv2->co, co);
-			numVerts++;
-		}
-
-	}
-
-	for(i = 0; i < maxEdges; i++) {
-		MEdge inMED;
-		MEdge *med = CDDM_get_edge(result, numEdges);
-
-		dm->getEdge(dm, i, &inMED);
-
-		DM_copy_edge_data(dm, result, i, numEdges, 1);
-		*med = inMED;
-		numEdges++;
-
-		med->v1 = inMED.v1*2;
-		med->v2 = inMED.v2*2;
-		//med->flag |= ME_EDGEDRAW | ME_EDGERENDER;
-
-		{
-			MEdge *med2 = CDDM_get_edge(result, numEdges);
-
-			DM_copy_edge_data(dm, result, i, numEdges, 1);
-			*med2 = *med;
-			numEdges++;
-
-			med2->v1 += 1;
-			med2->v2 += 1;
-		}		
-	}
-
-	for(i = 0; i < maxFaces; i++) {
-		MFace inMF;
-		MFace *mf = CDDM_get_face(result, numFaces);
-
-		dm->getFace(dm, i, &inMF);
-
-		DM_copy_face_data(dm, result, i, numFaces, 1);
-		*mf = inMF;
-		numFaces++;
-
-		mf->v1 = inMF.v1*2;
-		mf->v2 = inMF.v2*2;
-		mf->v3 = inMF.v3*2;
-		mf->v4 = inMF.v4*2;
-
-		{
-			MFace *mf2 = CDDM_get_face(result, numFaces);
-			DM_copy_face_data(dm, result, i, numFaces, 1);
-			*mf2 = *mf;
-
-			mf2->v1 += 1;
-			mf2->v2 += 1;
-			mf2->v3 += 1;
-			if(inMF.v4) mf2->v4 += 1;
-
-			//test_index_face(mf2, &result->faceData, numFaces, inMF.v4?4:3);
-			numFaces++;
-		}
-	}
-
-/*
-	CDDM_lower_num_verts(result, numVerts);
-	CDDM_lower_num_edges(result, numEdges);
-	CDDM_lower_num_faces(result, numFaces);*/	
-
-	return result;
-}
-
-
-static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
-								  int useRenderParams, int isFinalCalc)
-{
-	DerivedMesh *result;
-
-	NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
-
-	result = createNavMesh(nmmd, derivedData);
-
-	return result;
-}
-
-
-ModifierTypeInfo modifierType_NavMesh = {
-	/* name */              "NavMesh",
-	/* structName */        "NavMeshModifierData",
-	/* structSize */        sizeof(NavMeshModifierData),
-	/* type */              eModifierTypeType_Constructive,
-	/* flags */             eModifierTypeFlag_AcceptsMesh,
-	/* copyData */          copyData,
-	/* deformVerts */       0,
-	/* deformVertsEM */     0,
-	/* deformMatricesEM */  0,
-	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   0,
-	/* initData */          initData,
-	/* requiredDataMask */  0,
-	/* freeData */          0,
-	/* isDisabled */        0,
-	/* updateDepgraph */    0,
-	/* dependsOnTime */     0,
-	/* foreachObjectLink */ 0,
-	/* foreachIDLink */     0,
-};

Added: branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.cpp
===================================================================
--- branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.cpp	                        (rev 0)
+++ branches/soc-2010-nicks/source/blender/modifiers/intern/MOD_navmesh.cpp	2010-06-25 21:08:23 UTC (rev 29695)
@@ -0,0 +1,392 @@
+/*
+* $Id$
+*
+* ***** BEGIN GPL LICENSE BLOCK *****
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software  Foundation,
+* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+* The Original Code is Copyright (C) 2005 by the Blender Foundation.
+* All rights reserved.
+*
+* Contributor(s): 
+*
+* ***** END GPL LICENSE BLOCK *****
+*
+*/
+#include <math.h>
+#include "Recast.h"
+
+extern "C"{
+
+#include "DNA_meshdata_types.h"
+#include "BLI_math.h"
+#include "BKE_cdderivedmesh.h"
+#include "BKE_mesh.h"
+#include "BKE_modifier.h"
+#include "BKE_particle.h"
+#include "MEM_guardedalloc.h"
+
+
+
+static void initData(ModifierData *md)
+{
+	NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
+
+	nmmd->cellsize = 0.3f;
+	nmmd->cellheight = 0.2f;
+	nmmd->agentmaxslope = 45.0f;
+	nmmd->agentmaxclimb = 0.9f;
+	nmmd->agentheight = 2.0f;
+	nmmd->agentradius = 0.6f;
+	nmmd->edgemaxlen = 12.0f;
+	nmmd->edgemaxerror = 1.3f;
+	nmmd->regionminsize = 50.f;
+	nmmd->regionmergesize = 20.f;
+	nmmd->vertsperpoly = 6;
+	nmmd->detailsampledist = 6.0f;
+	nmmd->detailsamplemaxerror = 1.0f;
+}
+
+static void copyData(ModifierData *md, ModifierData *target)
+{
+	NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
+	NavMeshModifierData *tnmmd = (NavMeshModifierData*) target;
+
+	//.todo - deep copy
+}
+
+static DerivedMesh *buildNavMesh(NavMeshModifierData *mmd,DerivedMesh *dm)
+{
+	const int nverts = dm->getNumVerts(dm);
+	MVert *mvert = dm->getVertArray(dm);
+	const int nfaces = dm->getNumFaces(dm);
+	MFace *mface = dm->getFaceArray(dm);
+	float* verts;
+	int *tris, *tri;
+	float bmin[3], bmax[3];
+	int i,j;
+	DerivedMesh* result = NULL;
+	rcHeightfield* solid;
+	unsigned char *triflags;
+	rcCompactHeightfield* chf;
+	rcContourSet *cset;
+	rcPolyMesh* pmesh;
+	rcPolyMeshDetail* dmesh;
+	int numVerts, numEdges, numFaces;
+
+	//calculate count of tris
+	int ntris = nfaces;
+	for (i=0; i<nfaces; i++)
+	{
+		MFace* mf = &mface[i];
+		if (mf->v4)
+			ntris+=1;
+	}
+
+	//create verts
+	verts = (float*) MEM_mallocN(sizeof(float)*3*nverts, "verts");
+	for (i=0; i<nverts; i++)
+	{
+		MVert *v = &mvert[i];
+		verts[3*i+0] = v->co[0];
+		verts[3*i+1] = v->co[2];
+		verts[3*i+2] = v->co[1];
+	}
+	//create tris
+	tris = (int*) MEM_mallocN(sizeof(int)*3*ntris, "faces");

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list