Guest User

Untitled

a guest
Dec 25th, 2015
75
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void SphericalTerrainExample::getrenderlist(quadtreenode &input){ //The big one: optimisation function
  2.     rendernums++;
  3.  
  4.     //player pos:
  5.  
  6.     GameConnection* connection = GameConnection::getConnectionToServer();
  7.     Point3F playerpos = connection->getCameraObject()->getPosition();
  8.  
  9.     Point3F obj = Point3F(0.185103, -0.072997, 1.035771);
  10.     mObjToWorld.mulP(obj);  
  11.  
  12.     Point3F p1 = input.centerpoint;
  13.     p1*=100;
  14.     Point3F p2 = playerpos;
  15.  
  16.     F32 xd = p2.x-p1.x;
  17.     F32 yd = p2.y-p1.y;
  18.     F32 zd = p2.z-p1.z;
  19.  
  20.     F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
  21.  
  22.     if(input.centerpoint.x != -99){
  23.         Point3F vec = input.centerpoint-playerpos;
  24.  
  25.         Point3F p1 = input.centerpoint;
  26.         p1*=100;
  27.         Point3F p2 = playerpos;
  28.  
  29.         F32 xd = p2.x-p1.x;
  30.         F32 yd = p2.y-p1.y;
  31.         F32 zd = p2.z-p1.z;
  32.  
  33.         F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
  34.     }
  35.  
  36.     S32 tierval = (tiercount-1)-pcount;
  37.     if(tierval <1)
  38.         tierval = 1;
  39.  
  40.     int blocksize = maxsizeofquadtree/divisormap[tierval];
  41.  
  42.     //instead of using centerpoint, get the closest point to the player from all of the points in this node:
  43.     int closestp = 99999;
  44.     int closestnodep = 0;
  45.  
  46.     //int nod = 0;
  47.  
  48.     for(int i = 0;i<4;i++){
  49.         //get the distance between the player and each point, then return that distance.
  50.         F32 tempdist = dista(playerpos,input.polygonpoints[i]*100);
  51.  
  52.         if(tempdist < closestp){
  53.             closestp = tempdist;
  54.             closestnodep = i;
  55.             //  nod = input.id;
  56.         }
  57.     }
  58.  
  59.  
  60.     Point3F nodescaled = input.polygonpoints[closestnodep]*100;//input.centerpoint*100;
  61.  
  62.     //  Point3F nodescaled = input.centerpoint*100;
  63.  
  64.     int divisor = divisormap[pcount];
  65.  
  66.     //  int blocksize = maxresolution/divisormap[tiernum];
  67.     F32 d2 = blocksize/2;
  68.  
  69.     VectorF rangevec = playerpos - nodescaled;
  70.     VectorF rangevec2 = nodescaled - playerpos;
  71.  
  72.     rangevec *= d2;
  73.  
  74.     F32 finaldist = closestp;//dista(playerpos,rangevec);
  75.     F32 finaldist2 = dista(playerpos,rangevec2);
  76.  
  77.     //if(finaldist > 9999)
  78.     if(finaldist < 1 ){//|| finaldist > 999){
  79.         finaldist = 999;//999;
  80.         Con::printf("NULL");
  81.     }
  82.  
  83.     int pc3 = tiercount-1;
  84.  
  85.     //if(input.childnodes.size() > 0)
  86.     {  
  87.  
  88.         for(int i = 0;i<4;i++)
  89.         {
  90.  
  91.  
  92.             {
  93.  
  94.                 //if(input.childnodes.size() > 0)
  95.                 //  getrenderlist(input.childnodes[i]);
  96.  
  97.  
  98.                 if(finaldist < 5000)
  99.                 {
  100.  
  101.                     if(finaldist < nodidclosestdist){
  102.                         nodidclosestdist = finaldist;
  103.                         nodidclosest = input.id;
  104.                         Con::printf("CLOSEST %d %f ", nodidclosest,nodidclosest);
  105.                     }
  106.  
  107.                     //  Con::printf("PATTERN: %d %d %d %d %f",input.id,pcount,pcount2, pcount4, finaldist);
  108.                     if(input.childnodes.size() > 0){
  109.                         getrenderlist(input.childnodes[i]);
  110.                     }else
  111.                     {
  112.  
  113.                         //      if(input.childnodes.size() > 0)
  114.                         //  getrenderlist(input.childnodes[i]);
  115.  
  116.  
  117.                         tempquadtreenode node1 =    tempquadtreenode(input.polygonpoints[0],input.polygoncolors[0]);
  118.                         tempquadtreenode node2 =    tempquadtreenode(input.polygonpoints[1],input.polygoncolors[1]);
  119.                         tempquadtreenode node3 =    tempquadtreenode(input.polygonpoints[2],input.polygoncolors[2]);
  120.                         tempquadtreenode node4 =    tempquadtreenode(input.polygonpoints[3],input.polygoncolors[3]);
  121.  
  122.                         tempquadtreenode node5 =    tempquadtreenode(input.polygonpoints[0],input.polygoncolors[0]);
  123.                         tempquadtreenode node6 =    tempquadtreenode(input.polygonpoints[2],input.polygoncolors[2]);
  124.  
  125.  
  126.                         Point3F vec = input.point-playerpos;
  127.  
  128.  
  129.                         Point3F p1 = input.point;
  130.                         p1*=100;
  131.                         Point3F p2 = playerpos;
  132.  
  133.                         F32 xd = p2.x-p1.x;
  134.                         F32 yd = p2.y-p1.y;
  135.                         F32 zd = p2.z-p1.z;
  136.  
  137.                         //F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
  138.  
  139.                         //  if(dist < closestdist){
  140.                         //      closestdist = dist;
  141.                         //      closestnode = input.point;
  142.                         //  }
  143.  
  144.                         if(input.id != selectnod){
  145.  
  146.                             renderlist.push_back(node1);
  147.                             renderlist.push_back(node2);
  148.                             renderlist.push_back(node3);
  149.                             renderlist.push_back(node4);
  150.  
  151.                             renderlist.push_back(node5);
  152.                             renderlist.push_back(node6);
  153.                         }
  154.  
  155.                     }
  156.  
  157.                     pcount++;
  158.                     pcount2++;
  159.                 }
  160.  
  161.             }
  162.  
  163.         }
  164.  
  165.     }
  166.  
  167. }
RAW Paste Data Copied