[790] | 1 | #include "OgreCausticCubeMapRenderingRun.h"
|
---|
| 2 | //#include "OgreIlluminationManager.h"
|
---|
| 3 | #include "OgrePhotonMapRenderingRun.h"
|
---|
| 4 |
|
---|
| 5 |
|
---|
| 6 |
|
---|
| 7 | OgreCausticCubeMapRenderingRun::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,
|
---|
[1055] | 14 | bool updateAllFace,
|
---|
[1351] | 15 | float attenuation,
|
---|
| 16 | bool useTriangles)
|
---|
[790] | 17 | :CausticCubeMapRenderingRun(startFrame, updateInterval, resolution, updateAllFace)
|
---|
| 18 | , OgreRenderingRun(startFrame, updateInterval)
|
---|
| 19 | , RenderingRun(startFrame, updateInterval)
|
---|
| 20 | {
|
---|
[1055] | 21 | this->attenuation = attenuation;
|
---|
[1351] | 22 | this->useTriangles = useTriangles;
|
---|
[790] | 23 | this->sharedRuns = sharedRuns;
|
---|
| 24 | this->name = name;
|
---|
| 25 | this->materialName = materialName;
|
---|
| 26 | this->photonMapTexId = photonMapTexId;
|
---|
[949] | 27 |
|
---|
| 28 | spriteSetName = name + String("_pixelSpriteSet");
|
---|
[790] | 29 |
|
---|
| 30 | createCausticCubeMap();
|
---|
| 31 | }
|
---|
| 32 |
|
---|
| 33 | void OgreCausticCubeMapRenderingRun::createCausticCubeMap()
|
---|
| 34 | {
|
---|
| 35 | causticCubemapTexture = createCubeRenderTexture(name,
|
---|
| 36 | Vector3(0,0,0),
|
---|
| 37 | resolution,
|
---|
| 38 | PF_FLOAT16_RGBA,
|
---|
| 39 | 0);
|
---|
| 40 |
|
---|
| 41 | }
|
---|
| 42 |
|
---|
| 43 | void OgreCausticCubeMapRenderingRun::photonMapChanged(RenderingRun* run)
|
---|
| 44 | {
|
---|
| 45 | Material* mat = (Material*) MaterialManager::getSingleton().getByName(materialName).getPointer();
|
---|
| 46 | String photonMapName = ((OgrePhotonMapRenderingRun*) run->asOgreRenderingRun())->getPhotonMapTextureName();
|
---|
| 47 | mat->getTechnique(0)->getPass(0)->getTextureUnitState(photonMapTexId)->setTextureName(photonMapName);
|
---|
[949] | 48 |
|
---|
| 49 | //rt = TextureManager::getSingleton().getByName(photonMapName);
|
---|
| 50 | LogManager::getSingleton().logMessage(LML_NORMAL, name + " map: " + photonMapName + " material: " + mat->getName());
|
---|
[790] | 51 | }
|
---|
| 52 |
|
---|
| 53 | void OgreCausticCubeMapRenderingRun::updateCubeFace(int facenum)
|
---|
| 54 | {
|
---|
| 55 | RenderTarget* rt = causticCubemapTexture->getBuffer(facenum, 0).getPointer()
|
---|
| 56 | ->getRenderTarget();
|
---|
| 57 |
|
---|
| 58 | Camera* cam = rt->getViewport(0)->getCamera();
|
---|
| 59 | cam->setNearClipDistance(0.001);
|
---|
| 60 | cam->setFarClipDistance(2.0);
|
---|
| 61 | cam->setAspectRatio(1.0);
|
---|
| 62 | Radian r(Degree(90));
|
---|
| 63 | cam->setFOVy(r);
|
---|
| 64 |
|
---|
| 65 | RenderingRun* run = sharedRuns->getRun(ILLUMRUN_PHOTONMAP);
|
---|
| 66 | String photonMapName = ((OgrePhotonMapRenderingRun*) run->asOgreRenderingRun())->getPhotonMapTextureName();
|
---|
| 67 | TexturePtr tex = TextureManager::getSingleton().getByName(photonMapName);
|
---|
[1351] | 68 |
|
---|
| 69 | if(!useTriangles)
|
---|
| 70 | renderPixelSprites(materialName, rt, tex->getWidth(), tex->getHeight());
|
---|
| 71 | else
|
---|
| 72 | renderFullscreenGrid(materialName, rt, tex->getWidth(), tex->getHeight());
|
---|
[790] | 73 |
|
---|
[949] | 74 | //rt->writeContentsToFile("caucube" + this->name + StringConverter::toString(facenum) + ".dds");
|
---|
[790] | 75 | }
|
---|
| 76 |
|
---|
| 77 | bool OgreCausticCubeMapRenderingRun::faceNeedsUpdate(int facenum)
|
---|
| 78 | {
|
---|
| 79 | return true;
|
---|
| 80 | }
|
---|