Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void SphericalTerrainExample::getrenderlist(quadtreenode &input){ //The big one: optimisation function
- rendernums++;
- //player pos:
- GameConnection* connection = GameConnection::getConnectionToServer();
- Point3F playerpos = connection->getCameraObject()->getPosition();
- Point3F obj = Point3F(0.185103, -0.072997, 1.035771);
- mObjToWorld.mulP(obj);
- Point3F p1 = input.centerpoint;
- p1*=100;
- Point3F p2 = playerpos;
- F32 xd = p2.x-p1.x;
- F32 yd = p2.y-p1.y;
- F32 zd = p2.z-p1.z;
- F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
- if(input.centerpoint.x != -99){
- Point3F vec = input.centerpoint-playerpos;
- Point3F p1 = input.centerpoint;
- p1*=100;
- Point3F p2 = playerpos;
- F32 xd = p2.x-p1.x;
- F32 yd = p2.y-p1.y;
- F32 zd = p2.z-p1.z;
- F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
- }
- S32 tierval = (tiercount-1)-pcount;
- if(tierval <1)
- tierval = 1;
- int blocksize = maxsizeofquadtree/divisormap[tierval];
- //instead of using centerpoint, get the closest point to the player from all of the points in this node:
- int closestp = 99999;
- int closestnodep = 0;
- //int nod = 0;
- for(int i = 0;i<4;i++){
- //get the distance between the player and each point, then return that distance.
- F32 tempdist = dista(playerpos,input.polygonpoints[i]*100);
- if(tempdist < closestp){
- closestp = tempdist;
- closestnodep = i;
- // nod = input.id;
- }
- }
- Point3F nodescaled = input.polygonpoints[closestnodep]*100;//input.centerpoint*100;
- // Point3F nodescaled = input.centerpoint*100;
- int divisor = divisormap[pcount];
- // int blocksize = maxresolution/divisormap[tiernum];
- F32 d2 = blocksize/2;
- VectorF rangevec = playerpos - nodescaled;
- VectorF rangevec2 = nodescaled - playerpos;
- rangevec *= d2;
- F32 finaldist = closestp;//dista(playerpos,rangevec);
- F32 finaldist2 = dista(playerpos,rangevec2);
- //if(finaldist > 9999)
- if(finaldist < 1 ){//|| finaldist > 999){
- finaldist = 999;//999;
- Con::printf("NULL");
- }
- int pc3 = tiercount-1;
- //if(input.childnodes.size() > 0)
- {
- for(int i = 0;i<4;i++)
- {
- {
- //if(input.childnodes.size() > 0)
- // getrenderlist(input.childnodes[i]);
- if(finaldist < 5000)
- {
- if(finaldist < nodidclosestdist){
- nodidclosestdist = finaldist;
- nodidclosest = input.id;
- Con::printf("CLOSEST %d %f ", nodidclosest,nodidclosest);
- }
- // Con::printf("PATTERN: %d %d %d %d %f",input.id,pcount,pcount2, pcount4, finaldist);
- if(input.childnodes.size() > 0){
- getrenderlist(input.childnodes[i]);
- }else
- {
- // if(input.childnodes.size() > 0)
- // getrenderlist(input.childnodes[i]);
- tempquadtreenode node1 = tempquadtreenode(input.polygonpoints[0],input.polygoncolors[0]);
- tempquadtreenode node2 = tempquadtreenode(input.polygonpoints[1],input.polygoncolors[1]);
- tempquadtreenode node3 = tempquadtreenode(input.polygonpoints[2],input.polygoncolors[2]);
- tempquadtreenode node4 = tempquadtreenode(input.polygonpoints[3],input.polygoncolors[3]);
- tempquadtreenode node5 = tempquadtreenode(input.polygonpoints[0],input.polygoncolors[0]);
- tempquadtreenode node6 = tempquadtreenode(input.polygonpoints[2],input.polygoncolors[2]);
- Point3F vec = input.point-playerpos;
- Point3F p1 = input.point;
- p1*=100;
- Point3F p2 = playerpos;
- F32 xd = p2.x-p1.x;
- F32 yd = p2.y-p1.y;
- F32 zd = p2.z-p1.z;
- //F32 dist = sqrt((xd*xd) + (yd*yd) + (zd*zd));
- // if(dist < closestdist){
- // closestdist = dist;
- // closestnode = input.point;
- // }
- if(input.id != selectnod){
- renderlist.push_back(node1);
- renderlist.push_back(node2);
- renderlist.push_back(node3);
- renderlist.push_back(node4);
- renderlist.push_back(node5);
- renderlist.push_back(node6);
- }
- }
- pcount++;
- pcount2++;
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment