Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 24, 2006, 1:24:39 PM (19 years ago)
Author:
bottac
Message:

Support for animated textures in bsp maps started.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/bsp_model/src/lib/graphics/importer/bsp_manager.cc

    r7596 r7801  
    3030#include <vector>
    3131#include <deque>
    32 
     32#include "movie_player.h"
    3333
    3434
     
    8888
    8989  this->cam = State::getCameraTargetNode()->getAbsCoor();
    90   //this->checkCollision(this->root, &this->cam);   //!< Test Collision Detection
     90 // this->checkCollision(this->root, &this->cam);   //!< Test Collision Detection
    9191  this->outputStartsOut = true;
    9292  this->outputAllSolid = false;
    9393  this->outputFraction = 1.0f;
    9494 
    95   //this->checkCollisionRay(this->root,0.0f,1.0f, &(State::getCameraTargetNode()->getLastAbsCoor()), &this->cam);
     95  this->checkCollisionRay(this->root,0.0f,1.0f, &(State::getCameraTargetNode()->getLastAbsCoor()), &this->cam);
    9696 
    9797  if(this->outputFraction != 1.0f || this->outputAllSolid ) this->drawDebugCube(&this->cam);
    9898
    99   if (false || viscluster < 0  || ((int *)(this->bspFile->header))[35] == 0 )  //!< if (sizeof(Visdata) == 0)
     99  if ( viscluster < 0  || ((int *)(this->bspFile->header))[35] == 0 )  //!< if (sizeof(Visdata) == 0)
    100100  {
    101101   
     
    112112      /** Do Frustum culling and draw 'em all **/
    113113      bool inFrustum = true;
    114       float dMins;
    115       float dMaxs;
     114
    116115      Vector dir;
    117116      dir.x = this->cam.x - State::getCameraTargetNode()->getLastAbsCoor().x;
     
    120119      float dist =  dir.x*this->cam.x +dir.y*this->cam.y +dir.z*this->cam.z;
    121120      //if(dist < 0) dist = -dist;
    122       dMins = dir.x*(float)curLeaf.mins[0] +dir.y*(float)curLeaf.mins[1] +dir.z*(float)curLeaf.mins[2] ;
    123       dMaxs = dir.x*(float)curLeaf.maxs[0] +dir.y*(float)curLeaf.maxs[1] +dir.z*(float)curLeaf.maxs[2] ;
     121      const float dMins = dir.x*(float)curLeaf.mins[0] +dir.y*(float)curLeaf.mins[1] +dir.z*(float)curLeaf.mins[2] - dist ;
     122      const float dMaxs = dir.x*(float)curLeaf.maxs[0] +dir.y*(float)curLeaf.maxs[1] +dir.z*(float)curLeaf.maxs[2] - dist ;
    124123     
    125       if(dMins < -100.0 && dMaxs < -100.0)
     124      if(dMins < -30.0 && dMaxs < -30.0)
    126125      {   
    127        continue;
     126       //continue;
     127      }
     128      if( (this->cam - Vector(curLeaf.mins[0],curLeaf.mins[1], curLeaf.mins[2])).len() > 3000  && (this->cam - Vector(curLeaf.maxs[0],curLeaf.maxs[1], curLeaf.maxs[2])).len() > 3000)
     129      {
     130        //continue;
    128131      }
    129132   
     
    176179        const float dMaxs = dir.x*(float)curLeaf.maxs[0] +dir.y*(float)curLeaf.maxs[1] +dir.z*(float)curLeaf.maxs[2] - dist;
    177180     
    178         if(dMins < -100.0 && dMaxs < -100.0)
     181        if(dMins < -150.0 && dMaxs < -150.0)
    179182        {   
    180183        continue;
     
    208211    this->trasparent.pop_back();
    209212  }
    210 
     213  glActiveTextureARB(GL_TEXTURE1_ARB);
     214  glBindTexture(GL_TEXTURE_2D, this->bspFile->whiteLightMap);
     215  glEnable(GL_TEXTURE_2D);
    211216
    212217}//draw
     
    220225  int stride = sizeof(BspVertex);  // sizeof(Vertex)
    221226  int offset    = curFace.vertex;
    222 
     227  if (curFace.effect != -1) return;
    223228  // PRINTF(0)("BSP Manager: ");
    224229  // PRINTF(0)("BSP Manager: type: %i  \n", curFace.texture);
     
    229234    return;
    230235  }
    231   if(curFace.type == 3) return;
    232   //  if(this->bspFile->Materials[curFace.texture] != NULL)
     236  if(curFace.type != 1) return;
     237  if((char*)(this->bspFile->textures)[curFace.texture*72]== 0) return;
    233238
    234239  if(this->lastTex != curFace.texture) {
     240    if(this->bspFile->Materials[curFace.texture].animated)
     241    {
     242      glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_COLOR);
     243      glEnable(GL_BLEND);
     244      if(this->bspFile->Materials[curFace.texture].aviMat->getStatus() == 2) this->bspFile->Materials[curFace.texture].aviMat->start(0);
     245      this->bspFile->Materials[curFace.texture].aviMat->tick(0.005);
     246      int n =  this->bspFile->Materials[curFace.texture].aviMat->getTexture();
     247      glActiveTextureARB(GL_TEXTURE0_ARB);
     248      glBindTexture(GL_TEXTURE_2D, n );
     249      glDisable(GL_BLEND);
     250    }
     251    else
     252    {
    235253    this->bspFile->Materials[curFace.texture].mat->select();
    236254    this->lastTex = curFace.texture;
     255    }
    237256  }
    238257
     
    247266  }
    248267
     268  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     269 
    249270 // glColor4f(3.0,3.0,3.0,1.0);
    250271  glEnableClientState(GL_VERTEX_ARRAY );
     
    258279  glClientActiveTextureARB(GL_TEXTURE0_ARB);
    259280  glTexCoordPointer(2, GL_FLOAT, stride, &(curVertex[offset].texcoord[0]));
    260   glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     281  //glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    261282
    262283  glClientActiveTextureARB(GL_TEXTURE1_ARB);
     
    273294  glDisableClientState(GL_TEXTURE1_ARB);
    274295  glDisableClientState(GL_VERTEX_ARRAY );
    275   //glDisableClientState(GL_TEXTURE_COORD_ARRAY );
     296  glDisableClientState(GL_TEXTURE_COORD_ARRAY );
    276297  glDisableClientState(GL_NORMAL_ARRAY );
    277298  // glDisableClientState(GL_COLOR_ARRAY);
     
    330351    this->lastTex = Face->texture;
    331352  }
    332 
     353  if (Face->effect != -1) return;
    333354
    334355
     
    344365  //glColor4f(3.0,3.0,3.0,1.0);
    345366
    346   //glEnable( GL_AUTO_NORMAL);
     367  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
     368  glEnable( GL_AUTO_NORMAL);
    347369  glEnableClientState(GL_VERTEX_ARRAY );
    348370  glEnableClientState(GL_TEXTURE_COORD_ARRAY );
    349   for(int i = 0; i < Face->n_meshverts  ; i++) {
    350     glFrontFace(GL_CW);
     371  for(int i = Face->n_meshverts -1; i >=0   ; i--) {
     372   //glFrontFace(GL_CW);
    351373    //PRINTF(0)("BSP Manager: Face->size[0]: %i . \n", Face->size[0]);
    352374
    353375
    354     glEnableClientState(GL_NORMAL_ARRAY );
     376    //glEnableClientState(GL_NORMAL_ARRAY );
    355377
    356378    glVertexPointer(3, GL_FLOAT,44, &((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).position[0]));
     
    358380
    359381    glClientActiveTextureARB(GL_TEXTURE0_ARB);
     382    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    360383    glTexCoordPointer(2, GL_FLOAT, 44, &((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).texcoord[0][0]));
    361     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     384 
    362385
    363386
     
    367390
    368391
    369     glNormalPointer( GL_FLOAT, 44,&((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).normal[0]) );
    370 
    371 
    372 
    373 
    374     for(int row=0; row<7; ++row) {
     392  //  glNormalPointer( GL_FLOAT, 44,&((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).normal[0]) );
     393
     394
     395
     396
     397    for(int row=6; row>=0; --row) {
    375398      glDrawElements(GL_TRIANGLE_STRIP, 2*(8), GL_UNSIGNED_INT,
    376399                     & (     (((GLuint*)  (this->bspFile->patchIndexes))[7*8*2*(Face->meshvert+i)+ row*2*8]  ))  );
    377400    }
    378401
    379     glFrontFace(GL_CCW);
     402    //glFrontFace(GL_CCW);
    380403  }
    381404  glDisableClientState(GL_TEXTURE0_ARB);
    382405  glDisableClientState(GL_TEXTURE1_ARB);
    383   //glDisable(GL_AUTO_NORMAL);
     406  glDisable(GL_AUTO_NORMAL);
    384407  glDisableClientState(GL_VERTEX_ARRAY );
    385408  glDisableClientState(GL_TEXTURE_COORD_ARRAY );
    386409
    387   glBegin(GL_QUADS);
    388 
    389   glEnd();
     410
    390411}
    391412
Note: See TracChangeset for help on using the changeset viewer.