Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10519 in orxonox.OLD for trunk/src/lib/graphics


Ignore:
Timestamp:
Jan 30, 2007, 9:51:21 PM (18 years ago)
Author:
patrick
Message:

emitter fix

Location:
trunk/src/lib/graphics/importer/bsp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/graphics/importer/bsp/bsp_manager.cc

    r10337 r10519  
    2121
    2222
     23#include "limits.h"
    2324#include "vector.h"
    2425#include "bsp_file.h"
     
    300301
    301302  // now sort the transparent faces in the right order
    302   int size = this->trasparent.size();
    303 
    304   // bubble sort
    305   bool hasSwapped = true;
    306   Vector v1, v2;
    307 
    308   while( hasSwapped)
    309   {
    310     hasSwapped = false;
    311 
    312     for( int i = 0; i < size - 1; i++)
    313     {
    314       // sorting test
    315       face& fac1 =  (this->bspFile->faces)[this->trasparent[i]];
    316       face& fac2 =  (this->bspFile->faces)[this->trasparent[i+1]];
    317 
    318       // get center of face 1
    319       const BspVertex* curVertex = (BspVertex *) this->bspFile->vertice;
    320 
    321       // assign the values of the vertices
    322       v1(curVertex[fac1.vertex].position[0], curVertex[fac1.vertex].position[1], curVertex[fac1.vertex].position[2]);
    323       v2(curVertex[fac2.vertex].position[0], curVertex[fac2.vertex].position[1], curVertex[fac2.vertex].position[2]);
    324       // relativly to observer
    325       v1 = this->cam - v1;
    326       v2 = this->cam - v2;
    327 
    328 
    329 
    330       // swap if necessary
    331       if( v1.len() - v2.len() > 1)
     303  if (this->sortTransparency == 1) {
     304      int size = this->trasparent.size();
     305     
     306      // bubble sort
     307      bool hasSwapped = true;
     308      Vector v1, v2;
     309
     310      // initialize distance array
     311      float * distToPlayer = new float [size];
     312      for (int i = 0; i < size; i++)
    332313      {
    333         // swap elements
    334         int tmp = this->trasparent[i+1];
    335         this->trasparent[i+1] = this->trasparent[i];
    336         this->trasparent[i] = tmp;
    337 
    338         //printf( "has swapped: %d\n", i );
    339 
    340         //v1.debug();
    341         //v2.debug();
    342         hasSwapped = true;
     314          face& fac1 =  (this->bspFile->faces)[this->trasparent[i]];
     315//          face& fac2 =  (this->bspFile->faces)[this->trasparent[i+1]];
     316
     317          // get center of face 1
     318          const BspVertex* curVertex = (BspVertex *) this->bspFile->vertice;
     319
     320          if (this->sortTransparencyMore == 1)
     321          {
     322              // assign the values of the vertices
     323              float maxDist = 0;
     324              float curDist = 0;
     325              int maxVert = fac1.vertex;
     326              for (int v = 0; v < fac1.n_vertexes; v++)
     327              {
     328                    v1(curVertex[fac1.vertex + v].position[0], curVertex[fac1.vertex + v].position[1], curVertex[fac1.vertex + v].position[2]);
     329                    curDist = (this->cam - v1).len();
     330                    if (curDist > maxDist)
     331                    {
     332                        maxDist = curDist;
     333                        maxVert = fac1.vertex + v;
     334                    }
     335              }
     336              v1(curVertex[maxVert].position[0], curVertex[maxVert].position[1], curVertex[maxVert].position[2]);
     337          }
     338          else
     339          {
     340              v1(curVertex[fac1.vertex].position[0], curVertex[fac1.vertex].position[1], curVertex[fac1.vertex].position[2]);
     341          }
     342
     343          // relativly to observer
     344          v1 = this->cam - v1;
     345
     346          // save in array
     347          distToPlayer[i] = v1.len();
    343348      }
    344     }
    345   }
    346   //printf("hasSwapped == false\n");
    347 
     349
     350      while( hasSwapped)
     351      {
     352        hasSwapped = false;
     353
     354        for( int i = 0; i < size - 1; i++)
     355        {
     356/*
     357          // sorting test
     358          face& fac1 =  (this->bspFile->faces)[this->trasparent[i]];
     359          face& fac2 =  (this->bspFile->faces)[this->trasparent[i+1]];
     360
     361          // get center of face 1
     362          const BspVertex* curVertex = (BspVertex *) this->bspFile->vertice;
     363         
     364          if (this->sortTransparencyMore == 1)
     365          {
     366              // assign the values of the vertices
     367              float maxDist = 0;
     368              float curDist = 0;
     369              int maxVert = fac1.vertex;
     370              for (int v = 0; v < fac1.n_vertexes; v++)
     371              {
     372                    v1(curVertex[fac1.vertex + v].position[0], curVertex[fac1.vertex + v].position[1], curVertex[fac1.vertex + v].position[2]);
     373                    curDist = (this->cam - v1).len();
     374                    if (curDist > maxDist)
     375                    {
     376                        maxDist = curDist;
     377                        maxVert = fac1.vertex + v;
     378                    }
     379              }
     380              v1(curVertex[maxVert].position[0], curVertex[maxVert].position[1], curVertex[maxVert].position[2]);
     381
     382              maxDist = 0;
     383              curDist = 0;
     384              maxVert = fac1.vertex;
     385              for (int v = 0; v < fac2.n_vertexes; v++)
     386              {
     387                    v2(curVertex[fac2.vertex + v].position[0], curVertex[fac2.vertex + v].position[1], curVertex[fac2.vertex + v].position[2]);
     388                    curDist = (this->cam - v2).len();
     389                    if (curDist > maxDist)
     390                    {
     391                        maxDist = curDist;
     392                        maxVert = fac2.vertex + v;
     393                    }
     394              }
     395              v2(curVertex[maxVert].position[0], curVertex[maxVert].position[1], curVertex[maxVert].position[2]);
     396          }
     397          else
     398          {
     399              v1(curVertex[fac1.vertex].position[0], curVertex[fac1.vertex].position[1], curVertex[fac1.vertex].position[2]);
     400              v2(curVertex[fac2.vertex].position[0], curVertex[fac2.vertex].position[1], curVertex[fac2.vertex].position[2]);
     401          }
     402
     403          // relativly to observer
     404          v1 = this->cam - v1;
     405          v2 = this->cam - v2;
     406
     407
     408*/
     409          // swap if necessary
     410//          if( v1.len() - v2.len() > 1)
     411          if( distToPlayer[i] - distToPlayer[i+1] > 1)
     412          {
     413            // swap elements
     414            float tmp1 = distToPlayer[i+1];
     415            distToPlayer[i+1] = distToPlayer[i];
     416            distToPlayer[i] = tmp1;
     417           
     418            int tmp2 = this->trasparent[i+1];
     419            this->trasparent[i+1] = this->trasparent[i];
     420            this->trasparent[i] = tmp2;
     421
     422            //printf( "has swapped: %d\n", i );
     423
     424            //v1.debug();
     425            //v2.debug();
     426            hasSwapped = true;
     427          }
     428        }
     429      }
     430      //printf("hasSwapped == false\n");
     431  }
    348432
    349433
  • trunk/src/lib/graphics/importer/bsp/bsp_manager.h

    r10314 r10519  
    7878                                                      If a collision has been detected, the collides-function of worldEntity will be called.*/
    7979
     80  int sortTransparency;              //!< sort transparent textures
     81  int sortTransparencyMore;          //!< sort transparent textures better
     82
    8083private:
    8184  // collision functions
Note: See TracChangeset for help on using the changeset viewer.