Ignore:
Timestamp:
03/17/06 19:36:46 (19 years ago)
Author:
igarcia
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/BBCBillboardCloudUVMapper.cpp

    r699 r709  
     1 
    12 
    23#include "BBCBillboardCloudUVMapper.h" 
     
    78namespace BBC { 
    89 
    9 void BillboardCloudUVMapper::initialize()  
    10 { 
    11         IMG::Box2d *box = new IMG::Box2d; 
    12         IMG::NodeBsp *node = new IMG::NodeBsp; 
    13         box->SetBoundBox(0, 0, mTextureAtlasWidth, mTextureAtlasHeight); 
    14         node->SetBound(box); 
    15         mBsp.SetRoot(node);      
     10BillboardCloudUVMapper::BillboardCloudUVMapper()  
     11{ 
     12} 
     13 
     14BillboardCloudUVMapper::~BillboardCloudUVMapper() 
     15{ 
     16        clear();  
     17} 
     18 
     19void BillboardCloudUVMapper::initialize() 
     20{ 
     21} 
     22 
     23void BillboardCloudUVMapper::clear()  
     24{ 
     25        Ogre::LogManager::getSingleton().logMessage("Init.BSP:" + Ogre::StringConverter::toString(getNumBsp())); 
     26 
     27        while (getNumBsp() > 0) 
     28        { 
     29                removeBsp(getNumBsp()-1); 
     30        } 
     31 
     32        Ogre::LogManager::getSingleton().logMessage("Clear.BSP:" + Ogre::StringConverter::toString(getNumBsp())); 
     33 
     34        Ogre::LogManager::getSingleton().logMessage("Init.CL:" + Ogre::StringConverter::toString(getNumClusterLists())); 
     35 
     36        //while (getNumClusterLists() > 0) 
     37        //{ 
     38        //      removeBsp(getNumClusterLists()-1); 
     39        //} 
     40        mClusterLists.clear(); 
     41 
     42        Ogre::LogManager::getSingleton().logMessage("Clear.CL:" + Ogre::StringConverter::toString(getNumClusterLists())); 
     43} 
     44 
     45unsigned int BillboardCloudUVMapper::getNumClusterLists() 
     46{ 
     47        return mClusterLists.size(); 
     48} 
     49 
     50unsigned int BillboardCloudUVMapper::getNumBsp() 
     51{ 
     52        return mBspList.size(); 
     53} 
     54 
     55void BillboardCloudUVMapper::addBsp(IMG::Bsp *bsp) 
     56{ 
     57        mBspList.push_back(bsp); 
     58} 
     59 
     60IMG::Bsp* BillboardCloudUVMapper::getBsp(unsigned int iBsp) 
     61{ 
     62        return mBspList[iBsp]; 
     63} 
     64 
     65void BillboardCloudUVMapper::removeBsp(unsigned int iBsp) 
     66{ 
     67        IMG::Bsp *bsp = mBspList[iBsp]; 
     68        mBspList.erase(mBspList.begin() + iBsp); 
     69        delete bsp; 
     70} 
     71 
     72void BillboardCloudUVMapper::addClusterList(IMG::ClusterList *clusterList) 
     73{ 
     74        mClusterLists.push_back(clusterList); 
     75} 
     76 
     77IMG::ClusterList* BillboardCloudUVMapper::getClusterList(unsigned int iClusterList) 
     78{ 
     79        return mClusterLists[iClusterList]; 
     80} 
     81 
     82void BillboardCloudUVMapper::removeClusterList(unsigned int iClusterList) 
     83{ 
     84        //mClusterLists.erase(mClusterLists.begin() + iClusterList); 
    1685} 
    1786 
     
    56125} 
    57126 
    58 void BillboardCloudUVMapper::generateTextureAtlasTextureCoords(bool mergeBillboards)  
     127void BillboardCloudUVMapper::addTextureAtlasTextureCoords(bool mergeBillboards, bool groupedBillboards, unsigned int numGeneratedBillboardClouds, unsigned int iBillboardGroup) 
     128{ 
     129        unsigned int iUniqueVertex = 0; 
     130 
     131        Ogre::LogManager::getSingleton().logMessage("iBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds) + "-" + "iBBCG:" + Ogre::StringConverter::toString(iBillboardGroup)); 
     132 
     133        Ogre::LogManager::getSingleton().logMessage("SizeCLList:" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 
     134 
     135        IMG::Cluster *cluster = getClusterList(iBillboardGroup)->Get(getClusterList(iBillboardGroup)->GetSize()-1);              
     136        IMG::Box2d *box = cluster->GetBspNodeBound(); 
     137        Ogre::Vector2 max = box->GetMaximum(); 
     138        Ogre::Vector2 min = box->GetMinimum(); 
     139        Ogre::LogManager::getSingleton().logMessage("Max:" + Ogre::StringConverter::toString(Ogre::Vector3(max[0],max[1],0)) +  
     140                "\tMin:" + Ogre::StringConverter::toString(Ogre::Vector3(min[0],min[1],0)) +  
     141                "\tSize(" + Ogre::StringConverter::toString(max[0]-min[0]) + 
     142                "," + Ogre::StringConverter::toString(max[1]-min[1]) + ")"); 
     143 
     144        SubEntity *subEntity;                                                                                            
     145         
     146        Ogre::Vector2 texCoords01,texCoords02,texCoords03,texCoords04; 
     147        texCoords01[0] = min[0] / mTextureAtlasWidth; 
     148        texCoords01[1] = min[1] / mTextureAtlasHeight; 
     149 
     150        texCoords02[0] = max[0] / mTextureAtlasWidth; 
     151        texCoords02[1] = min[1] / mTextureAtlasHeight; 
     152 
     153        texCoords03[0] = max[0] / mTextureAtlasWidth; 
     154        texCoords03[1] = max[1] / mTextureAtlasHeight; 
     155 
     156        texCoords04[0] = min[0] / mTextureAtlasWidth; 
     157        texCoords04[1] = max[1] / mTextureAtlasHeight; 
     158         
     159        if (groupedBillboards) 
     160        { 
     161                Ogre::LogManager::getSingleton().logMessage("DontMerge"); 
     162                subEntity = subEntity = mBillboardCloud->getEntity()->getSubEntity(iBillboardGroup);                             
     163                 
     164                // Face A 
     165                //(0,0,0); 
     166                //(1,0,0); 
     167                //(1,1,0); 
     168                subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
     169                subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 
     170                subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
     171 
     172                Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     173                Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 
     174                Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     175 
     176                subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 
     177                subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 
     178                subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 
     179 
     180                // Face B 
     181                //(1,1,0); 
     182                //(0,1,0); 
     183                //(0,0,0); 
     184                subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
     185                subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 
     186                subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
     187 
     188                Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     189                Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 
     190                Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     191 
     192                subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 
     193                subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 
     194                subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 
     195 
     196                iUniqueVertex = iUniqueVertex + 6; 
     197        } 
     198        else 
     199        { 
     200                if (!mergeBillboards) 
     201                { 
     202                        Ogre::LogManager::getSingleton().logMessage("DontMerge"); 
     203 
     204                        subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds); 
     205                        subEntity->addTextureCoordSet(2); 
     206                        subEntity->enableVertexColours(true); 
     207                        // Face A 
     208                        //(0,0,0); 
     209                        //(1,0,0); 
     210                        //(1,1,0); 
     211 
     212                        subEntity->setTexCoord(0, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1], 0)); 
     213                        subEntity->setTexCoord(1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1], 0)); 
     214                        subEntity->setTexCoord(2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1], 0)); 
     215 
     216                        Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     217                        Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 
     218                        Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     219 
     220                        subEntity->setVertexColour(0, subEntityColour01.getAsRGBA()); 
     221                        subEntity->setVertexColour(1, subEntityColour02.getAsRGBA()); 
     222                        subEntity->setVertexColour(2, subEntityColour03.getAsRGBA()); 
     223 
     224                        // Face B 
     225                        //(1,1,0); 
     226                        //(0,1,0); 
     227                        //(0,0,0); 
     228                        subEntity->setTexCoord(3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
     229                        subEntity->setTexCoord(4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 
     230                        subEntity->setTexCoord(5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
     231 
     232                        Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     233                        Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 
     234                        Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     235 
     236                        subEntity->setVertexColour(3, subEntityColour04.getAsRGBA()); 
     237                        subEntity->setVertexColour(4, subEntityColour05.getAsRGBA()); 
     238                        subEntity->setVertexColour(5, subEntityColour06.getAsRGBA()); 
     239 
     240                } 
     241                else 
     242                { 
     243                        Ogre::LogManager::getSingleton().logMessage("Merge"); 
     244 
     245                        subEntity = mBillboardCloud->getEntity()->getSubEntity(0);                               
     246                         
     247                        // Face A 
     248                        //(0,0,0); 
     249                        //(1,0,0); 
     250                        //(1,1,0); 
     251                        subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
     252                        subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 
     253                        subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
     254 
     255                        Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     256                        Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 
     257                        Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     258 
     259                        subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 
     260                        subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 
     261                        subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 
     262 
     263                        // Face B 
     264                        //(1,1,0); 
     265                        //(0,1,0); 
     266                        //(0,0,0); 
     267                        subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
     268                        subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 
     269                        subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
     270 
     271                        Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
     272                        Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 
     273                        Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
     274 
     275                        subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 
     276                        subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 
     277                        subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 
     278 
     279                        iUniqueVertex = iUniqueVertex + 6; 
     280                } 
     281                Ogre::LogManager::getSingleton().logMessage("EndAdd"); 
     282        } 
     283} 
     284 
     285void BillboardCloudUVMapper::addTextureInBsp(unsigned int iBillboardGroup, unsigned int iBillboard) 
     286{ 
     287        IMG::NodeBsp *nodeDest; 
     288        IMG::Cluster cluster; 
     289        Ogre::LogManager::getSingleton().logMessage("w:" + Ogre::StringConverter::toString(mTextureWidth)); 
     290        Ogre::LogManager::getSingleton().logMessage("h:" + Ogre::StringConverter::toString(mTextureHeight)); 
     291        nodeDest = getBsp(iBillboardGroup)->Insert(mTextureWidth,mTextureHeight,iBillboard); 
     292         
     293        cluster.SetBspNodeBound(nodeDest->GetBound()); 
     294        //cluster.Finish(); 
     295        getClusterList(iBillboardGroup)->Insert(&cluster);       
     296} 
     297 
     298void BillboardCloudUVMapper::generateTextureAtlasTextureCoords(bool mergeBillboards, bool groupedBillboards, unsigned int numGroups)  
    59299{        
     300        unsigned int numBillboardGroups; 
     301        bool enabledTextureCoordSet = false; 
     302        unsigned int numGeneratedBillboardClouds = 0; 
    60303 
    61304        for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 
    62305        { 
    63                 Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(iBillboard)); 
     306                Billboard *billboard = mBillboardCloud->getBillboard(iBillboard);                
     307                EntityCluster *entityCluster = billboard->getBillboardClusterData()->getEntityCluster(); 
     308 
     309                if (entityCluster->getNumEntitiesClusterData() > 0) 
     310                { 
     311                        if (mergeBillboards) 
     312                        { 
     313                                if (!enabledTextureCoordSet) 
     314                                { 
     315                                        SubEntity *subEntity = mBillboardCloud->getEntity()->getSubEntity(0);    
     316                                        subEntity->addTextureCoordSet(2); 
     317                                        subEntity->enableVertexColours(true); 
     318                                        enabledTextureCoordSet = true; 
     319                                } 
     320                        } 
     321                        else 
     322                        { 
     323                                if (groupedBillboards) 
     324                                { 
     325                                        SubEntity *subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds);  
     326                                        subEntity->addTextureCoordSet(2); 
     327                                        subEntity->enableVertexColours(true); 
     328                                } 
     329                        } 
     330 
     331                        numGeneratedBillboardClouds++; 
     332                } 
     333        } 
     334 
     335        if (groupedBillboards) 
     336        { 
     337                numBillboardGroups = numGroups; 
     338        } 
     339        else 
     340        { 
     341                if (mergeBillboards) 
     342                { 
     343                        numBillboardGroups = 1; 
     344                } 
     345                else // (!mergeBillboards) 
     346                { 
     347                        numBillboardGroups = 1; 
     348                } 
     349        } 
     350         
     351        unsigned int iBillboardsInGroup = 0; 
     352        unsigned int numberBillboardsEachGroup = numGeneratedBillboardClouds / numGroups; 
     353        unsigned int numberBillboardsAddedFirstGroup = numGeneratedBillboardClouds % numGroups; 
     354        numGeneratedBillboardClouds = 0; 
     355        unsigned int iBillboardGroup; 
     356        for (iBillboardGroup = 0; iBillboardGroup < numBillboardGroups; iBillboardGroup++) 
     357        { 
     358                 
     359                IMG::NodeBsp *node = new IMG::NodeBsp; 
     360                IMG::Bsp *bsp = new IMG::Bsp(); 
     361                IMG::Box2d *box = new IMG::Box2d; 
     362                IMG::ClusterList *clusterList = new IMG::ClusterList(); 
     363 
     364                box->SetBoundBox(0, 0, mTextureAtlasWidth, mTextureAtlasHeight); 
     365                node->SetBound(box); 
     366                bsp->SetRoot(node);      
     367                addBsp(bsp); 
     368                addClusterList(clusterList); 
     369 
     370        } 
     371 
     372        iBillboardGroup = 0; 
     373        for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 
     374        { 
     375                Ogre::LogManager::getSingleton().logMessage("id:" + Ogre::StringConverter::toString(mBillboardCloud->getBillboard(iBillboard)->getBillboardHandle())); 
     376 
    64377                BillboardClusterData *billboardClusterData = mBillboardCloud->getBillboard(iBillboard)->getBillboardClusterData();               
    65378                 
     
    72385                                Ogre::LogManager::getSingleton().logMessage("entityCluster"); 
    73386                                 
    74                                 IMG::NodeBsp *nodeDest; 
    75                                 IMG::Cluster cluster; 
    76                                 Ogre::LogManager::getSingleton().logMessage("w:" + Ogre::StringConverter::toString(mTextureWidth)); 
    77                                 Ogre::LogManager::getSingleton().logMessage("h:" + Ogre::StringConverter::toString(mTextureHeight)); 
    78                                 nodeDest = mBsp.Insert(mTextureWidth,mTextureHeight,iBillboard); 
    79                                  
    80                                 cluster.SetBspNodeBound(nodeDest->GetBound()); 
    81                                 //cluster.Finish(); 
    82                                 mClusterList.Insert(&cluster);                           
     387                                if ((iBillboardGroup == 0) && (iBillboardsInGroup < (numberBillboardsEachGroup + numberBillboardsAddedFirstGroup))) 
     388                                { 
     389                                        Ogre::LogManager::getSingleton().logMessage("\nA"); 
     390                                        Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 
     391 
     392                                        addTextureInBsp(iBillboardGroup, iBillboard); 
     393 
     394                                        addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 
     395                                        iBillboardsInGroup++; 
     396                                } 
     397                                else 
     398                                { 
     399                                        if ((iBillboardGroup > 0) && (iBillboardsInGroup < numberBillboardsEachGroup)) 
     400                                        { 
     401                                                Ogre::LogManager::getSingleton().logMessage("\nB"); 
     402                                                Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 
     403 
     404                                                addTextureInBsp(iBillboardGroup, iBillboard); 
     405 
     406                                                addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 
     407                                                iBillboardsInGroup++; 
     408                                        } 
     409                                        else 
     410                                        { 
     411                                                iBillboardGroup++; 
     412                                                iBillboardsInGroup = 0; 
     413 
     414                                                Ogre::LogManager::getSingleton().logMessage("\nC IG:" + Ogre::StringConverter::toString(iBillboardsInGroup-1) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup-1) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup-1)->GetSize())); 
     415                                                Ogre::LogManager::getSingleton().logMessage("IG:" + Ogre::StringConverter::toString(iBillboardsInGroup) + " SizeCLList(" + Ogre::StringConverter::toString(iBillboardGroup) + "):" + Ogre::StringConverter::toString(getClusterList(iBillboardGroup)->GetSize()) + " -- numBBC:" + Ogre::StringConverter::toString(numGeneratedBillboardClouds)); 
     416 
     417                                                addTextureInBsp(iBillboardGroup, iBillboard); 
     418 
     419                                                addTextureAtlasTextureCoords(mergeBillboards, groupedBillboards, numGeneratedBillboardClouds, iBillboardGroup); 
     420                                                iBillboardsInGroup++; 
     421                                        } 
     422                                } 
     423 
     424                                numGeneratedBillboardClouds++; 
    83425                        } 
    84426                } 
    85         } 
    86          
    87         //mBsp.Print();          
    88  
    89         unsigned int numGeneratedBillboardClouds = 0; 
    90         bool enabledTextureCoordSet = false; 
    91         unsigned int iUniqueVertex = 0; 
    92  
    93         for (unsigned int iBillboard = 0; iBillboard < mBillboardCloud->getNumBillboards(); iBillboard++) 
    94         {                                                        
    95                 Billboard *billboard = mBillboardCloud->getBillboard(iBillboard);                
    96                 EntityCluster *entityCluster = billboard->getBillboardClusterData()->getEntityCluster(); 
    97  
    98                 if (entityCluster->getNumEntitiesClusterData() > 0) 
    99                 {        
    100                         IMG::Cluster *cluster = mClusterList.Get(numGeneratedBillboardClouds);           
    101                         IMG::Box2d *box = cluster->GetBspNodeBound(); 
    102                         Ogre::Vector2 max = box->GetMaximum(); 
    103                         Ogre::Vector2 min = box->GetMinimum(); 
    104                         Ogre::LogManager::getSingleton().logMessage("Max:" + Ogre::StringConverter::toString(Ogre::Vector3(max[0],max[1],0)) +  
    105                                 "\tMin:" + Ogre::StringConverter::toString(Ogre::Vector3(min[0],min[1],0)) +  
    106                                 "\tSize(" + Ogre::StringConverter::toString(max[0]-min[0]) + 
    107                                 "," + Ogre::StringConverter::toString(max[1]-min[1]) + ")"); 
    108  
    109  
    110                         SubEntity *subEntity;                                                                                            
    111                          
    112                         Ogre::Vector2 texCoords01,texCoords02,texCoords03,texCoords04; 
    113                         texCoords01[0] = min[0] / mTextureAtlasWidth; 
    114                         texCoords01[1] = min[1] / mTextureAtlasHeight; 
    115  
    116                         texCoords02[0] = max[0] / mTextureAtlasWidth; 
    117                         texCoords02[1] = min[1] / mTextureAtlasHeight; 
    118  
    119                         texCoords03[0] = max[0] / mTextureAtlasWidth; 
    120                         texCoords03[1] = max[1] / mTextureAtlasHeight; 
    121  
    122                         texCoords04[0] = min[0] / mTextureAtlasWidth; 
    123                         texCoords04[1] = max[1] / mTextureAtlasHeight; 
    124                          
    125                         if (!mergeBillboards) 
    126                         { 
    127                                 subEntity = mBillboardCloud->getEntity()->getSubEntity(numGeneratedBillboardClouds); 
    128                                 subEntity->addTextureCoordSet(2); 
    129                                 subEntity->enableVertexColours(true); 
    130                                 // Face A 
    131                                 //(0,0,0); 
    132                                 //(1,0,0); 
    133                                 //(1,1,0); 
    134  
    135                                 subEntity->setTexCoord(0, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1], 0)); 
    136                                 subEntity->setTexCoord(1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1], 0)); 
    137                                 subEntity->setTexCoord(2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1], 0)); 
    138  
    139                                 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
    140                                 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 
    141                                 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
    142  
    143                                 subEntity->setVertexColour(0, subEntityColour01.getAsRGBA()); 
    144                                 subEntity->setVertexColour(1, subEntityColour02.getAsRGBA()); 
    145                                 subEntity->setVertexColour(2, subEntityColour03.getAsRGBA()); 
    146  
    147                                 // Face B 
    148                                 //(1,1,0); 
    149                                 //(0,1,0); 
    150                                 //(0,0,0); 
    151                                 subEntity->setTexCoord(3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
    152                                 subEntity->setTexCoord(4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 
    153                                 subEntity->setTexCoord(5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
    154  
    155                                 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
    156                                 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 
    157                                 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
    158  
    159                                 subEntity->setVertexColour(3, subEntityColour04.getAsRGBA()); 
    160                                 subEntity->setVertexColour(4, subEntityColour05.getAsRGBA()); 
    161                                 subEntity->setVertexColour(5, subEntityColour06.getAsRGBA()); 
    162  
    163                         } 
    164                         else 
    165                         { 
    166                                 subEntity = mBillboardCloud->getEntity()->getSubEntity(0);                               
    167                                 if (!enabledTextureCoordSet) 
    168                                 { 
    169                                         subEntity->addTextureCoordSet(2); 
    170                                         subEntity->enableVertexColours(true); 
    171                                         enabledTextureCoordSet = true; 
    172                                 } 
    173                                  
    174                                 // Face A 
    175                                 //(0,0,0); 
    176                                 //(1,0,0); 
    177                                 //(1,1,0); 
    178  
    179                                 subEntity->setTexCoord(iUniqueVertex, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
    180                                 subEntity->setTexCoord(iUniqueVertex+1, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords02[0],texCoords02[1],0)); 
    181                                 subEntity->setTexCoord(iUniqueVertex+2, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
    182  
    183                                 Ogre::ColourValue subEntityColour01 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
    184                                 Ogre::ColourValue subEntityColour02 = Ogre::ColourValue(0, texCoords02[0],texCoords02[1]); 
    185                                 Ogre::ColourValue subEntityColour03 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
    186  
    187                                 subEntity->setVertexColour(iUniqueVertex, subEntityColour01.getAsRGBA()); 
    188                                 subEntity->setVertexColour(iUniqueVertex+1, subEntityColour02.getAsRGBA()); 
    189                                 subEntity->setVertexColour(iUniqueVertex+2, subEntityColour03.getAsRGBA()); 
    190  
    191  
    192                                 // Face B 
    193                                 //(1,1,0); 
    194                                 //(0,1,0); 
    195                                 //(0,0,0); 
    196                                 subEntity->setTexCoord(iUniqueVertex+3, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords03[0],texCoords03[1],0)); 
    197                                 subEntity->setTexCoord(iUniqueVertex+4, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords04[0],texCoords04[1],0)); 
    198                                 subEntity->setTexCoord(iUniqueVertex+5, subEntity->getNumTexCoordSets()-1, Ogre::Vector3(texCoords01[0],texCoords01[1],0)); 
    199  
    200                                 Ogre::ColourValue subEntityColour04 = Ogre::ColourValue(0, texCoords03[0],texCoords03[1]); 
    201                                 Ogre::ColourValue subEntityColour05 = Ogre::ColourValue(0, texCoords04[0],texCoords04[1]); 
    202                                 Ogre::ColourValue subEntityColour06 = Ogre::ColourValue(0, texCoords01[0],texCoords01[1]); 
    203  
    204                                 subEntity->setVertexColour(iUniqueVertex+3, subEntityColour04.getAsRGBA()); 
    205                                 subEntity->setVertexColour(iUniqueVertex+4, subEntityColour05.getAsRGBA()); 
    206                                 subEntity->setVertexColour(iUniqueVertex+5, subEntityColour06.getAsRGBA()); 
    207  
    208                                 iUniqueVertex = iUniqueVertex + 6; 
    209                         } 
    210                         numGeneratedBillboardClouds++; 
    211                 } 
    212         } 
    213          
     427        }        
     428        //mBsp.Print(); 
    214429} 
    215430 
     
    224439} 
    225440 
    226 BillboardCloudUVMapper::BillboardCloudUVMapper()  
    227 { 
    228 } 
    229  
    230 BillboardCloudUVMapper::~BillboardCloudUVMapper()  
    231 { 
    232 } 
    233  
    234 } 
     441} 
Note: See TracChangeset for help on using the changeset viewer.