pastebin - collaborative debugging

pastebin is a collaborative debugging tool allowing you to share and modify code snippets while chatting on IRC, IM or a message board.

This site is developed to XHTML and CSS2 W3C standards. If you see this paragraph, your browser does not support those standards and you need to upgrade. Visit WaSP for a variety of options.

C++ pastebin - collaborative debugging tool View Help


Posted by Fourth on Mon 17 Nov 15:12
report abuse | download | new post

  1. Sphere::Sphere(int n) : Shape() {
  2.  
  3.   //your code for tessellating a sphere goes here
  4.  
  5.   if( n > 5 )
  6.     n = 5;
  7.  
  8.   float five = 5.0;
  9.   float a = 2.0 / ( 1.0 + sqrt(five) );
  10.  
  11.   Vector3 origin(0,0,0);
  12.  
  13.   //icosahedron vertices
  14.   Vector3 tv0(0 , a, -1);
  15.   Vector3 tv1(-a, 1, 0);
  16.   Vector3 tv2(a, 1, 0);
  17.   Vector3 tv3(0, a, 1);
  18.   Vector3 tv4(-1, 0, a);
  19.   Vector3 tv5(0, -a, 1);
  20.   Vector3 tv6(1, 0, a);
  21.   Vector3 tv7(1, 0, -a);
  22.   Vector3 tv8(0, -a, -1);
  23.   Vector3 tv9(-1, 0, -a);
  24.   Vector3 tv10(-a, -1, 0);
  25.   Vector3 tv11(a, -1, 0);
  26.  
  27.   //create the triangles in the original mesh
  28.   vector< vector<Vector3> > triangles;
  29.  
  30.   //make triangle 0 and add it
  31.   vector<Vector3> triangle0;
  32.   triangle0.push_back(tv0);
  33.   triangle0.push_back(tv1);
  34.   triangle0.push_back(tv2);
  35.   triangles.push_back(triangle0);
  36.   //make triangle 1 and add it
  37.   triangle0.clear();
  38.   triangle0.push_back(tv3);
  39.   triangle0.push_back(tv2);
  40.   triangle0.push_back(tv1);
  41.   triangles.push_back(triangle0);
  42.   //make triangle 2 and add it
  43.   triangle0.clear();
  44.   triangle0.push_back(tv3);
  45.   triangle0.push_back(tv4);
  46.   triangle0.push_back(tv5);
  47.   triangles.push_back(triangle0);
  48.   //make triangle 3 and add it
  49.   triangle0.clear();
  50.   triangle0.push_back(tv3);
  51.   triangle0.push_back(tv5);
  52.   triangle0.push_back(tv6);
  53.   triangles.push_back(triangle0);
  54.   //make triangle 3 and add it
  55.   triangle0.clear();
  56.   triangle0.push_back(tv0);
  57.   triangle0.push_back(tv7);
  58.   triangle0.push_back(tv8);
  59.   triangles.push_back(triangle0);
  60.   //make triangle 4 and add it
  61.   triangle0.clear();
  62.   triangle0.push_back(tv0);
  63.   triangle0.push_back(tv8);
  64.   triangle0.push_back(tv9);
  65.   triangles.push_back(triangle0);
  66.   //make triangle 5 and add it
  67.   triangle0.clear();
  68.   triangle0.push_back(tv5);
  69.   triangle0.push_back(tv10);
  70.   triangle0.push_back(tv11);
  71.   triangles.push_back(triangle0);
  72.   //make triangle 6 and add it
  73.   triangle0.clear();
  74.   triangle0.push_back(tv8);
  75.   triangle0.push_back(tv11);
  76.   triangle0.push_back(tv10);
  77.   triangles.push_back(triangle0);
  78.   //make triangle 7 and add it
  79.   triangle0.clear();
  80.   triangle0.push_back(tv1);
  81.   triangle0.push_back(tv9);
  82.   triangle0.push_back(tv4);
  83.   triangles.push_back(triangle0);
  84.   //make triangle 8 and add it
  85.   triangle0.clear();
  86.   triangle0.push_back(tv10);
  87.   triangle0.push_back(tv4);
  88.   triangle0.push_back(tv9);
  89.   triangles.push_back(triangle0);
  90.   //make triangle 9 and add it
  91.   triangle0.clear();
  92.   triangle0.push_back(tv2);
  93.   triangle0.push_back(tv6);
  94.   triangle0.push_back(tv7);
  95.   triangles.push_back(triangle0);
  96.   //make triangle 10 and add it
  97.   triangle0.clear();
  98.   triangle0.push_back(tv11);
  99.   triangle0.push_back(tv7);
  100.   triangle0.push_back(tv6);
  101.   triangles.push_back(triangle0);
  102.   //make triangle 11 and add it
  103.   triangle0.clear();
  104.   triangle0.push_back(tv3);
  105.   triangle0.push_back(tv1);
  106.   triangle0.push_back(tv4);
  107.   triangles.push_back(triangle0);
  108.   //make triangle 12 and add it
  109.   triangle0.clear();
  110.   triangle0.push_back(tv3);
  111.   triangle0.push_back(tv6);
  112.   triangle0.push_back(tv2);
  113.   triangles.push_back(triangle0);
  114.   //make triangle 13 and add it
  115.   triangle0.clear();
  116.   triangle0.push_back(tv0);
  117.   triangle0.push_back(tv9);
  118.   triangle0.push_back(tv1);
  119.   triangles.push_back(triangle0);
  120.   //make triangle 14 and add it
  121.   triangle0.clear();
  122.   triangle0.push_back(tv0);
  123.   triangle0.push_back(tv2);
  124.   triangle0.push_back(tv7);
  125.   triangles.push_back(triangle0);
  126.   //make triangle 15 and add it
  127.   triangle0.clear();
  128.   triangle0.push_back(tv8);
  129.   triangle0.push_back(tv10);
  130.   triangle0.push_back(tv9);
  131.   triangles.push_back(triangle0);
  132.   //make triangle 16 and add it
  133.   triangle0.clear();
  134.   triangle0.push_back(tv8);
  135.   triangle0.push_back(tv7);
  136.   triangle0.push_back(tv11);
  137.   triangles.push_back(triangle0);
  138.   //make triangle 17 and add it
  139.   triangle0.clear();
  140.   triangle0.push_back(tv5);
  141.   triangle0.push_back(tv4);
  142.   triangle0.push_back(tv10);
  143.   triangles.push_back(triangle0);
  144.   //make triangle 18 and add it
  145.   triangle0.clear();
  146.   triangle0.push_back(tv5);
  147.   triangle0.push_back(tv11);
  148.   triangle0.push_back(tv6);
  149.   triangles.push_back(triangle0);
  150.  
  151.   //so we have all of the vertices in there original coordinates
  152.   //with that, we subdivide each polygon into 4 new ones and
  153.   //do this n number of times
  154.   for( int i = 1; i < n; i++ ) {
  155.     vector< vector<Vector3> > tempTriangles;
  156.     for( int j = 0; j < triangles.size(); j++ ) {
  157.       //now we subdivide
  158.       vector<Vector3> triangle = triangles.at(j);
  159.       Vector3 two = triangle.at(2); //point 2 of the triangle
  160.       Vector3 one = triangle.at(1); //point 1 of the triangle
  161.       Vector3 zero = triangle.at(0); //point 0 of the triangle
  162.       Vector3 a( ((two+zero)*.5) ); //intermediate point a
  163.       Vector3 b( ((one+zero)*.5) ); //intermediate point b
  164.       Vector3 c( ((two+one)*.5) ); //intermediate point c
  165.  
  166.       //add first new triangle
  167.       triangle.clear();
  168.       triangle.push_back( two );
  169.       triangle.push_back( c );
  170.       triangle.push_back( a );
  171.       tempTriangles.push_back( triangle );
  172.  
  173.       //add second new triangle
  174.       triangle.clear();
  175.       triangle.push_back( c );
  176.       triangle.push_back( one );
  177.       triangle.push_back( b );
  178.       tempTriangles.push_back( triangle );
  179.  
  180.       //add third new triangle
  181.       triangle.clear();
  182.       triangle.push_back( c );
  183.       triangle.push_back( b );
  184.       triangle.push_back( a );
  185.       tempTriangles.push_back( triangle );
  186.  
  187.       //add fourth new triangle
  188.       triangle.clear();
  189.       triangle.push_back( a );
  190.       triangle.push_back( b );
  191.       triangle.push_back( zero );
  192.       tempTriangles.push_back( triangle );
  193.  
  194.     }
  195.     triangles = tempTriangles;
  196.   }
  197.  
  198.   //loop to normalize each triangle vertex
  199.   vector< vector<Vector3> > tempTriangles;
  200.   for( int i = 0; i < triangles.size(); i++ ) {
  201.     vector<Vector3> triangle = triangles.at(i);
  202.     Vector3 two = triangle.at(0);
  203.     Vector3 one = triangle.at(1);
  204.     Vector3 zero = triangle.at(2);
  205.  
  206.     //now normalize
  207.     two.normalize();
  208.     one.normalize();
  209.     zero.normalize();
  210.     two*=.5;
  211.     one*=.5;
  212.     zero*=.5;
  213.     Vector3 twoN = two;
  214.     Vector3 oneN = one;
  215.     Vector3 zeroN = zero;
  216.  
  217.     triangle.clear();
  218.     triangle.push_back(twoN);
  219.     triangle.push_back(oneN);
  220.     triangle.push_back(zeroN);
  221.     tempTriangles.push_back(triangle);
  222.  
  223.   }
  224.   triangles = tempTriangles;
  225.  
  226.   /*//so we have now created all the proper triangles
  227.   //now we must normalize, which requires all of the vertices
  228.   int totalV = verts.size();
  229.   for( int i = 0; i < totalV; i++ ) {
  230.     //compute the vector that goes from the origin to the vertex and normalize it
  231.     Vector3 temp = verts.at(i);
  232.     temp.normalize();
  233.     //multiply that normalized vector by .5 and add it to the origin to get the replacement vertex
  234.     temp*=.5;
  235.     Point3 np = origin+temp;
  236.     normVerts.push_back(np);
  237.     }*/
  238.  
  239.   //now iterate through, creating triangles in order
  240.   for( int i = 0; i < triangles.size(); i++ ) {
  241.     Point3 origin(0,0,0);
  242.     vector<Vector3> triangle = triangles.at(i);
  243.     Point3 a,b,c;
  244.     a = origin+triangle.at(0);
  245.     b = origin+triangle.at(1);
  246.     c = origin+triangle.at(2);
  247.     addTriangle(a,b,c);
  248.   }
  249.  
  250. }

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with @@


Remember me so that I can delete my post