[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40596] trunk/blender/source/blender/ editors/mesh/mesh_navmesh.c: navmesh: code clean-up, should be no functional changes.
Sergey Sharybin
g.ulairi at gmail.com
Tue Sep 27 11:09:55 CEST 2011
Revision: 40596
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40596
Author: nazgul
Date: 2011-09-27 09:09:55 +0000 (Tue, 27 Sep 2011)
Log Message:
-----------
navmesh: code clean-up, should be no functional changes.
Modified Paths:
--------------
trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
Modified: trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_navmesh.c 2011-09-27 09:09:52 UTC (rev 40595)
+++ trunk/blender/source/blender/editors/mesh/mesh_navmesh.c 2011-09-27 09:09:55 UTC (rev 40596)
@@ -17,12 +17,13 @@
* 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) 2004 by Blender Foundation
+* The Original Code is Copyright (C) 2011 by Blender Foundation
* All rights reserved.
*
* The Original Code is: all of this file.
*
-* Contributor(s): none yet.
+* Contributor(s): Benoit Bolsee,
+* Nick Samarin
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -67,89 +68,95 @@
static void createVertsTrisData(bContext *C, LinkNode* obs, int *nverts_r, float **verts_r, int *ntris_r, int **tris_r)
{
MVert *mvert;
- int nfaces = 0, *tri, i, curnverts, basenverts, curnfaces;
+ int nfaces= 0, *tri, i, curnverts, basenverts, curnfaces;
MFace *mface;
float co[3], wco[3];
Object *ob;
LinkNode *oblink, *dmlink;
DerivedMesh *dm;
- Scene* scene = CTX_data_scene(C);
- LinkNode* dms = NULL;
+ Scene* scene= CTX_data_scene(C);
+ LinkNode* dms= NULL;
int nverts, ntris, *tris;
float *verts;
- nverts = 0;
- ntris = 0;
- //calculate number of verts and tris
- for (oblink = obs; oblink; oblink = oblink->next)
- {
- ob = (Object*) oblink->link;
- dm = mesh_create_derived_no_virtual(scene, ob, NULL, CD_MASK_MESH);
+ nverts= 0;
+ ntris= 0;
+
+ /* calculate number of verts and tris */
+ for(oblink= obs; oblink; oblink= oblink->next) {
+ ob= (Object*) oblink->link;
+ dm= mesh_create_derived_no_virtual(scene, ob, NULL, CD_MASK_MESH);
BLI_linklist_append(&dms, (void*)dm);
- nverts += dm->getNumVerts(dm);
- nfaces = dm->getNumFaces(dm);
- ntris += nfaces;
+ nverts+= dm->getNumVerts(dm);
+ nfaces= dm->getNumFaces(dm);
+ ntris+= nfaces;
- //resolve quad faces
- mface = dm->getFaceArray(dm);
- for (i=0; i<nfaces; i++)
- {
- MFace* mf = &mface[i];
- if (mf->v4)
+ /* resolve quad faces */
+ mface= dm->getFaceArray(dm);
+ for(i= 0; i<nfaces; i++) {
+ MFace* mf= &mface[i];
+ if(mf->v4)
ntris+=1;
}
}
- //create data
- verts = MEM_mallocN(sizeof(float)*3*nverts, "createVertsTrisData verts");
- tris = MEM_mallocN(sizeof(int)*3*ntris, "createVertsTrisData faces");
+ /* create data */
+ verts= MEM_mallocN(sizeof(float)*3*nverts, "createVertsTrisData verts");
+ tris= MEM_mallocN(sizeof(int)*3*ntris, "createVertsTrisData faces");
- basenverts = 0;
- tri = tris;
- for (oblink = obs, dmlink = dms; oblink && dmlink;
- oblink = oblink->next, dmlink = dmlink->next)
- {
- ob = (Object*) oblink->link;
- dm = (DerivedMesh*) dmlink->link;
+ basenverts= 0;
+ tri= tris;
+ for(oblink= obs, dmlink= dms; oblink && dmlink;
+ oblink= oblink->next, dmlink= dmlink->next) {
+ ob= (Object*) oblink->link;
+ dm= (DerivedMesh*) dmlink->link;
- curnverts = dm->getNumVerts(dm);
- mvert = dm->getVertArray(dm);
- //copy verts
- for (i=0; i<curnverts; i++)
- {
- MVert *v = &mvert[i];
+ curnverts= dm->getNumVerts(dm);
+ mvert= dm->getVertArray(dm);
+
+ /* copy verts */
+ for(i= 0; i<curnverts; i++) {
+ MVert *v= &mvert[i];
+
copy_v3_v3(co, v->co);
mul_v3_m4v3(wco, ob->obmat, co);
- verts[3*(basenverts+i)+0] = wco[0];
- verts[3*(basenverts+i)+1] = wco[2];
- verts[3*(basenverts+i)+2] = wco[1];
+
+ verts[3*(basenverts+i)+0]= wco[0];
+ verts[3*(basenverts+i)+1]= wco[2];
+ verts[3*(basenverts+i)+2]= wco[1];
}
- //create tris
- curnfaces = dm->getNumFaces(dm);
- mface = dm->getFaceArray(dm);
- for (i=0; i<curnfaces; i++)
- {
- MFace* mf = &mface[i];
- tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v3; tri[2]= basenverts + mf->v2;
+ /* create tris */
+ curnfaces= dm->getNumFaces(dm);
+ mface= dm->getFaceArray(dm);
+
+ for(i= 0; i<curnfaces; i++) {
+ MFace* mf= &mface[i];
+
+ tri[0]= basenverts + mf->v1;
+ tri[1]= basenverts + mf->v3;
+ tri[2]= basenverts + mf->v2;
tri += 3;
- if (mf->v4)
- {
- tri[0]= basenverts + mf->v1; tri[1]= basenverts + mf->v4; tri[2]= basenverts + mf->v3;
+
+ if(mf->v4) {
+ tri[0]= basenverts + mf->v1;
+ tri[1]= basenverts + mf->v4;
+ tri[2]= basenverts + mf->v3;
tri += 3;
}
}
- basenverts += curnverts;
+
+ basenverts+= curnverts;
}
- //release derived mesh
- for (dmlink = dms; dmlink; dmlink = dmlink->next)
- {
- dm = (DerivedMesh*) dmlink->link;
+ /* release derived mesh */
+ for(dmlink= dms; dmlink; dmlink= dmlink->next) {
+ dm= (DerivedMesh*) dmlink->link;
dm->release(dm);
}
+
BLI_linklist_free(dms, NULL);
*nverts_r= nverts;
@@ -172,101 +179,46 @@
recast_calcBounds(verts, nverts, bmin, bmax);
- //
- // Step 1. Initialize build config.
- //
- {
-/*
- float cellsize = 0.3f;
- float cellheight = 0.2f;
- float agentmaxslope = M_PI/4;
- float agentmaxclimb = 0.9f;
- float agentheight = 2.0f;
- float agentradius = 0.6f;
- float edgemaxlen = 12.0f;
- float edgemaxerror = 1.3f;
- float regionminsize = 50.f;
- float regionmergesize = 20.f;
- int vertsperpoly = 6;
- float detailsampledist = 6.0f;
- float detailsamplemaxerror = 1.0f;
- cfg.cs = cellsize;
- cfg.ch = cellheight;
- cfg.walkableSlopeAngle = agentmaxslope/M_PI*180.f;
- cfg.walkableHeight = (int)ceilf(agentheight/ cfg.ch);
- cfg.walkableClimb = (int)floorf(agentmaxclimb / cfg.ch);
- cfg.walkableRadius = (int)ceilf(agentradius / cfg.cs);
- cfg.maxEdgeLen = (int)(edgemaxlen/cellsize);
- cfg.maxSimplificationError = edgemaxerror;
- cfg.minRegionSize = (int)rcSqr(regionminsize);
- cfg.mergeRegionSize = (int)rcSqr(regionmergesize);
- cfg.maxVertsPerPoly = vertsperpoly;
- cfg.detailSampleDist = detailsampledist< 0.9f ? 0 : cellsize * detailsampledist;
- cfg.detailSampleMaxError = cellheight * detailsamplemaxerror;
-*/
-#if 0
- cfg.cs = recastParams.cellsize;
- cfg.ch = recastParams.cellheight;
- cfg.walkableSlopeAngle = recastParams.agentmaxslope/((float)M_PI)*180.f;
- cfg.walkableHeight = (int)ceilf(recastParams.agentheight/ cfg.ch);
- cfg.walkableClimb = (int)floorf(recastParams.agentmaxclimb / cfg.ch);
- cfg.walkableRadius = (int)ceilf(recastParams.agentradius / cfg.cs);
- cfg.maxEdgeLen = (int)(recastParams.edgemaxlen/recastParams.cellsize);
- cfg.maxSimplificationError = recastParams.edgemaxerror;
- cfg.minRegionSize = (int)rcSqr(recastParams.regionminsize);
- cfg.mergeRegionSize = (int)rcSqr(recastParams.regionmergesize);
- cfg.maxVertsPerPoly = recastParams.vertsperpoly;
- cfg.detailSampleDist = recastParams.detailsampledist< 0.9f ? 0 :
- recastParams.cellsize * recastParams.detailsampledist;
- cfg.detailSampleMaxError = recastParams.cellheight * recastParams.detailsamplemaxerror;
-#endif
- }
-
- walkableHeight = (int)ceilf(recastParams->agentheight/ recastParams->cellheight);
- walkableClimb = (int)floorf(recastParams->agentmaxclimb / recastParams->cellheight);
- walkableRadius = (int)ceilf(recastParams->agentradius / recastParams->cellsize);
- minRegionSize = (int)(recastParams->regionminsize * recastParams->regionminsize);
- mergeRegionSize = (int)(recastParams->regionmergesize * recastParams->regionmergesize);
- maxEdgeLen = (int)(recastParams->edgemaxlen/recastParams->cellsize);
- detailSampleDist = recastParams->detailsampledist< 0.9f ? 0 :
+ /* ** Step 1. Initialize build config ** */
+ walkableHeight= (int)ceilf(recastParams->agentheight/ recastParams->cellheight);
+ walkableClimb= (int)floorf(recastParams->agentmaxclimb / recastParams->cellheight);
+ walkableRadius= (int)ceilf(recastParams->agentradius / recastParams->cellsize);
+ minRegionSize= (int)(recastParams->regionminsize * recastParams->regionminsize);
+ mergeRegionSize= (int)(recastParams->regionmergesize * recastParams->regionmergesize);
+ maxEdgeLen= (int)(recastParams->edgemaxlen/recastParams->cellsize);
+ detailSampleDist= recastParams->detailsampledist< 0.9f ? 0 :
recastParams->cellsize * recastParams->detailsampledist;
- detailSampleMaxError = recastParams->cellheight * recastParams->detailsamplemaxerror;
+ detailSampleMaxError= recastParams->cellheight * recastParams->detailsamplemaxerror;
- // Set the area where the navigation will be build.
+ /* Set the area where the navigation will be build. */
recast_calcGridSize(bmin, bmax, recastParams->cellsize, &width, &height);
- //
- // Step 2. Rasterize input polygon soup.
- //
- // Allocate voxel heightfield where we rasterize our input data to.
- solid = recast_newHeightfield();
+ /* ** Step 2: Rasterize input polygon soup ** */
+ /* Allocate voxel heightfield where we rasterize our input data to */
+ solid= recast_newHeightfield();
- if (!recast_createHeightfield(solid, width, height, bmin, bmax, recastParams->cellsize, recastParams->cellheight)) {
+ if(!recast_createHeightfield(solid, width, height, bmin, bmax, recastParams->cellsize, recastParams->cellheight)) {
recast_destroyHeightfield(solid);
return 0;
}
- // Allocate array that can hold triangle flags.
- triflags = MEM_callocN(sizeof(unsigned char)*ntris, "buildNavMesh triflags");
+ /* Allocate array that can hold triangle flags */
+ triflags= MEM_callocN(sizeof(unsigned char)*ntris, "buildNavMesh triflags");
- // Find triangles which are walkable based on their slope and rasterize them.
+ /* Find triangles which are walkable based on their slope and rasterize them */
recast_markWalkableTriangles(RAD2DEG(recastParams->agentmaxslope), verts, nverts, tris, ntris, triflags);
recast_rasterizeTriangles(verts, nverts, tris, triflags, ntris, solid);
MEM_freeN(triflags);
- //
- // Step 3. Filter walkables surfaces.
- //
+ /* ** Step 3: Filter walkables surfaces ** */
recast_filterLedgeSpans(walkableHeight, walkableClimb, solid);
recast_filterWalkableLowHeightSpans(walkableHeight, solid);
- //
- // Step 4. Partition walkable surface to simple regions.
- //
+ /* ** Step 4: Partition walkable surface to simple regions ** */
- chf = recast_newCompactHeightfield();
- if (!recast_buildCompactHeightfield(walkableHeight, walkableClimb, RECAST_WALKABLE, solid, chf)) {
+ chf= recast_newCompactHeightfield();
+ if(!recast_buildCompactHeightfield(walkableHeight, walkableClimb, RECAST_WALKABLE, solid, chf)) {
recast_destroyHeightfield(solid);
recast_destroyCompactHeightfield(chf);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list