utSplitLargeMeshes.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "utSplitLargeMeshes.h"
  2. #include "aiPostProcess.h"
  3. #include <math.h>
  4. CPPUNIT_TEST_SUITE_REGISTRATION (SplitLargeMeshesTest);
  5. void SplitLargeMeshesTest :: setUp (void)
  6. {
  7. // construct the processes
  8. this->piProcessTriangle = new SplitLargeMeshesProcess_Triangle();
  9. this->piProcessVertex = new SplitLargeMeshesProcess_Vertex();
  10. this->piProcessTriangle->SetLimit(1000);
  11. this->piProcessVertex->SetLimit(1000);
  12. this->pcMesh1 = new aiMesh();
  13. pcMesh1->mNumVertices = 2100; // quersumme: 3
  14. pcMesh1->mVertices = new aiVector3D[pcMesh1->mNumVertices];
  15. pcMesh1->mNormals = new aiVector3D[pcMesh1->mNumVertices];
  16. pcMesh1->mNumFaces = pcMesh1->mNumVertices / 3;
  17. pcMesh1->mFaces = new aiFace[pcMesh1->mNumFaces];
  18. unsigned int qq = 0;
  19. for (unsigned int i = 0; i < pcMesh1->mNumFaces;++i)
  20. {
  21. aiFace& face = pcMesh1->mFaces[i];
  22. face.mNumIndices = 3;
  23. face.mIndices = new unsigned int[3];
  24. face.mIndices[0] = qq++;
  25. face.mIndices[1] = qq++;
  26. face.mIndices[2] = qq++;
  27. }
  28. // generate many, many faces with randomized indices for
  29. // the second mesh
  30. this->pcMesh2 = new aiMesh();
  31. pcMesh2->mNumVertices = 3000;
  32. pcMesh2->mVertices = new aiVector3D[pcMesh2->mNumVertices];
  33. pcMesh2->mNormals = new aiVector3D[pcMesh2->mNumVertices];
  34. pcMesh2->mNumFaces = 10000;
  35. pcMesh2->mFaces = new aiFace[pcMesh2->mNumFaces];
  36. for (unsigned int i = 0; i < pcMesh2->mNumFaces;++i)
  37. {
  38. aiFace& face = pcMesh2->mFaces[i];
  39. face.mNumIndices = 3;
  40. face.mIndices = new unsigned int[3];
  41. face.mIndices[0] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
  42. face.mIndices[1] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
  43. face.mIndices[2] = (unsigned int)((rand() / (float)RAND_MAX) * pcMesh2->mNumVertices);
  44. }
  45. }
  46. void SplitLargeMeshesTest :: tearDown (void)
  47. {
  48. delete this->piProcessTriangle;
  49. delete this->piProcessVertex;
  50. }
  51. void SplitLargeMeshesTest :: testVertexSplit()
  52. {
  53. std::vector< std::pair<aiMesh*, unsigned int> > avOut;
  54. int iOldFaceNum = (int)pcMesh1->mNumFaces;
  55. piProcessVertex->SplitMesh(0,pcMesh1,avOut);
  56. for (std::vector< std::pair<aiMesh*, unsigned int> >::const_iterator
  57. iter = avOut.begin(), end = avOut.end();
  58. iter != end; ++iter)
  59. {
  60. aiMesh* mesh = (*iter).first;
  61. CPPUNIT_ASSERT(mesh->mNumVertices < 1000);
  62. CPPUNIT_ASSERT(0 != mesh->mNormals && 0 != mesh->mVertices);
  63. iOldFaceNum -= mesh->mNumFaces;
  64. delete mesh;
  65. }
  66. CPPUNIT_ASSERT(0 == iOldFaceNum);
  67. }
  68. void SplitLargeMeshesTest :: testTriangleSplit()
  69. {
  70. std::vector< std::pair<aiMesh*, unsigned int> > avOut;
  71. // the number of faces shouldn't change
  72. int iOldFaceNum = (int)pcMesh2->mNumFaces;
  73. piProcessTriangle->SplitMesh(0,pcMesh2,avOut);
  74. for (std::vector< std::pair<aiMesh*, unsigned int> >::const_iterator
  75. iter = avOut.begin(), end = avOut.end();
  76. iter != end; ++iter)
  77. {
  78. aiMesh* mesh = (*iter).first;
  79. CPPUNIT_ASSERT(mesh->mNumFaces < 1000);
  80. CPPUNIT_ASSERT(0 != mesh->mNormals && 0 != mesh->mVertices);
  81. iOldFaceNum -= mesh->mNumFaces;
  82. delete mesh;
  83. }
  84. CPPUNIT_ASSERT(0 == iOldFaceNum);
  85. }