Ignore:
Timestamp:
09/21/06 08:49:20 (18 years ago)
Author:
szirmay
Message:
 
Location:
GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src
Files:
3 added
8 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreIlluminationManager.cpp

    r1130 r1425  
    8181        focusingMapSize = 32; 
    8282        shadowMapSize = 512; 
     83        phaseTextureSize = 256; 
    8384         
    8485        for(int i = 0; i < RUN_TYPE_COUNT; i++) 
     
    106107        OgreHierarchicalParticleSystemTechniqueFactory* HPSF = new OgreHierarchicalParticleSystemTechniqueFactory(); 
    107108                addRenderTechniqueFactory(HPSF); 
     109        OgreIllumVolumeRenderTechniqueFactory* illumVolume = new OgreIllumVolumeRenderTechniqueFactory(); 
     110                addRenderTechniqueFactory(illumVolume); 
    108111} 
    109112 
     
    397400                fillVisibleList(rq);     
    398401 
    399                 int l = visibleObjects.size(); //debug 
     402//              int l = visibleObjects.size(); //debug 
    400403                 
    401404                joinSharedRuns(); 
    402405 
    403                 int ll = sharedRunRoots.size(); //debug 
     406//              int ll = sharedRunRoots.size(); //debug 
    404407 
    405408                //update precomputings                           
     
    524527                         
    525528                } 
     529                case ILLUMRUN_PHASE_TEXTURE: 
     530                if(globalSharedRuns.getRun(ILLUMRUN_PHASE_TEXTURE) == 0) 
     531                { 
     532                        OgrePhaseTextureRenderingRun* run  = new OgrePhaseTextureRenderingRun( 
     533                                "PHASE_TEXTURE",                                 
     534                                phaseTextureSize, 
     535                                phaseTextureSize, 
     536                                "Phase_HenyeyGreenStein"); 
     537                        globalSharedRuns.addRun(ILLUMRUN_PHASE_TEXTURE, run);                    
     538                } 
    526539                break; 
    527540        } 
    528541} 
    529542 
    530  
     543void OgreIlluminationManager::savePhaseTextureToFile(String filename) 
     544{ 
     545        OgrePhaseTextureRenderingRun* r = (OgrePhaseTextureRenderingRun*) 
     546                globalSharedRuns.getRun(ILLUMRUN_PHASE_TEXTURE)->asOgreRenderingRun(); 
     547        Texture* t = (Texture*) TextureManager::getSingleton().getByName(r->getPhaseTextureName()).getPointer(); 
     548         
     549        t->getBuffer()->getRenderTarget()->writeContentsToFile(filename);        
     550} 
    531551 
    532552RenderingRun* OgreIlluminationManager::getGlobalRun(RenderingRunType runType) 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreRenderable.cpp

    r1062 r1425  
    140140                 boundingSphere = billboardSetRenderable->getWorldBoundingSphere(true);*/ 
    141141                 parentParticleSystem->getParentSceneNode()->_updateBounds(); 
    142                  boundingBox = parentParticleSystem->getWorldBoundingBox(true); 
    143                  boundingSphere = parentParticleSystem->getWorldBoundingSphere(true); 
     142                 boundingBox = parentParticleSystem->getParentSceneNode()->_getWorldAABB(); 
     143                 boundingSphere.setRadius( (boundingBox.getMaximum() - boundingBox.getMinimum()).length() / 2.0); 
     144                 boundingSphere.setCenter( (boundingBox.getMaximum() + boundingBox.getMinimum()) / 2.0); 
    144145                 break; 
    145146        default: 
     
    176177                 break; 
    177178         case OGRE_RENDERABLETYPE_BILLBOARDSET: 
    178                         billboardSetRenderable->_notifyCurrentCamera(cam);                
     179                        parentParticleSystem->_notifyCurrentCamera(cam);                  
    179180                 break; 
    180181        default: 
     
    184185        } 
    185186} 
     187 
     188 
     189void OgreRenderable::updateRenderQueue(RenderQueue* rq) 
     190{ 
     191        switch(renderableType) 
     192        { 
     193         case OGRE_RENDERABLETYPE_SUBENTITY: 
     194                        parentEntity->_updateRenderQueue(rq); 
     195                 break; 
     196         case OGRE_RENDERABLETYPE_BILLBOARDSET: 
     197                        parentParticleSystem->_updateRenderQueue(rq);  
     198                 break; 
     199        default: 
     200                 OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR,  
     201                "Unknown renderable type! Check RenderTechnique initializations!",  
     202                "OgreRenderable::notifyCamera"); 
     203        } 
     204} 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreRenderingRun.cpp

    r1351 r1425  
    2929        } 
    3030        bool visit(const Pass* p){return true;} 
    31         void visit(const RenderablePass* rp){} 
     31        void visit(const RenderablePass* rp) 
     32        { 
     33                Renderable* rend = rp->renderable;  
     34                 
     35                if( visibleObjects->count(rend) == 0) 
     36                { 
     37                        (*visibleObjects)[rend] = rend->getMaterial().getPointer()->getName(); 
     38                        rend->setMaterialName(materialName); 
     39                } 
     40        } 
    3241 
    3342}; 
     
    107116} 
    108117 
    109 void OgreRenderingRun::setMaterialForRenderables(String& materialName, RenderQueue* rq) 
     118void OgreRenderingRun::setMaterialForRenderables(String& materialName, RenderQueue* rq,  bool solidsonly) 
    110119{ 
    111120        RenderQueue::QueueGroupIterator queueIt = rq->_getQueueGroupIterator(); 
     
    124133                        MaterialSetVisitor visitor(materialName, &visibleObjects);       
    125134                        solids.acceptVisitor(&visitor, QueuedRenderableCollection::OM_PASS_GROUP); 
    126                         transparents.acceptVisitor(&visitor, QueuedRenderableCollection::OM_SORT_ASCENDING);             
     135                        if(!solidsonly) 
     136                                transparents.acceptVisitor(&visitor, QueuedRenderableCollection::OM_SORT_ASCENDING);             
    127137                }                        
    128138    } 
     
    144154} 
    145155 
    146 void OgreRenderingRun::setMaterialForVisibles(String& materialName, Camera* cam, bool shadowcastersonly) 
     156void OgreRenderingRun::setMaterialForVisibles(String& materialName, Camera* cam, bool shadowcastersonly, bool solidsonly) 
    147157{ 
    148158        SceneManager* sm = Ogre::Root::getSingleton()._getCurrentSceneManager(); 
     
    160170        sm->_findVisibleObjects (cam, shadowcastersonly); 
    161171         
    162         setMaterialForRenderables(materialName, rq); 
     172        setMaterialForRenderables(materialName, rq, solidsonly); 
    163173} 
    164174 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/OgreSharedRuns.cpp

    r1055 r1425  
    201201        float MAXRAD = 0xffffffff; 
    202202        //check bounds 
    203         for(int i = 0; i < commonruns.size(); i++) 
     203        for(unsigned int i = 0; i < commonruns.size(); i++) 
    204204        { 
    205205          
     
    238238} 
    239239 
    240 void OgreSharedRuns::addRenderablesToQueue(RenderQueue* rq) 
     240void OgreSharedRuns::addRenderablesToQueue(RenderQueue* rq, bool checkVisible) 
    241241{ 
    242242        if(child1 != 0) //node 
     
    251251                while(it != itend) 
    252252                {                
    253                         if((*it).first->isVisible()) 
    254                                 rq->addRenderable(((*it).first)->getRenderable()); 
     253                        if(!checkVisible || (*it).first->isVisible()) 
     254                        { 
     255                                //rq->addRenderable(((*it).first)->getRenderable()); 
     256                                ((*it).first)->updateRenderQueue(rq); 
     257                        } 
    255258                        it++; 
    256259                } 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderTechniques/OgreHierarchicalParticleSystemTechnique.cpp

    r1330 r1425  
    33#include "OgreHierarchicalParticleSystemTechnique.h" 
    44#include "OgreChildPSystemRenderingRun.h" 
     5#include "OgreLightVolumeRenderingRun.h" 
    56 
    67OgreHierarchicalParticleSystemTechnique::OgreHierarchicalParticleSystemTechnique( 
     
    4344        if(sharedRuns->getRun(ILLUMRUN_HPP_IMPOSTOR) == 0) 
    4445                sharedRuns->addRun(ILLUMRUN_HPP_IMPOSTOR, createChildPSysRenderingRun());        
    45  
     46         
    4647        ((OgreChildPSystemRenderingRun*) sharedRuns->getRun(ILLUMRUN_HPP_IMPOSTOR)->asOgreRenderingRun())->setNode(node); 
    47         impostorChanged(sharedRuns->getRun(ILLUMRUN_HPP_IMPOSTOR)); 
     48        impostorChanged(sharedRuns->getRun(ILLUMRUN_HPP_IMPOSTOR));      
    4849} 
    4950 
     
    7475} 
    7576 
    76 void OgreHierarchicalParticleSystemTechnique::update(unsigned long frameNum) 
    77 { 
    78         HierarchicalParticleSystemTechnique::update(frameNum); 
    79  
    80         OgreChildPSystemRenderingRun* r = (OgreChildPSystemRenderingRun*)  
    81                                                                                         sharedRuns->getRun(ILLUMRUN_HPP_IMPOSTOR)->asOgreRenderingRun(); 
     77 
     78void OgreHierarchicalParticleSystemTechnique::impostorUpdated(RenderingRun* run) 
     79{ 
     80        OgreChildPSystemRenderingRun* r = (OgreChildPSystemRenderingRun*) run->asOgreRenderingRun();                                                                                     
     81         
    8282        float radius = r->getSmallSysRadius(); 
    8383        if(useVParam) 
     
    155155                OgreHierarchicalParticleSystemTechniqueFactory* f = (OgreHierarchicalParticleSystemTechniqueFactory*) factory; 
    156156                f->VParamRadius = params; 
     157                f->useVParam = true; 
    157158        } 
    158159        void parseFparamRadius(String& params, RenderTechniqueFactory* factory) 
     
    160161                OgreHierarchicalParticleSystemTechniqueFactory* f = (OgreHierarchicalParticleSystemTechniqueFactory*) factory; 
    161162                f->FParamRadius = params; 
     163                f->useFParam = true; 
    162164        } 
    163165 
     
    180182        this->attributeParsers.insert(AttribParserList::value_type("particle_script", (ILLUM_ATTRIBUTE_PARSER) parseScriptName)); 
    181183        this->attributeParsers.insert(AttribParserList::value_type("material", (ILLUM_ATTRIBUTE_PARSER) parseMaterialName)); 
    182         this->attributeParsers.insert(AttribParserList::value_type("vparam_radius", (ILLUM_ATTRIBUTE_PARSER) parseFparamRadius)); 
    183         this->attributeParsers.insert(AttribParserList::value_type("fparam_radius", (ILLUM_ATTRIBUTE_PARSER) parseVparamRadius)); 
     184        this->attributeParsers.insert(AttribParserList::value_type("vparam_radius", (ILLUM_ATTRIBUTE_PARSER) parseVparamRadius)); 
     185        this->attributeParsers.insert(AttribParserList::value_type("fparam_radius", (ILLUM_ATTRIBUTE_PARSER) parseFparamRadius)); 
    184186         
    185187} 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreChildParticlesystemRenderingRun.cpp

    r1337 r1425  
    6969        psysNode->setPosition(center); 
    7070        ParticleSystem* psys = Root::getSingleton()._getCurrentSceneManager()->getParticleSystem(childParticleSystemName); 
    71         psys->_notifyCurrentCamera(impostorCamera); 
    7271         
    7372        psysNode->_updateBounds(); 
     
    111110 
    112111        // 
     112        psys->_notifyCurrentCamera(impostorCamera); 
    113113        psys->_updateRenderQueue(rq); 
    114114         
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreFocusingMapRenderingRun.cpp

    r1125 r1425  
    1818        bool first = true; 
    1919         
    20         for(int i = 0; i < buffersize; i+= 4) 
     20        for(unsigned int i = 0; i < buffersize; i+= 4) 
    2121        { 
    2222                float x = floatbuffer[i]; 
  • GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreSceneCameraDepthRenderingRun.cpp

    r874 r1425  
    4343{ 
    4444         
    45         setMaterialForVisibles(String("GameTools/SceneCameraDepthShader"), playerCamera); 
     45        setMaterialForVisibles(String("GameTools/SceneCameraDepthShader"), playerCamera, false, true); 
    4646         
    4747        RenderTarget* rt = depthTexture->getBuffer().getPointer()->getRenderTarget(); 
Note: See TracChangeset for help on using the changeset viewer.