source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderingRuns/OgreCausticCubeMapRenderingRun.cpp @ 2321

Revision 2321, 3.9 KB checked in by szirmay, 18 years ago (diff)
Line 
1#include "OgreCausticCubeMapRenderingRun.h"
2//#include "OgreIlluminationManager.h"
3#include "OgrePhotonMapRenderingRun.h"
4
5
6
7OgreCausticCubeMapRenderingRun::OgreCausticCubeMapRenderingRun(OgreSharedRuns* sharedRuns,
8                                                                                                                   String name,
9                                                                                                                   unsigned long startFrame,
10                                                                                                                        unsigned long updateInterval,
11                                                                                                                        unsigned int resolution,
12                                                                                                                   String materialName,
13                                                                                                                   unsigned char photonMapTexId,
14                                                                                                                   bool updateAllFace,
15                                                                                                                   float attenuation,
16                                                                                                                   bool useTriangles,
17                                                                                                                   bool blurMap)
18                :CausticCubeMapRenderingRun(startFrame, updateInterval, resolution, updateAllFace)
19                , OgreRenderingRun(startFrame, updateInterval)
20                , RenderingRun(startFrame, updateInterval)
21{
22        this->attenuation = attenuation;
23        this->useTriangles = useTriangles;
24        this->sharedRuns = sharedRuns;
25        this->name = name;
26        this->materialName =  materialName;
27        this->photonMapTexId = photonMapTexId;
28        this->blurMap = blurMap;
29
30        spriteSetName = name + String("_pixelSpriteSet");
31       
32        createCausticCubeMap();
33}
34
35void OgreCausticCubeMapRenderingRun::createCausticCubeMap()
36{
37        causticCubemapTexture = createCubeRenderTexture(name,
38                                                                                                Vector3(0,0,0),
39                                                                                                resolution,
40                                                                                                PF_FLOAT16_RGBA,
41                                                                                                0);
42
43        if(blurMap)
44                bluredCausticCubemapTexture = createCubeRenderTexture(name + "_BLURED",
45                                                                                                Vector3(0,0,0),
46                                                                                                resolution,
47                                                                                                PF_FLOAT16_RGBA,
48                                                                                                0);
49       
50}
51
52void OgreCausticCubeMapRenderingRun::photonMapChanged(RenderingRun* run)
53{
54        Material* mat = (Material*) MaterialManager::getSingleton().getByName(materialName).getPointer();
55        String photonMapName = ((OgrePhotonMapRenderingRun*) run->asOgreRenderingRun())->getPhotonMapTextureName();
56        mat->getTechnique(0)->getPass(0)->getTextureUnitState(photonMapTexId)->setTextureName(photonMapName);
57
58        //rt = TextureManager::getSingleton().getByName(photonMapName);
59        LogManager::getSingleton().logMessage(LML_NORMAL, name + " map: " + photonMapName + " material: " + mat->getName());
60}
61
62void OgreCausticCubeMapRenderingRun::updateCubeFace(int facenum)
63{       
64        RenderTarget* rt = causticCubemapTexture->getBuffer(facenum, 0).getPointer()
65                                                        ->getRenderTarget();
66       
67        Camera* cam = rt->getViewport(0)->getCamera();
68        cam->setNearClipDistance(0.001);
69        cam->setFarClipDistance(2.0);
70        cam->setAspectRatio(1.0);
71        Radian r(Degree(90));
72        cam->setFOVy(r);
73
74        RenderingRun* run = sharedRuns->getRun(ILLUMRUN_PHOTONMAP);
75        String photonMapName = ((OgrePhotonMapRenderingRun*) run->asOgreRenderingRun())->getPhotonMapTextureName();
76        TexturePtr tex = TextureManager::getSingleton().getByName(photonMapName);
77       
78        if(!useTriangles)
79                renderPixelSprites(materialName, rt, tex->getWidth(), tex->getHeight());
80        else
81                renderFullscreenGrid(materialName, rt, tex->getWidth(), tex->getHeight());
82
83        if(blurMap)
84        {
85                rt = bluredCausticCubemapTexture->getBuffer(facenum, 0).getPointer()->getRenderTarget();
86                Material*  mat = (Material*) MaterialManager::getSingleton().getByName("GameTools/BlurCubeFace").getPointer();
87                mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(causticCubemapTexture->getName());
88                mat->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("face", facenum);
89                renderFullscreenQuad("GameTools/BlurCubeFace", rt);
90        }
91
92        //rt->writeContentsToFile("caucube" + this->name + StringConverter::toString(facenum) + ".dds");
93}
94
95bool OgreCausticCubeMapRenderingRun::faceNeedsUpdate(int facenum)
96{       
97        return true;
98}
99
100void OgreCausticCubeMapRenderingRun::freeAllResources()
101{
102        this->bluredCausticCubemapTexture = 0; 
103        TextureManager::getSingleton().remove(name);
104        TextureManager::getSingleton().remove(name + "_BLURED");
105        Root::getSingleton()._getCurrentSceneManager()->destroyCamera(name + "_CAMERA");       
106        Root::getSingleton()._getCurrentSceneManager()->destroyCamera(name + "_BLURED" + "_CAMERA");   
107}
Note: See TracBrowser for help on using the repository browser.