#include "LBBCManager.h" namespace LBBC { LBBCManager::LBBCManager() : BBC::BBCManager() { mBillboardCloudSerializer = new KMeansClusterSerializer(); mLeafDistributionSerializer = new LeafDistributionSerializer(); mLeafDistributionGenerator = new LeafDistributionGenerator(); mBillboardCloudGenerator = new KMeansClusterGenerator(); mDiffuseColorPointClusterGenerator = new DiffuseColorPointClusterGenerator(); mBillboardCloudUVMapper = new BBC::BillboardCloudUVMapper(); mOgreMeshSerializer = new BBC::OgreMeshSerializer(); mColladaMeshSerializer = new BBC::ColladaMeshSerializer(); } LBBCManager::~LBBCManager() { if (mColladaMeshSerializer) { delete mColladaMeshSerializer; } if (mOgreMeshSerializer) { delete mOgreMeshSerializer; } // Gametools -- BUG: 06/04/2006 //if (mSampleConfigFile) //{ // delete mSampleConfigFile; //} if (mLeafDistributionSerializer) { delete mLeafDistributionSerializer; } if (mDiffuseColorPointClusterGenerator) { delete mDiffuseColorPointClusterGenerator; } if (mLeafDistributionGenerator) { delete mLeafDistributionGenerator; } if (mBillboardCloudGenerator) { delete mBillboardCloudGenerator; } if (mBillboardCloudUVMapper) { delete mBillboardCloudUVMapper; } if (mBillboardCloudSerializer) { delete mBillboardCloudSerializer; } if (mLeaves) { delete mLeaves; } } SampleConfigFile* LBBCManager::getSampleConfigFile() { return mSampleConfigFile; } void LBBCManager::setSampleConfigFile(SampleConfigFile *sampleConfigFile) { mSampleConfigFile = sampleConfigFile; } void LBBCManager::loadSampleConfigFile(Ogre::String sampleConfigFile) { mSampleConfigFile = new SampleConfigFile(); mSampleConfigFile->load(sampleConfigFile); } void LBBCManager::initialize() { mLeaves = new Leaves(); BBC::EntityPtr entityLeaves(new BBC::Entity); BBC::MeshPtr meshLeaves(new BBC::Mesh(this->loadMesh(mSampleConfigFile->getEntitiesFolder(), mSampleConfigFile->getEntitiesMeshName())) ); entityLeaves->setMesh(meshLeaves); mLeaves->setEntity(entityLeaves); } void LBBCManager::createEntityDistribution() { mLeafDistributionGenerator->setDistribution(mLeaves->getDistribution()); mLeafDistributionGenerator->getEntity()->setMesh(mLeaves->getEntity()->getMesh()); mLeafDistributionGenerator->generate(); } void LBBCManager::saveEntityDistributionSplitted() { BBC::EntityPtr entity; entity = BBC::EntityPtr(new BBC::Entity()); if (mSampleConfigFile->getEntityDistributionSplitted() || mSampleConfigFile->getEntityDistributionMerged()) { BBC::EntityDistribution *entityDistribution; unsigned int numSerializedEntities = 0; entityDistribution = mLeaves->getDistribution(); for (unsigned int iEntity = 0; iEntity < entityDistribution->getNumEntities(); iEntity++) { BBC::SubEntityPtr subEntity = entityDistribution->getEntity(iEntity)->getSubEntity(0); if (iEntity == 0) { // delete the default constructed subentity... entity->removeSubEntity(0); // Add our first subentity... entity->addSubEntity(subEntity); } else { entity->addSubEntity(subEntity); } entity->getSubEntity(numSerializedEntities)->setMaterialName(mSampleConfigFile->getEntityDistributionMergedMaterialName()); numSerializedEntities++; } entity->setSubEntitiesDistinctVertexColours(); if (mSampleConfigFile->getEntityDistributionSplitted()) { mOgreMeshSerializer->setEntity(entity); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersSplittedMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityDistributionSplittedMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh().get(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntitiesMeshPrefixName() + "Splitted.mesh" + ".xml"); } if (mSampleConfigFile->getEntityDistributionMerged()) { entity->mergeSubEntities(); entity->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityDistributionMergedMaterialName()); mOgreMeshSerializer->setEntity(entity); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh((Ogre::Mesh*)entity->getMesh().get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntitiesMeshPrefixName() + "Merged.mesh" + ".xml"); } } } void LBBCManager::saveEntityDistributionXML() { TiXmlDocument *document = mLeafDistributionSerializer->create( mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityDistributionXMLName()); mLeafDistributionSerializer->setLeafDistribution(mLeaves->getDistribution()); mLeafDistributionSerializer->writeLeafDistribution(document); mLeafDistributionSerializer->save(); } void LBBCManager::loadEntityDistribution() { TiXmlDocument *document = mLeafDistributionSerializer->load( mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityDistributionXMLName()); mLeafDistributionSerializer->setLeafDistribution(mLeaves->getDistribution()); mLeafDistributionSerializer->getEntity()->setMesh(mLeaves->getEntity()->getMesh()); mLeafDistributionSerializer->readLeafDistribution(document); BBC::EntityPtr entity; BBC::EntityDistribution *entityDistribution; BBC::MeshPtr pMeshLeavesSplitted(new BBC::Mesh(this->loadMesh(mSampleConfigFile->getEntitiesFolder(), mSampleConfigFile->getEntityDistributionSplittedMeshName()))); entity = BBC::EntityPtr(new BBC::Entity()); entity->setMesh(pMeshLeavesSplitted); entity->loadMesh(false); entityDistribution = mLeaves->getDistribution(); for (unsigned int iSubEntity = 0; iSubEntity < entity->getNumSubEntities(); iSubEntity++) { BBC::EntityPtr entitySample; BBC::SubEntityPtr subEntity; BBC::SubEntityPtr subEntitySample; subEntity = entity->getSubEntity(iSubEntity); entitySample = entityDistribution->getEntity(iSubEntity); subEntitySample = entitySample->getSubEntity(0); entitySample->removeSubEntity(0); // Add our first subentity... entitySample->addSubEntity(subEntity); } } void LBBCManager::generateEntityDistribution() { createEntityDistribution(); saveEntityDistributionXML(); saveEntityDistributionSplitted(); } void LBBCManager::saveBillboardCloudGroupedIndirectTexturing() { for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities(); iSubEntity++) { BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntityGrouped()->getSubEntity(iSubEntity); subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMaterialName() + Ogre::StringConverter::toString(iSubEntity)); } Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities())); mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped()); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName() + ".xml"); mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped()); mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingMeshName(), false, false); } void LBBCManager::saveBillboardCloudSplitted() { for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntity()->getNumSubEntities(); iSubEntity++) { BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntity()->getSubEntity(iSubEntity); subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudSplittedMaterialName()); } Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntity()->getNumSubEntities())); mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntity()); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName(),false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntity()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntity()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName() + ".xml"); mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntity()); mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedMeshName(),false, false); } void LBBCManager::saveBillboardCloudGroupedDiffuseColor() { for (unsigned int iSubEntity = 0; iSubEntity < mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities(); iSubEntity++) { BBC::SubEntityPtr subEntity = mLeaves->getBillboardCloud()->getEntityGrouped()->getSubEntity(iSubEntity); subEntity->setMaterialName(mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMaterialName() + Ogre::StringConverter::toString(iSubEntity)); } Ogre::LogManager::getSingleton().logMessage("Num.SubEntities:" + Ogre::StringConverter::toString(mLeaves->getBillboardCloud()->getEntityGrouped()->getNumSubEntities())); mOgreMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped()); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName(),false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(mLeaves->getBillboardCloud()->getEntityGrouped()->getMesh()->get(), mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName() + ".xml"); mColladaMeshSerializer->setEntity(mLeaves->getBillboardCloud()->getEntityGrouped()); mColladaMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorMeshName(),false, false); } void LBBCManager::saveBillboardCloudSplittedXML() { TiXmlDocument *document2 = mBillboardCloudSerializer->create( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedXMLName()); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->writeBillboardCloud(document2, false); mBillboardCloudSerializer->save(); } void LBBCManager::saveBillboardCloudGroupedIndirectTexturingXML() { TiXmlDocument *document2 = mBillboardCloudSerializer->create( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingXMLName()); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->writeBillboardCloud(document2, true); mBillboardCloudSerializer->save(); } void LBBCManager::saveBillboardCloudGroupedDiffuseColorXML() { TiXmlDocument *document2 = mBillboardCloudSerializer->create( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorXMLName()); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->writeBillboardCloud(document2, true); mBillboardCloudSerializer->save(); } void LBBCManager::loadBillboardCloudSplittedXML() { TiXmlDocument *document = mBillboardCloudSerializer->load( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudSplittedXMLName()); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->readBillboardCloud(document, false); } void LBBCManager::loadBillboardCloudGroupedIndirectTexturingXML() { TiXmlDocument *document = mBillboardCloudSerializer->load( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingXMLName()); mLeaves->getBillboardCloud()->clearBillboardCloud(); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->readBillboardCloud(document, true); } void LBBCManager::loadBillboardCloudGroupedDiffuseColorXML() { TiXmlDocument *document = mBillboardCloudSerializer->load( mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudGroupedDiffuseColorXMLName()); mLeaves->getBillboardCloud()->clearBillboardCloud(); mBillboardCloudSerializer->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudSerializer->readBillboardCloud(document, true); } void LBBCManager::saveEntityClusters() { BBC::BillboardClusterDataPtr billboardClusterData; BBC::EntityClusterPtr entityCluster; unsigned int numSerializedBillboards = 0; if (mSampleConfigFile->getEntityClustersSplittedClusters()) { for (unsigned int iBillboard = 0; iBillboard < mLeaves->getBillboardCloud()->getNumBillboards(); iBillboard++) { billboardClusterData = mLeaves->getBillboardCloud()->getBillboard(iBillboard)->getBillboardClusterData(); entityCluster = billboardClusterData->getEntityCluster(); Ogre::LogManager::getSingleton().logMessage("iBillboard: " + Ogre::StringConverter::toString(iBillboard)); if (entityCluster->getNumEntitiesClusterData() > 0) { BBC::EntityPtr entityClusterized = entityCluster->getEntity(); entityClusterized->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityClustersSplittedMaterialName()); mOgreMeshSerializer->setEntity(entityClusterized); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntityClustersSplittedMeshName() + Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh", !(mSampleConfigFile->getEntityClustersSplittedClusters()), false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entityClusterized->getMesh()->get(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersSplittedMeshName() + Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh"); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entityClusterized->getMesh(), entityClusterized->getMesh()->getName() + ".xml"); //mColladaMeshSerializer->setEntity(entityClusterized); //mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() + // mSampleConfigFile->getEntityClustersSplittedMeshName() + // Ogre::StringConverter::toString(numSerializedBillboards) + ".mesh", !(mSampleConfigFile->getEntityClustersSplittedClusters()), false); numSerializedBillboards++; } } } numSerializedBillboards = 0; if (mSampleConfigFile->getEntityClustersGroupedClusters()) { BBC::EntityPtr entity; entity = BBC::EntityPtr(new BBC::Entity()); for (unsigned int iBillboard = 0; iBillboard < mLeaves->getBillboardCloud()->getNumBillboards(); iBillboard++) { billboardClusterData = mLeaves->getBillboardCloud()->getBillboard(iBillboard)->getBillboardClusterData(); entityCluster = billboardClusterData->getEntityCluster(); if (entityCluster->getNumEntitiesClusterData() > 0) { BBC::EntityPtr entityClusterized = entityCluster->getEntity(); entityClusterized->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntityClustersGroupedMaterialName()); BBC::SubEntityPtr subEntity = entityClusterized->getSubEntity(0); if (numSerializedBillboards == 0) { // delete the default constructed subentity... entity->removeSubEntity(0); // Add our first subentity... entity->addSubEntity(subEntity); } else { entity->addSubEntity(subEntity); } numSerializedBillboards++; } } Ogre::LogManager::getSingleton().logMessage(" Mesh Generation --" + Ogre::StringConverter::toString(numSerializedBillboards)); mOgreMeshSerializer->setEntity(entity); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersGroupedMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh(), mSampleConfigFile->getEntityClustersFolder() + mSampleConfigFile->getEntityClustersMeshPrefixName() + "Merged.mesh" + ".xml"); //mColladaMeshSerializer->setEntity(entity); //mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityClustersFolder() + // mSampleConfigFile->getEntityClustersGroupedMeshName(), false, false); } } void LBBCManager::createEntityClusters() { mBillboardCloudGenerator->setDistribution(mLeaves->getDistribution()); mBillboardCloudGenerator->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudGenerator->setMaxNumBillboards(mSampleConfigFile->getEntityClustersMaxClusters()); ((KMeansClusterGenerator*)mBillboardCloudGenerator)->setAlpha(mSampleConfigFile->getEntityClustersAlpha()); ((KMeansClusterGenerator*)mBillboardCloudGenerator)->setNumIterations(mSampleConfigFile->getEntityClustersNumIterations()); ((KMeansClusterGenerator*)mBillboardCloudGenerator)->generate(); } void LBBCManager::saveSingleEntity() { BBC::EntityPtr entityLeaf = mLeaves->getDistribution()->getEntity(2); entityLeaf->getSubEntity(0)->setMaterialName(mSampleConfigFile->getEntitySampleMaterialName()); mOgreMeshSerializer->setEntity(entityLeaf); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(entityLeaf->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entityLeaf->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName() + ".xml"); mColladaMeshSerializer->setEntity(entityLeaf); mColladaMeshSerializer->exportMesh(mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getEntitySampleMeshName(), false, false); } void LBBCManager::generateEntityClusters() { createEntityClusters(); saveEntityClusters(); } void LBBCManager::generateBillboardCloud() { mLeaves->getBillboardCloud()->generateBillboardCloud(false); if (mSampleConfigFile->getBillboardCloudGroupedDiffuseColorBillboards()) { mLeaves->getBillboardCloud()->initializeBillboardCloudGroups(mSampleConfigFile->getBillboardCloudGroupedDiffuseColorGroups()); mBillboardCloudUVMapper->shutdown(); mBillboardCloudUVMapper->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudUVMapper->setTextureWidth(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureSize()); mBillboardCloudUVMapper->setTextureHeight(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureSize()); mBillboardCloudUVMapper->setTextureAtlasWidth(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureAtlasSize()); mBillboardCloudUVMapper->setTextureAtlasHeight(mSampleConfigFile->getBillboardCloudDiffuseColorGroupedBillboardsTextureAtlasSize()); mBillboardCloudUVMapper->generateTextureAtlasTextureCoords(false, mSampleConfigFile->getBillboardCloudGroupedDiffuseColorBillboards(), mSampleConfigFile->getBillboardCloudGroupedDiffuseColorGroups()); mLeaves->getBillboardCloud()->generateBillboardCloudGroups(); saveBillboardCloudGroupedDiffuseColor(); saveBillboardCloudGroupedDiffuseColorXML(); } if (mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingBillboards()) { mLeaves->getBillboardCloud()->initializeBillboardCloudGroups(mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingGroups()); mBillboardCloudUVMapper->shutdown(); mBillboardCloudUVMapper->setBillboardCloud(mLeaves->getBillboardCloud()); mBillboardCloudUVMapper->setTextureWidth(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureSize()); mBillboardCloudUVMapper->setTextureHeight(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureSize()); mBillboardCloudUVMapper->setTextureAtlasWidth(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureAtlasSize()); mBillboardCloudUVMapper->setTextureAtlasHeight(mSampleConfigFile->getBillboardCloudIndirectGroupedBillboardsTextureAtlasSize()); mBillboardCloudUVMapper->generateTextureAtlasTextureCoords(false, mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingBillboards(), mSampleConfigFile->getBillboardCloudGroupedIndirectTexturingGroups()); mLeaves->getBillboardCloud()->generateBillboardCloudGroups(); saveBillboardCloudGroupedIndirectTexturing(); saveBillboardCloudGroupedIndirectTexturingXML(); } if (mSampleConfigFile->getBillboardCloudSplittedBillboards()) { mLeaves->getBillboardCloud()->generateBillboardCloud(false); saveBillboardCloudSplitted(); saveBillboardCloudSplittedXML(); } generateBillboardCloudDiffuseColorPointCluster(); } void LBBCManager::generateBillboardCloudDiffuseColorPointCluster() { BBC::EntityPtr entity; entity = BBC::EntityPtr(new BBC::Entity()); mDiffuseColorPointClusterGenerator->setEntity(entity); mDiffuseColorPointClusterGenerator->setMaterialName(mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMaterialName()); mDiffuseColorPointClusterGenerator->setNumSamples(mSampleConfigFile->getBillboardCloudDiffuseColorEntityTextureAtlasNumSamples()); mDiffuseColorPointClusterGenerator->setBillboardCloud(getLeaves()->getBillboardCloud()); mDiffuseColorPointClusterGenerator->generateDiffuseColorPointCluster(); saveBillboardCloudDiffuseColorPointCluster(); } void LBBCManager::saveBillboardCloudDiffuseColorPointCluster() { mOgreMeshSerializer->setEntity(mDiffuseColorPointClusterGenerator->getEntity()); mOgreMeshSerializer->exportMesh(mSampleConfigFile->getBillboardCloudFolder() + mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMeshName(), false, false); OBA::OgreBase::getSingleton().getMeshSerializer()->exportMesh(mDiffuseColorPointClusterGenerator->getEntity()->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getBillboardCloudDiffuseColorPointClustersMeshName()); //OBA::OgreBase::getSingleton().getXMLMeshSerializer()->exportMesh(entity->getMesh()->get(), mSampleConfigFile->getEntityDistributionFolder() + mSampleConfigFile->getBillboardCloudIndirectPointMeshName() + ".xml"); } Leaves* LBBCManager::getLeaves() { return mLeaves; } }