#ifndef _LBBCBILLBOARDCLOUDINDIRECTTEXTUREVIEWMODE_H #define _LBBCBILLBOARDCLOUDINDIRECTTEXTUREVIEWMODE_H #include #include #include #include namespace LBBC { class _BBCExport BillboardCloudIndirectTextureViewMode : public OBA::OgreFrameListenerMode { protected: unsigned int mFrame; Ogre::SceneNode *mBillboardCloudPointClustersSceneNode; Ogre::SceneNode *mBillboardCloudSplittedSceneNode; Ogre::SceneNode *mEntityClustersGroupedSceneNode; Ogre::Entity *mEntityClustersGrouped; Ogre::Entity *mBillboardCloudPointClusters; Ogre::Entity *mBillboardCloudSplitted; IMG::TexturePtr mClusterTexture; IMG::TextureAtlasPtr mTextureAtlas; unsigned int mNumTextures; unsigned int mCurrentTexture; unsigned int mTextureAtlasSize; unsigned int mTextureSize; unsigned int mBitRange; Ogre::PixelFormat mSrcPixelFormat; Ogre::PixelFormat mDestPixelFormat; Ogre::String mTextureAtlasName; Ogre::String mTextureAtlasFolder; Ogre::String mBillboardCloudPointClustersName; Ogre::String mBillboardCloudSplittedName; Ogre::String mEntityClustersGroupedName; Ogre::Matrix4 mCustomProjMatrix; bool mDebugBillboardGeneration; bool mDebugTextureAtlasGeneration; unsigned int mCurrentBillboardGroup; unsigned int mCurrentBillboard; public: BillboardCloudIndirectTextureViewMode(Ogre::RenderWindow* win, unsigned int ogreFrameListenerModeHandle, bool useBufferedInputKeys = false, bool useBufferedInputMouse = false); virtual ~BillboardCloudIndirectTextureViewMode(); virtual bool frameStarted(const Ogre::FrameEvent& evt, Ogre::InputReader *inputReader); virtual void createScene(); virtual void destroyScene(); void setEntityClustersGroupedName(Ogre::String entityClustersGrouped); void initializeBillboardCloudPointClusters(); void setBillboardCloudGroupedTextureAtlasDebug(bool debugTextureAtlasGeneration); void configureBillboard(); void configureTexture(); void configureTextureAtlas(); bool processUnbufferedKeyInput(const Ogre::FrameEvent& evt); void saveTextureAtlas(); void setTextureAtlasSize(unsigned int size); void setTextureSize(unsigned int size); void setBillboardCloudSplittedName(Ogre::String billboardCloudSplittedName); void setBillboardCloudPointClustersName(Ogre::String billboardCloudPointClustersName); void setTextureAtlasName(Ogre::String textureAtlasName); void setTextureAtlasFolder(Ogre::String textureAtlasFolder); void setTextureAtlasBitRange(unsigned int bitRange); void configureBillboardOrthogonalAlignedCamera(unsigned int iBillboard); void initializeEntityClustersGrouped(); void initializeBillboardCloudSplitted(); void generateTexture(); void generateTextureAtlas(); }; } #endif