- Timestamp:
- 02/05/07 13:29:55 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Geom/shared/GTGeometry/src/libs/vmi/src/mesh.cpp
r983 r2090 11 11 using namespace VMI; 12 12 13 #define MAX_NUM_TRI 450 14 13 #define OUTPUT_SEVERAL_GROUPS 14 15 /////////////////////////////////////////////////////////////////////////////// 16 // list of integers 15 17 void VMI::printItemList(int *list, int n) { 16 18 int i; … … 35 37 list[(*n)++] = item; 36 38 } 39 40 void VMI::delItem(int *list, int *n, int item) { 41 int i, j; 42 43 for (i=0; i<*n; i++) { 44 if (list[i] == item) { 45 // delete it 46 for (j =i + 1 ; j<*n; j++) 47 list[j - 1] = list[j]; 48 (*n)--; 49 i--; // Delete all ocurrencies of an item 50 } 51 } 52 } 53 /////////////////////////////////////////////////////////////////////////////// 37 54 38 55 int VMI::findEdge(Edge *e, GLuint num, GLuint _u, GLuint _v) { … … 56 73 57 74 return found; 75 } 76 77 // Adds a new edge at the end of the mesh edge list 78 Edge *VMI::addEdge(Edge *list, int *n, int u, int v, int *pos) { 79 Edge *newList; 80 81 // Reallocate memory for the new edge 82 newList = (Edge *)realloc(list, ((*n) + 1) * sizeof(Edge)); 83 84 // New vertex indices 85 newList[*n].u = u; 86 newList[*n].v = v; 87 88 // This edge has no triangle adjancency 89 newList[*n].numTriangles = 0; 90 newList[*n].triangles = NULL; 91 92 // Enable the new edge 93 newList[*n].enable = TRUE; 94 95 // New edge position 96 *pos = *n; 97 98 // New number of edges 99 (*n)++; 100 101 return newList; 58 102 } 59 103 … … 131 175 Mesh *VMI::initMesh(GLMmodel* pmodel) { 132 176 133 GLuint i, j, v1, v2, v3, n, e, t; 177 GLuint i, j, curGroup, v1, v2, v3, n, m, t; 178 int e; 134 179 Mesh *mesh; 180 GLMgroup *group; 135 181 136 182 mesh = (Mesh *)malloc (sizeof(Mesh)); … … 157 203 printf("Adding vertices..."); 158 204 for (i=1; i<=pmodel->numvertices; i++) { // Vertices start at 1 159 160 205 mesh->vertices[i - 1].x = pmodel->vertices[3 * i + 0]; 161 206 mesh->vertices[i - 1].y = pmodel->vertices[3 * i + 1]; … … 170 215 171 216 printf("Adding triangles..."); 217 218 #ifdef OUTPUT_SEVERAL_GROUPS 219 group = pmodel->groups; 220 curGroup=0; // current group 221 while(group) { 222 223 for (i=0; i<group->numtriangles; i++) { 224 225 t = group->triangles[i]; 226 227 mesh->triangles[t].id = t; 228 mesh->triangles[t].group = curGroup; // set group 229 mesh->triangles[t].indices[0] = pmodel->triangles[t].vindices[0] - 1; 230 mesh->triangles[t].indices[1] = pmodel->triangles[t].vindices[1] - 1; 231 mesh->triangles[t].indices[2] = pmodel->triangles[t].vindices[2] - 1; 232 mesh->triangles[t].area = computeTriangleArea(mesh->vertices, &mesh->triangles[t]); 233 //printf("\n%d a: %f",i , mesh->triangles[i].area); 234 computeTriangleNormal(mesh->vertices, &mesh->triangles[t]); 235 236 mesh->triangles[t].saliency = 0.0; 237 238 mesh->triangles[t].enable = GL_TRUE; 239 240 for (j=0; j<3; j++) { 241 // Adding triangle i adjacent to 3 vertices 242 v1 = mesh->triangles[t].indices[j]; 243 244 // Reallocate memory for the new adjacent triangle 245 mesh->vertices[v1].triangles = 246 (GLuint *)realloc(mesh->vertices[v1].triangles, (mesh->vertices[v1].numTriangles + 1) * sizeof(GLuint)); 247 addItem((int *)mesh->vertices[v1].triangles, (int *)&mesh->vertices[v1].numTriangles, t); 248 } 249 } 250 curGroup++; 251 group = group->next; 252 } 253 #else // One single group 172 254 for (i=0; i<pmodel->numtriangles; i++) { 173 255 mesh->triangles[i].id = i; … … 188 270 189 271 // Reallocate memory for the new adjacent triangle 190 mesh->vertices[v1].triangles = (GLuint *)realloc(mesh->vertices[v1].triangles, (mesh->vertices[v1].numTriangles + 1) * sizeof(GLuint)); 272 mesh->vertices[v1].triangles = 273 (GLuint *)realloc(mesh->vertices[v1].triangles, (mesh->vertices[v1].numTriangles + 1) * sizeof(GLuint)); 191 274 addItem((int *)mesh->vertices[v1].triangles, (int *)&mesh->vertices[v1].numTriangles, i); 192 275 } 193 276 } 194 //printf("\n"); 277 printf("\n"); 278 #endif 195 279 printf("Ok\n"); 196 280 197 281 mesh->numTriangles = pmodel->numtriangles; 198 282 mesh->currentNumTriangles = pmodel->numtriangles; 283 printf("Number of triangles: %d\n", mesh->numTriangles); 199 284 200 285 mesh->edges = (Edge *)malloc (sizeof(Edge) * mesh->numTriangles * 3); // E = 3 T / 2 … … 205 290 } 206 291 207 // Init edges208 for (i=0; i<mesh->numTriangles * 3; i++) {209 210 mesh->edges[i].triangles = NULL;211 mesh->edges[i].numTriangles = 0;212 }213 214 292 printf("Adding edges..."); 215 293 n = 0; … … 221 299 v3 = mesh->triangles[i].indices[2]; 222 300 301 ///////////////////////////////////////////////////////////////////////////////// 302 // edge (v1,v2) 223 303 if ((e = findEdge(mesh->edges, n, v1, v2)) == -1) { 224 304 mesh->edges[n].u = v1; 225 305 mesh->edges[n].v = v2; 306 mesh->edges[n].triangles = NULL; 307 mesh->edges[n].numTriangles = 0; 226 308 mesh->edges[n].enable = GL_TRUE; 227 228 // Reallocate memory for the new adjacent triangle 229 mesh->edges[n].triangles = (GLuint *)realloc(mesh->edges[n].triangles, (mesh->edges[n].numTriangles + 1) * sizeof(GLuint)); 230 // Adding triangle i adjacent to edge n 231 addItem((int *)mesh->edges[n].triangles, (int *)&mesh->edges[n].numTriangles, i); 232 //printf("n:%d i:%d\n", n, i); 233 234 // Adding edge n adjacent to triangle i 235 addItem((int *)mesh->triangles[i].edges, (int *)&t, n); 309 m = n; 236 310 n++; 237 } else { 238 // Reallocate memory for the new adjacent triangle 239 mesh->edges[e].triangles = (GLuint *)realloc(mesh->edges[e].triangles, (mesh->edges[e].numTriangles + 1) * sizeof(GLuint)); 240 // Adding triangle i adjacent to edge e 241 addItem((int *)mesh->edges[e].triangles, (int *)&mesh->edges[e].numTriangles, i); 242 //printf("n:%d i:%d\n", e, i); 243 244 // Adding edge e adjacent to triangle i 245 addItem((int *)mesh->triangles[i].edges, (int *)&t, e); 246 } 311 } else m = e; 312 // Reallocate memory for the new adjacent triangle 313 mesh->edges[m].triangles = 314 (GLuint *)realloc(mesh->edges[m].triangles, (mesh->edges[m].numTriangles + 1) * sizeof(GLuint)); 315 // Adding triangle i adjacent to edge m 316 addItem((int *)mesh->edges[m].triangles, (int *)&mesh->edges[m].numTriangles, i); 317 //printf("n:%d i:%d\n", m, i); 318 319 // Adding edge m adjacent to triangle i 320 addItem((int *)mesh->triangles[i].edges, (int *)&t, m); 321 322 ///////////////////////////////////////////////////////////////////////////////// 323 // edge (v2,v3) 247 324 if (( e = findEdge(mesh->edges, n, v2, v3)) == -1) { 248 325 mesh->edges[n].u = v2; 249 326 mesh->edges[n].v = v3; 327 mesh->edges[n].triangles = NULL; 328 mesh->edges[n].numTriangles = 0; 250 329 mesh->edges[n].enable = GL_TRUE; 251 252 // Reallocate memory for the new adjacent triangle 253 mesh->edges[n].triangles = (GLuint *)realloc(mesh->edges[n].triangles, (mesh->edges[n].numTriangles + 1) * sizeof(GLuint)); 254 // Adding triangle i adjacent to edge n 255 addItem((int *)mesh->edges[n].triangles, (int *)&mesh->edges[n].numTriangles, i); 256 //printf("n:%d i:%d\n", n, i); 257 258 // Adding edge n adjacent to triangle i 259 addItem((int *)mesh->triangles[i].edges, (int *)&t, n); 330 m = n; 260 331 n++; 261 } else { 262 // Reallocate memory for the new adjacent triangle 263 mesh->edges[e].triangles = (GLuint *)realloc(mesh->edges[e].triangles, (mesh->edges[e].numTriangles + 1) * sizeof(GLuint)); 264 // Adding triangle i adjacent to edge e 265 addItem((int *)mesh->edges[e].triangles, (int *)&mesh->edges[e].numTriangles, i); 266 //printf("n:%d i:%d\n", e, i); 267 268 // Adding edge e adjacent to triangle i 269 addItem((int *)mesh->triangles[i].edges, (int *)&t, e); 270 } 332 } else m = e; 333 // Reallocate memory for the new adjacent triangle 334 mesh->edges[m].triangles = 335 (GLuint *)realloc(mesh->edges[m].triangles, (mesh->edges[m].numTriangles + 1) * sizeof(GLuint)); 336 // Adding triangle i adjacent to edge m 337 addItem((int *)mesh->edges[m].triangles, (int *)&mesh->edges[m].numTriangles, i); 338 //printf("n:%d i:%d\n", m, i); 339 340 // Adding edge m adjacent to triangle i 341 addItem((int *)mesh->triangles[i].edges, (int *)&t, m); 342 343 ///////////////////////////////////////////////////////////////////////////////// 344 // edge (v3,v1) 271 345 if ((e = findEdge(mesh->edges, n, v3, v1)) == -1) { 272 346 mesh->edges[n].u = v3; 273 347 mesh->edges[n].v = v1; 348 mesh->edges[n].triangles = NULL; 349 mesh->edges[n].numTriangles = 0; 274 350 mesh->edges[n].enable = GL_TRUE; 275 276 // Reallocate memory for the new adjacent triangle 277 mesh->edges[n].triangles = (GLuint *)realloc(mesh->edges[n].triangles, (mesh->edges[n].numTriangles + 1) * sizeof(GLuint)); 278 // Adding triangle i adjacent to edge n 279 addItem((int *)mesh->edges[n].triangles, (int *)&mesh->edges[n].numTriangles, i); 280 //printf("n:%d i:%d\n", n, i); 281 282 // Adding edge n adjacent to triangle i 283 addItem((int *)mesh->triangles[i].edges, (int *)&t, n); 351 m = n; 284 352 n++; 285 } else {286 287 mesh->edges[e].triangles = (GLuint *)realloc(mesh->edges[e].triangles, (mesh->edges[e].numTriangles + 1) * sizeof(GLuint));288 // Adding triangle i adjacent to edge e 289 addItem((int *)mesh->edges[e].triangles, (int *)&mesh->edges[e].numTriangles, i);290 //printf("n:%d i:%d\n", e, i);291 292 // Adding edge e adjacent to triangle i293 addItem((int *)mesh->triangles[i].edges, (int *)&t, e);294 }353 } else m = e; 354 // Reallocate memory for the new adjacent triangle 355 mesh->edges[m].triangles = 356 (GLuint *)realloc(mesh->edges[m].triangles, (mesh->edges[m].numTriangles + 1) * sizeof(GLuint)); 357 // Adding triangle i adjacent to edge m 358 addItem((int *)mesh->edges[m].triangles, (int *)&mesh->edges[m].numTriangles, i); 359 //printf("n:%d i:%d\n", m, i); 360 361 // Adding edge m adjacent to triangle i 362 addItem((int *)mesh->triangles[i].edges, (int *)&t, m); 295 363 } 296 364 printf("Ok\n"); … … 322 390 printf("------------------------\n"); 323 391 for (i=0; i<mesh->numEdges; i++) { 324 printf("e%d (%d,%d) \n", i, mesh->edges[i].u, mesh->edges[i].v);392 printf("e%d (%d,%d) %d\n", i, mesh->edges[i].u, mesh->edges[i].v, mesh->edges[i].enable); 325 393 printf(" t(%d)[", mesh->edges[i].numTriangles); 326 394 if (mesh->edges[i].triangles != NULL) { … … 329 397 printf(",%d", mesh->edges[i].triangles[j]); 330 398 } 331 399 } 332 400 printf("]\n"); 333 401 } … … 336 404 printf("------------------------\n"); 337 405 for (i=0; i<mesh->numTriangles; i++) { 338 printf("t%d (%d,%d,%d) \n", i, mesh->triangles[i].indices[0], mesh->triangles[i].indices[1],339 mesh->triangles[i].indices[2] );406 printf("t%d (%d,%d,%d) %d\n", i, mesh->triangles[i].indices[0], mesh->triangles[i].indices[1], 407 mesh->triangles[i].indices[2], mesh->triangles[i].enable); 340 408 printf(" e(3)["); 341 409 printf("%d", mesh->triangles[i].edges[0]); … … 385 453 386 454 int *VMI::trianglesAdjToEdge(Mesh *mesh, int e, int *n) { 387 int triangles[MAX_NUM_TRI]; 388 int i, n0, n1, n2, 455 int i, n0, n1, n2, num = 0, t, 389 456 u = mesh->edges[e].u, 390 457 v = mesh->edges[e].v; 391 int *list, num = 0; 392 393 for (i=0; i<(int)mesh->numTriangles; i++) { 394 395 if (mesh->triangles[i].enable == TRUE) { 396 397 n0 = mesh->triangles[i].indices[0]; 398 n1 = mesh->triangles[i].indices[1]; 399 n2 = mesh->triangles[i].indices[2]; 458 int *triangles = NULL; 459 460 if ((mesh->vertices[u].numTriangles + 461 mesh->vertices[v].numTriangles) > 0) 462 triangles = (int *)malloc((mesh->vertices[u].numTriangles + 463 mesh->vertices[v].numTriangles) * sizeof(int)); 464 465 for (i=0; i<(int)mesh->vertices[u].numTriangles; i++) { 466 467 t = mesh->vertices[u].triangles[i]; 468 469 if (mesh->triangles[t].enable == TRUE) { 470 471 n0 = mesh->triangles[t].indices[0]; 472 n1 = mesh->triangles[t].indices[1]; 473 n2 = mesh->triangles[t].indices[2]; 400 474 401 475 if ((n0 == v) || (n1 == v) || (n2 == v) || 402 476 (n0 == u) || (n1 == u) || (n2 == u)) 403 477 404 triangles[num++] = i; 405 } 406 } 407 408 list = (int*) malloc (sizeof(int) * num); 409 if (NULL == list) { 410 fprintf (stderr, "no more memory for list"); 411 exit(1); 412 } 413 414 memcpy(list, triangles, sizeof(int) * num); 415 478 addItem(triangles, &num, t); 479 } 480 } 481 482 for (i=0; i<(int)mesh->vertices[v].numTriangles; i++) { 483 484 t = mesh->vertices[v].triangles[i]; 485 486 if (mesh->triangles[t].enable == TRUE) { 487 488 n0 = mesh->triangles[t].indices[0]; 489 n1 = mesh->triangles[t].indices[1]; 490 n2 = mesh->triangles[t].indices[2]; 491 492 if ((n0 == v) || (n1 == v) || (n2 == v) || 493 (n0 == u) || (n1 == u) || (n2 == u)) 494 495 addItem(triangles, &num, t); 496 } 497 } 416 498 *n = num; 417 499 418 return list; 419 } 420 421 int *VMI::trianglesAdjToVertex(Mesh *mesh, int v, int *n) { 422 int triangles[MAX_NUM_TRI]; 423 int i, n0, n1, n2; 424 int *list, num = 0; 425 426 for (i=0; i<(int)mesh->numTriangles; i++) { 427 428 if (mesh->triangles[i].enable == TRUE) { 429 430 n0 = mesh->triangles[i].indices[0]; 431 n1 = mesh->triangles[i].indices[1]; 432 n2 = mesh->triangles[i].indices[2]; 433 434 if ((n0 == v) || (n1 == v) || (n2 == v)) 435 436 triangles[num++] = i; 437 } 438 } 439 440 list = (int*) malloc (sizeof(int) * num); 441 if (NULL == list) { 442 fprintf (stderr, "no more memory for list"); 443 exit(1); 444 } 445 446 memcpy(list, triangles, sizeof(int) * num); 447 448 *n = num; 449 450 return list; 500 return triangles; 451 501 } 452 502 453 503 int *VMI::verticesAdjToVertex(Mesh *mesh, int v, int *n) { 454 int numTr; 455 int *triangles = trianglesAdjToVertex(mesh, v, &numTr); 456 int *vertices = (int*) malloc (sizeof(int) * numTr * 2); 504 int *vertices = NULL; 457 505 int i, t, n0, n1, n2; 458 506 int num = 0; 459 507 460 for (i=0; i<numTr; i++) { 461 t = triangles[i]; 508 if (mesh->vertices[v].numTriangles > 0) 509 vertices = (int*)malloc(sizeof(int) * mesh->vertices[v].numTriangles * 2); 510 511 for (i=0; i<(int)mesh->vertices[v].numTriangles; i++) { 512 t = mesh->vertices[v].triangles[i]; 462 513 463 514 n0 = mesh->triangles[t].indices[0]; … … 469 520 if (n2 != v) addItem(vertices, &num, n2); 470 521 } 471 472 522 *n = num; 473 523 474 free(triangles);475 476 524 return vertices; 477 525 } 478 526 479 527 int *VMI::edgesAdjToVertex(Mesh *mesh, int v, int *n) { 480 int numTr; 481 int *triangles = trianglesAdjToVertex(mesh, v, &numTr); 482 int *edges = (int*) malloc (sizeof(int) * numTr * 2); 483 int i, t, n0, n1, n2, e; 528 int *edges = NULL; 529 int i, t, e; 530 #ifndef USE_EDGE_ADJACENCY 531 int n0, n1, n2; 532 #else 533 int j; 534 #endif 484 535 int num = 0; 485 536 486 for (i=0; i<numTr; i++) { 487 t = triangles[i]; 488 537 if (mesh->vertices[v].numTriangles > 0) 538 edges = (int*)malloc(sizeof(int) * mesh->vertices[v].numTriangles * 2); 539 540 for (i=0; i<(int)mesh->vertices[v].numTriangles; i++) { 541 542 t = mesh->vertices[v].triangles[i]; 543 544 #ifdef USE_EDGE_ADJACENCY 545 for (j=0; j<3; j++) { 546 e = mesh->triangles[t].edges[j]; 547 548 if ((int)mesh->edges[e].u == v || (int)mesh->edges[e].v == v) 549 550 addItem(edges, &num, e); 551 } 552 #else 489 553 n0 = mesh->triangles[t].indices[0]; 490 554 n1 = mesh->triangles[t].indices[1]; … … 498 562 499 563 if (((n0 == v) || (n2 == v)) && 500 ((e = findEdge(mesh->edges, mesh->numEdges, n0, n2)) != -1)) addItem(edges, &num, e); 501 } 502 564 ((e = findEdge(mesh->edges, mesh->numEdges, n0, n2)) != -1)) addItem(edges, &num, e); 565 566 #endif 567 } 503 568 *n = num; 504 569 505 free(triangles);506 507 570 return edges; 508 571 } 509 572 510 573 int *VMI::edgesAdjToVertices(Mesh *mesh, int *vertices, int numVertices, int *n) { 511 int edges[MAX_NUM_TRI*2]; 512 int i, j, v, num = 0, e; 513 int *list, numEdges; 514 515 for (i=0; i<numVertices; i++) { 516 v = vertices[i]; 517 518 list = edgesAdjToVertex(mesh, v, &numEdges); 519 520 for (j=0; j<numEdges; j++) { 521 e = list[j]; 522 523 addItem(edges, &num, e); 524 } 574 int *edges = NULL; 575 int i, j, num = 0; 576 int *list = NULL, numEdges; 577 578 if (numVertices > 0) { 579 // Add the first 580 list = edgesAdjToVertex(mesh, vertices[0], &numEdges); 581 582 // Allocate memory 583 edges = (int *)malloc(numEdges * sizeof(int)); 584 585 memcpy(edges, list, sizeof(int) * numEdges); 525 586 526 587 free(list); 527 } 528 529 list = (int*) malloc (sizeof(int) * num); 530 if (NULL == list) { 531 fprintf (stderr, "no more memory for list"); 532 exit(1); 533 } 534 535 memcpy(list, edges, sizeof(int) * num); 536 588 589 num = numEdges; 590 591 // Add the rest 592 for (i=1; i<numVertices; i++) { 593 594 list = edgesAdjToVertex(mesh, vertices[i], &numEdges); 595 596 // Reallocate memory 597 if (numEdges > 0) { 598 599 edges = (int *)realloc(edges, (num + numEdges + 1) * sizeof(int)); 600 601 for (j=0; j<numEdges; j++) 602 addItem(edges, &num, list[j]); 603 } 604 free(list); 605 } 606 } 537 607 *n = num; 538 608 539 return list;609 return edges; 540 610 } 541 611 … … 563 633 } 564 634 635 // Adds a new vertex at the end of the mesh vertex list 636 Vertex *VMI::addVertex(Vertex *list, int *n, float x, float y, float z, int *pos) { 637 Vertex *newList; 638 639 // Reallocate memory for the new vertex 640 newList = (Vertex *)realloc(list, ((*n) + 1) * sizeof(Vertex)); 641 642 // New Vertex coordinates 643 newList[*n].x = x; 644 newList[*n].y = y; 645 newList[*n].z = z; 646 647 // This vertex has no triangle adjancency 648 newList[*n].numTriangles = 0; 649 newList[*n].triangles = NULL; 650 651 // Enable the new vertex 652 newList[*n].enable = TRUE; 653 654 // New vertex position 655 *pos = *n; 656 657 // New number of vertices 658 (*n)++; 659 660 return newList; 661 } 662 663 664 565 665 void VMI::updateModel(GLMmodel* pmodel, Mesh *mesh, GLuint numVertices, GLuint numTriangles) { 566 666 GLuint i , v1, v2 ,v3, numV = 1, numT = 0; … … 569 669 570 670 if (pmodel->vertices != NULL) free(pmodel->vertices); 571 572 671 pmodel->vertices = (GLfloat *)calloc ((numVertices + 1) * 3, sizeof(GLfloat)); 573 574 672 575 673 if (pmodel->triangles != NULL) free(pmodel->triangles); 576 577 674 pmodel->triangles = (GLMtriangle *)malloc (numTriangles * sizeof(GLMtriangle)); 578 675 579 580 676 for (i=0; i<mesh->numTriangles; i++) { 581 677 if (mesh->triangles[i].enable) { … … 630 726 631 727 void VMI::saveModel(char *filename, GLMmodel* pmodel, Mesh *mesh) { 632 GLuint i; 633 728 GLuint i, j, g, numT = 0; 729 GLMgroup *group; 730 731 #ifdef OUTPUT_SEVERAL_GROUPS 732 // The output model maintains groups 733 734 // Empty all groups 735 group = pmodel->groups; 736 while(group) { 737 // Free memory for triangles 738 free(group->triangles); 739 740 // Reset group 741 group->triangles = NULL; 742 group->numtriangles = 0; 743 744 group = group->next; 745 } 746 // Fill all groups 747 for (i=0; i<mesh->numTriangles; i++) { 748 749 if (mesh->triangles[i].enable) { 750 g = mesh->triangles[i].group; 751 752 // Get group 753 group = pmodel->groups; 754 for (j=0; j <g; j++) 755 group = group->next; 756 757 // Reallocate memory for triangles 758 group->triangles = (GLuint *)realloc(group->triangles, (group->numtriangles + 1) * sizeof(GLuint)); 759 // Add triangle into group 760 addItem((int *)group->triangles, (int *)&group->numtriangles, numT); 761 762 numT++; 763 } 764 } 765 #else 634 766 // The output model contains only one group 635 767 pmodel->numgroups = 1; … … 646 778 for (i=0; i<mesh->currentNumTriangles; i++) 647 779 pmodel->groups->triangles[i] = i; 780 #endif 648 781 649 782 updateModel(pmodel, mesh, mesh->currentNumTriangles * 3, mesh->currentNumTriangles);
Note: See TracChangeset
for help on using the changeset viewer.