NoobsDeSroobs

Untitled

Nov 19th, 2014
499
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. TriMesh* TriMesh::subdivideSqrt3() {
  2. vector<glm::vec3> points;
  3. vector<int> indices;
  4.  
  5. int index = 0;
  6. for(int i = 0; i < m_triangles.size(); ++i){
  7. fprintf(stderr, "Started tri\n");
  8. Node* triNodes[3];
  9. glm::vec3 vertex1;
  10. glm::vec3 vertex2;
  11. glm::vec3 vertex3;
  12.  
  13. triNodes[0] = m_triangles[i]->m_he_->m_from_;
  14. triNodes[1] = m_triangles[i]->m_he_->getNext()->m_from_;
  15. triNodes[2] = m_triangles[i]->m_he_->getPrev()->m_from_;
  16.  
  17. vertex1 = triNodes[0]->m_pos_;
  18. vertex2 = triNodes[1]->m_pos_;
  19. vertex3 = triNodes[2]->m_pos_;
  20.  
  21. for(int i = 0; i < 3; i++)
  22. {
  23. float n = 0.0f;
  24. Node* node = triNodes[i];
  25. glm::vec3 vertex = triNodes[i]->m_pos_;
  26. HalfEdge* next = node->m_he_;
  27. glm::vec3 neighbours = glm::vec3(0.0f, 0.0f, 0.0f);
  28. for(;;){
  29. n += 1.0f;
  30. next = next->m_twin_->m_next_;
  31. if (next == NULL || next == node->m_he_)
  32. break;
  33. }
  34. fprintf(stderr, "Number of neighbours: %f\n", n);
  35. //Calculate beta
  36. float beta = 4-(2*glm::cos((2*M_PI)/n));
  37. beta = beta/(9*n);
  38. next = node->m_he_;
  39. for(;;){
  40. neighbours += next->m_from_->m_pos_ - vertex;
  41. next = next->m_twin_->m_next_;
  42. if (next == NULL || next == node->m_he_)
  43. break;
  44. }
  45. //shift1 /= n1;
  46.  
  47. //New vertex positions
  48. //vertex1 = (1-(beta*n1))*vertex1;
  49. //vertex1 = (1-beta)*vertex1 + beta*n1;
  50. //vertex1 += shift1;
  51. if(i == 0)
  52. vertex1 = (1-n*beta)*vertex1 + (beta*(neighbours));
  53. else if(i == 1)
  54. vertex2 = (1-n*beta)*vertex2 + (beta*(neighbours));
  55. else if(i == 2)
  56. vertex3 = (1-n*beta)*vertex3 + (beta*(neighbours));
  57. }
  58.  
  59.  
  60. fprintf(stderr, "found pos\n");
  61.  
  62. glm::vec3 newVertex = vertex1 + vertex2 + vertex3;
  63. newVertex = newVertex/3.0f;
  64.  
  65. fprintf(stderr, "Made verts\n");
  66. points.push_back(vertex1);
  67. points.push_back(vertex2);
  68. points.push_back(vertex3);
  69. points.push_back(newVertex);
  70. fprintf(stderr, "Added verts\n");
  71. indices.push_back(index+0);
  72. indices.push_back(index+1);
  73. indices.push_back(index+3);
  74. indices.push_back(index+1);
  75. indices.push_back(index+2);
  76. indices.push_back(index+3);
  77. indices.push_back(index+2);
  78. indices.push_back(index+0);
  79. indices.push_back(index+3);
  80.  
  81. index += 4;
  82. fprintf(stderr, "Added indices: %d\n", indices.size());
  83. }
  84. return new TriMesh(points, indices);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment