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

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