source: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/LBBCManager.cpp @ 969

Revision 969, 23.8 KB checked in by igarcia, 18 years ago (diff)
RevLine 
[699]1
2#include "LBBCManager.h"
3
4namespace LBBC {
5
[731]6LBBCManager::LBBCManager()
7        : BBC::BBCManager()
[699]8{
[721]9        mBillboardCloudSerializer = new KMeansClusterSerializer();
[699]10        mLeafDistributionSerializer = new LeafDistributionSerializer();
11        mLeafDistributionGenerator = new LeafDistributionGenerator();
[721]12        mBillboardCloudGenerator = new KMeansClusterGenerator();
[961]13        mDiffuseColorPointClusterGenerator = new DiffuseColorPointClusterGenerator();
[699]14        mBillboardCloudUVMapper = new BBC::BillboardCloudUVMapper();
15        mOgreMeshSerializer = new BBC::OgreMeshSerializer();
[950]16        mColladaMeshSerializer = new BBC::ColladaMeshSerializer();
[699]17}
18
[731]19LBBCManager::~LBBCManager()
[699]20{
[950]21        if (mColladaMeshSerializer)
22        {
23                delete mColladaMeshSerializer;
24        }
[721]25        if (mOgreMeshSerializer)
26        {
27                delete mOgreMeshSerializer;
28        }
[731]29        // Gametools -- BUG: 06/04/2006
30        //if (mSampleConfigFile)
31        //{
32        //      delete mSampleConfigFile;
33        //}
[721]34        if (mLeafDistributionSerializer)
35        {
36                delete mLeafDistributionSerializer;
37        }
[961]38        if (mDiffuseColorPointClusterGenerator)
39        {
40                delete mDiffuseColorPointClusterGenerator;
41        }
[721]42        if (mLeafDistributionGenerator)
43        {
44                delete mLeafDistributionGenerator;
45        }
46        if (mBillboardCloudGenerator)
47        {
48                delete mBillboardCloudGenerator;
49        }
50        if (mBillboardCloudUVMapper)
51        {
52                delete mBillboardCloudUVMapper;
53        }
54        if (mBillboardCloudSerializer)
55        {
56                delete mBillboardCloudSerializer;
57        }
58        if (mLeaves)
59        {
60                delete mLeaves;
61        }
62
[699]63}
64
[731]65SampleConfigFile* LBBCManager::getSampleConfigFile()
[699]66{
[721]67        return mSampleConfigFile;
[699]68}
[721]69
[731]70void LBBCManager::setSampleConfigFile(SampleConfigFile *sampleConfigFile)
[699]71{
[721]72        mSampleConfigFile = sampleConfigFile;
73}
[699]74
[731]75void LBBCManager::loadSampleConfigFile(Ogre::String sampleConfigFile)
[721]76{
77        mSampleConfigFile = new SampleConfigFile();
78        mSampleConfigFile->load(sampleConfigFile);
79}
80
[745]81void LBBCManager::initialize()
[721]82{
[699]83        mLeaves = new Leaves();
[721]84        BBC::EntityPtr entityLeaves(new BBC::Entity);
[747]85        BBC::MeshPtr meshLeaves(new BBC::Mesh(this->loadMesh(mSampleConfigFile->getEntitiesFolder(), mSampleConfigFile->getEntitiesMeshName())) );
[721]86        entityLeaves->setMesh(meshLeaves);     
87        mLeaves->setEntity(entityLeaves);
[699]88}
89
[731]90void LBBCManager::createEntityDistribution()
[699]91{
92        mLeafDistributionGenerator->setDistribution(mLeaves->getDistribution());
[721]93        mLeafDistributionGenerator->getEntity()->setMesh(mLeaves->getEntity()->getMesh());     
[699]94        mLeafDistributionGenerator->generate();
95}
96
[731]97void LBBCManager::saveEntityDistributionSplitted()
[699]98{
[721]99        BBC::EntityPtr entity;
100        entity = BBC::EntityPtr(new BBC::Entity());
[699]101
[721]102        if (mSampleConfigFile->getEntityDistributionSplitted() || mSampleConfigFile->getEntityDistributionMerged())
[699]103        {
104                BBC::EntityDistribution *entityDistribution;           
105                unsigned int numSerializedEntities = 0;
106               
107                entityDistribution = mLeaves->getDistribution();
108                for (unsigned int iEntity = 0; iEntity < entityDistribution->getNumEntities(); iEntity++)
109                {                               
[721]110                                BBC::SubEntityPtr subEntity = entityDistribution->getEntity(iEntity)->getSubEntity(0);
[699]111
112                                if (iEntity == 0)
113                                {
[721]114                                        // delete the default constructed subentity...
[699]115                                        entity->removeSubEntity(0);
116
117                                        // Add our first subentity...
118                                        entity->addSubEntity(subEntity);                                       
119                                }
120                                else
121                                {
122                                        entity->addSubEntity(subEntity);
123                                }
124
[747]125                                entity->getSubEntity(numSerializedEntities)->setMaterialName(mSampleConfigFile->getEntityDistributionMergedMaterialName());
[699]126                                numSerializedEntities++;                       
127                }               
128
129                entity->setSubEntitiesDistinctVertexColours();
130               
[721]131                if (mSampleConfigFile->getEntityDistributionSplitted())
[699]132                {
133                        mOgreMeshSerializer->setEntity(entity);
[721]134                        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() +
[747]135                                mSampleConfigFile->getEntityClustersSplittedMeshName(), false, false);
[699]136                       
[747]137                        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityDistributionSplittedMeshName());
[731]138                        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh().get(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntitiesMeshPrefixName() + "Splitted.mesh" + ".xml");                 
[699]139                }
140
[969]141                if (mSampleConfigFile->getEntityDistributionMerged())
142                {
143                        entity->mergeSubEntities();
144                        entity->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityDistributionMergedMaterialName());
[699]145               
[969]146                        mOgreMeshSerializer->setEntity(entity);
147                        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() +
148                                mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false);
149                       
150                        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh((Ogre::Mesh*)entity->getMesh().get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName());
151                        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntitiesMeshPrefixName() + "Merged.mesh" + ".xml");                         
152                }
[699]153        }
154}
155
[731]156void LBBCManager::saveEntityDistributionXML()
[699]157{
158        TiXmlDocument *document = mLeafDistributionSerializer->create(
[721]159                                                                        mSampleConfigFile->getEntityDistributionFolder() +
[747]160                                                                        mSampleConfigFile->getEntityDistributionXMLName());
[864]161
[699]162        mLeafDistributionSerializer->setLeafDistribution(mLeaves->getDistribution());
163        mLeafDistributionSerializer->writeLeafDistribution(document);   
164        mLeafDistributionSerializer->save();
165}
166
[731]167void LBBCManager::loadEntityDistribution()
[699]168{
169        TiXmlDocument *document = mLeafDistributionSerializer->load(
[721]170                                                                        mSampleConfigFile->getEntityDistributionFolder() +
[747]171                                                                        mSampleConfigFile->getEntityDistributionXMLName());
[699]172        mLeafDistributionSerializer->setLeafDistribution(mLeaves->getDistribution());
[721]173        mLeafDistributionSerializer->getEntity()->setMesh(mLeaves->getEntity()->getMesh());
[699]174        mLeafDistributionSerializer->readLeafDistribution(document);
175
[721]176        BBC::EntityPtr entity;
[699]177        BBC::EntityDistribution *entityDistribution;
178
[747]179        BBC::MeshPtr pMeshLeavesSplitted(new BBC::Mesh(this->loadMesh(mSampleConfigFile->getEntitiesFolder(), mSampleConfigFile->getEntityDistributionSplittedMeshName())));
[721]180        entity = BBC::EntityPtr(new BBC::Entity());
181        entity->setMesh(pMeshLeavesSplitted);
[699]182
183        entity->loadMesh(false);
184        entityDistribution = mLeaves->getDistribution();
185
186        for (unsigned int iSubEntity = 0; iSubEntity < entity->getNumSubEntities(); iSubEntity++)
187        {       
[721]188                BBC::EntityPtr entitySample;
189                BBC::SubEntityPtr subEntity;
190                BBC::SubEntityPtr subEntitySample;
[699]191                       
192                subEntity = entity->getSubEntity(iSubEntity);
193                entitySample = entityDistribution->getEntity(iSubEntity);
194                subEntitySample = entitySample->getSubEntity(0);
195                entitySample->removeSubEntity(0);                               
196
197                // Add our first subentity...
198                entitySample->addSubEntity(subEntity); 
199        }
200}
201
[731]202void LBBCManager::generateEntityDistribution()
[699]203{
[861]204        createEntityDistribution();
[864]205    saveEntityDistributionXML();
[861]206        saveEntityDistributionSplitted();
[699]207}
208
[900]209void LBBCManager::saveBillboardCloudGroupedIndirectTexturing()
[699]210{
[900]211        for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities(); iSubEntity++)
[709]212        {
[900]213                BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntityGrouped()->getSubEntity(iSubEntity);
214                subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMaterialName() + Ogre::StringConverter::toString(iSubEntity));
[709]215        }
216   
[900]217        Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities()));
[950]218
219        mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped());
[721]220        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
[950]221                                mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName(), false, false);
222
[900]223        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName());
224        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName() + ".xml");
[950]225
226        mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped());
227        mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
228                                mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName(), false, false);
[709]229}
230
231
[731]232void LBBCManager::saveBillboardCloudSplitted()
[709]233{       
234        for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntity()->getNumSubEntities(); iSubEntity++)
235        {
[721]236                BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntity()->getSubEntity(iSubEntity);
[747]237                subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudSplittedMaterialName());
[709]238        }
239
[721]240        Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntity()->getNumSubEntities()));
241
[950]242        mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntity());
[721]243        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
[747]244                                mSampleConfigFile->getBillboardCloudSplittedMeshName(),false, false);
[721]245
[747]246        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntity()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName());
[751]247        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntity()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName() + ".xml");
[950]248
249        mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntity());
250        mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
251                                mSampleConfigFile->getBillboardCloudSplittedMeshName(),false, false);
[699]252}
253
[900]254void LBBCManager::saveBillboardCloudGroupedDiffuseColor()
[699]255{       
[900]256        for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities(); iSubEntity++)
[709]257        {
[900]258                BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntityGrouped()->getSubEntity(iSubEntity);
259                subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMaterialName() + Ogre::StringConverter::toString(iSubEntity));
[709]260        }
261   
[900]262        Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities()));
[950]263
264        mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped());
[721]265        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
[900]266                                mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName(),false, false);
[950]267
[900]268        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName());   
269        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName() + ".xml");     
[950]270
271        mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped());
272        mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() +
273                                mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName(),false, false);
[699]274}
275
[900]276void LBBCManager::saveBillboardCloudSplittedXML()
[699]277{
278        TiXmlDocument *document2 = mBillboardCloudSerializer->create(
[721]279                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[747]280                                                                        mSampleConfigFile->getBillboardCloudSplittedXMLName());
[699]281        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
[745]282        mBillboardCloudSerializer->writeBillboardCloud(document2, false);       
[699]283        mBillboardCloudSerializer->save();
284}
285
[900]286void LBBCManager::saveBillboardCloudGroupedIndirectTexturingXML()
[745]287{
288        TiXmlDocument *document2 = mBillboardCloudSerializer->create(
289                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[900]290                                                                        mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingXMLName());
[745]291        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
292        mBillboardCloudSerializer->writeBillboardCloud(document2, true);       
293        mBillboardCloudSerializer->save();
294}
295
[900]296void LBBCManager::saveBillboardCloudGroupedDiffuseColorXML()
[745]297{
298        TiXmlDocument *document2 = mBillboardCloudSerializer->create(
299                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[900]300                                                                        mSampleConfigFile->getBillboardCloudGroupedDiffuseColorXMLName());
[745]301        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
302        mBillboardCloudSerializer->writeBillboardCloud(document2, true);       
303        mBillboardCloudSerializer->save();
304}
305
[900]306void LBBCManager::loadBillboardCloudSplittedXML()
[745]307{
308        TiXmlDocument *document = mBillboardCloudSerializer->load(
309                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[747]310                                                                        mSampleConfigFile->getBillboardCloudSplittedXMLName());
[745]311
312        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
313        mBillboardCloudSerializer->readBillboardCloud(document, false);
314}
315
[900]316void LBBCManager::loadBillboardCloudGroupedIndirectTexturingXML()
[745]317{
318        TiXmlDocument *document = mBillboardCloudSerializer->load(
319                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[900]320                                                                        mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingXMLName());
[745]321       
[900]322        mLeaves->getBillboardCloud()->clearBillboardCloud();
[745]323        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
324        mBillboardCloudSerializer->readBillboardCloud(document, true);
325}
326
[900]327void LBBCManager::loadBillboardCloudGroupedDiffuseColorXML()
[745]328{
329        TiXmlDocument *document = mBillboardCloudSerializer->load(
330                                                                        mSampleConfigFile->getBillboardCloudFolder() +
[900]331                                                                        mSampleConfigFile->getBillboardCloudGroupedDiffuseColorXMLName());
[745]332
[900]333        mLeaves->getBillboardCloud()->clearBillboardCloud();
[745]334        mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud());
335        mBillboardCloudSerializer->readBillboardCloud(document, true);
336}
337
[900]338
339
[731]340void LBBCManager::saveEntityClusters()
[699]341{
[721]342        BBC::BillboardClusterDataPtr billboardClusterData;
343        BBC::EntityClusterPtr entityCluster;
[699]344        unsigned int numSerializedBillboards = 0;       
345
[721]346        if (mSampleConfigFile->getEntityClustersSplittedClusters())
[699]347        {
348
349                for (unsigned int iBillboard = 0; iBillboard < mLeaves->getBillboardCloud()->getNumBillboards(); iBillboard++)
350                {
351                        billboardClusterData = mLeaves->getBillboardCloud()->getBillboard(iBillboard)->getBillboardClusterData();
352                        entityCluster = billboardClusterData->getEntityCluster();
353                        Ogre::LogManager::getSingleton().logMessage("iBillboard: " + Ogre::StringConverter::toString(iBillboard));
354                        if (entityCluster->getNumEntitiesClusterData() > 0)
355                        {                                       
[721]356                                BBC::EntityPtr entityClusterized = entityCluster->getEntity();
[747]357                                entityClusterized->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityClustersSplittedMaterialName());
[950]358                               
[699]359                                mOgreMeshSerializer->setEntity(entityClusterized);
[721]360                                mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() +
[747]361                                        mSampleConfigFile->getEntityClustersSplittedMeshName() +
[721]362                                        Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh", !(mSampleConfigFile->getEntityClustersSplittedClusters()), false);
[950]363                               
[721]364                                OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entityClusterized->getMesh()->get(),
365                                        mSampleConfigFile->getEntityClustersFolder() +
[747]366                                        mSampleConfigFile->getEntityClustersSplittedMeshName() +
[699]367                                        Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh");
[721]368                                //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entityClusterized->getMesh(), entityClusterized->getMesh()->getName() + ".xml");
[699]369
[950]370                                //mColladaMeshSerializer->setEntity(entityClusterized);
371                                //mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() +
372                                //      mSampleConfigFile->getEntityClustersSplittedMeshName() +
373                                //      Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh", !(mSampleConfigFile->getEntityClustersSplittedClusters()), false);
374
[699]375                                numSerializedBillboards++;
376                        }
377                }
378        }
379        numSerializedBillboards = 0;
380
[751]381        if (mSampleConfigFile->getEntityClustersGroupedClusters())
[699]382        {
[721]383                BBC::EntityPtr entity;
384                entity = BBC::EntityPtr(new BBC::Entity());
[699]385
386                for (unsigned int iBillboard = 0; iBillboard < mLeaves->getBillboardCloud()->getNumBillboards(); iBillboard++)
387                {
388                        billboardClusterData = mLeaves->getBillboardCloud()->getBillboard(iBillboard)->getBillboardClusterData();
389                        entityCluster = billboardClusterData->getEntityCluster();
390
391                        if (entityCluster->getNumEntitiesClusterData() > 0)
392                        {                       
[721]393                                BBC::EntityPtr entityClusterized = entityCluster->getEntity();
[751]394                                entityClusterized->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityClustersGroupedMaterialName());
[721]395                                BBC::SubEntityPtr subEntity = entityClusterized->getSubEntity(0);
[699]396
397                                if (numSerializedBillboards == 0)
398                                {
[721]399                                        // delete the default constructed subentity...
[699]400                                        entity->removeSubEntity(0);
401
402                                        // Add our first subentity...
403                                        entity->addSubEntity(subEntity);
404                                }
405                                else
406                                {
407                                        entity->addSubEntity(subEntity);
408                                }
409
410                                numSerializedBillboards++;
411                        }
412                }
413               
414                Ogre::LogManager::getSingleton().logMessage(" Mesh Generation --" + Ogre::StringConverter::toString(numSerializedBillboards));
[745]415               
[699]416                mOgreMeshSerializer->setEntity(entity);
[721]417                mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() +
[751]418                        mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false);
[699]419               
[751]420                OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName());
[731]421                //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersMeshPrefixName() + "Merged.mesh" + ".xml");
[950]422
423                //mColladaMeshSerializer->setEntity(entity);
424                //mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() +
425                //      mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false);
[699]426        }
427}
428
[731]429void LBBCManager::createEntityClusters()
[699]430{
431        mBillboardCloudGenerator->setDistribution(mLeaves->getDistribution());
432        mBillboardCloudGenerator->setBillboardCloud(mLeaves->getBillboardCloud());
[721]433        mBillboardCloudGenerator->setMaxNumBillboards(mSampleConfigFile->getEntityClustersMaxClusters());
434        ((KMeansClusterGenerator*)mBillboardCloudGenerator)->setAlpha(mSampleConfigFile->getEntityClustersAlpha());
435        ((KMeansClusterGenerator*)mBillboardCloudGenerator)->setNumIterations(mSampleConfigFile->getEntityClustersNumIterations());
436        ((KMeansClusterGenerator*)mBillboardCloudGenerator)->generate();
[699]437}
438
[731]439void LBBCManager::saveSingleEntity()
[699]440{
[731]441        BBC::EntityPtr entityLeaf = mLeaves->getDistribution()->getEntity(2);
[747]442        entityLeaf->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntitySampleMaterialName());
[950]443       
[731]444        mOgreMeshSerializer->setEntity(entityLeaf);
445        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() +
[747]446                mSampleConfigFile->getEntitySampleMeshName(), false, false);
[950]447
[747]448        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entityLeaf->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName());
[751]449        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entityLeaf->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName() + ".xml");     
[950]450
451        mColladaMeshSerializer->setEntity(entityLeaf);
452        mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() +
453                mSampleConfigFile->getEntitySampleMeshName(), false, false);
[699]454}
455
[731]456void LBBCManager::generateEntityClusters()
[699]457{
458        createEntityClusters();
[731]459        saveEntityClusters();   
[699]460}
461
[731]462void LBBCManager::generateBillboardCloud()
[900]463{       
464        mLeaves->getBillboardCloud()->generateBillboardCloud(false);
465        if (mSampleConfigFile->getBillboardCloudGroupedDiffuseColorBillboards())
466        {
467                mLeaves->getBillboardCloud()->initializeBillboardCloudGroups(mSampleConfigFile->getBillboardCloudGroupedDiffuseColorGroups());
468
[751]469                mBillboardCloudUVMapper->shutdown();
470                mBillboardCloudUVMapper->setBillboardCloud(mLeaves->getBillboardCloud());
471                mBillboardCloudUVMapper->setTextureWidth(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureSize());
472                mBillboardCloudUVMapper->setTextureHeight(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureSize());
473                mBillboardCloudUVMapper->setTextureAtlasWidth(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureAtlasSize());
474                mBillboardCloudUVMapper->setTextureAtlasHeight(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureAtlasSize());
[900]475                mBillboardCloudUVMapper->generateTextureAtlasTextureCoords(false, mSampleConfigFile->getBillboardCloudGroupedDiffuseColorBillboards(), mSampleConfigFile->getBillboardCloudGroupedDiffuseColorGroups());
476
[751]477                mLeaves->getBillboardCloud()->generateBillboardCloudGroups();
[900]478                saveBillboardCloudGroupedDiffuseColor();
479                saveBillboardCloudGroupedDiffuseColorXML();
[745]480        }
481
[900]482        if (mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingBillboards())
483        {                               
484                mLeaves->getBillboardCloud()->initializeBillboardCloudGroups(mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingGroups());
485               
[751]486                mBillboardCloudUVMapper->shutdown();
487                mBillboardCloudUVMapper->setBillboardCloud(mLeaves->getBillboardCloud());
[900]488                mBillboardCloudUVMapper->setTextureWidth(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureSize());
489                mBillboardCloudUVMapper->setTextureHeight(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureSize());
490                mBillboardCloudUVMapper->setTextureAtlasWidth(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureAtlasSize());
491                mBillboardCloudUVMapper->setTextureAtlasHeight(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureAtlasSize());               
492                mBillboardCloudUVMapper->generateTextureAtlasTextureCoords(false, mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingBillboards(), mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingGroups());
493               
[751]494                mLeaves->getBillboardCloud()->generateBillboardCloudGroups();
[900]495                saveBillboardCloudGroupedIndirectTexturing();
[950]496                saveBillboardCloudGroupedIndirectTexturingXML();
[709]497        }
498
[721]499        if (mSampleConfigFile->getBillboardCloudSplittedBillboards())
[699]500        {               
[721]501                mLeaves->getBillboardCloud()->generateBillboardCloud(false);
[699]502                saveBillboardCloudSplitted();
[900]503                saveBillboardCloudSplittedXML();
[699]504        }
[751]505
[961]506        generateBillboardCloudDiffuseColorPointCluster();
[699]507}
508
[961]509void LBBCManager::generateBillboardCloudDiffuseColorPointCluster()
[751]510{
511        BBC::EntityPtr entity;
512        entity = BBC::EntityPtr(new BBC::Entity());
[961]513        mDiffuseColorPointClusterGenerator->setEntity(entity);
[967]514        mDiffuseColorPointClusterGenerator->setMaterialName(mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMaterialName());
[961]515        mDiffuseColorPointClusterGenerator->setNumSamples(mSampleConfigFile->getBillboardCloudDiffuseColorEntityTextureAtlasNumSamples());
516        mDiffuseColorPointClusterGenerator->setBillboardCloud(getLeaves()->getBillboardCloud());
517        mDiffuseColorPointClusterGenerator->generateDiffuseColorPointCluster();
518        saveBillboardCloudDiffuseColorPointCluster();
519}
[751]520
[961]521void LBBCManager::saveBillboardCloudDiffuseColorPointCluster()
522{
523        mOgreMeshSerializer->setEntity(mDiffuseColorPointClusterGenerator->getEntity());
[967]524        mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMeshName(), false, false);
525        OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mDiffuseColorPointClusterGenerator->getEntity()->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMeshName());
[900]526        //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getBillboardCloudIndirectPointMeshName() + ".xml"); 
[751]527}
528
[731]529Leaves* LBBCManager::getLeaves()
[699]530{
531        return mLeaves;
532}
533
534}
Note: See TracBrowser for help on using the repository browser.