source: GTP/trunk/Lib/Illum/IllumModule/OgreIllumModule/src/RenderTechniques/OgreDistanceCubeMapRenderTechnique.cpp @ 1725

Revision 1725, 4.3 KB checked in by szirmay, 18 years ago (diff)
RevLine 
[790]1#include "OgreDistanceCubeMapRenderTechnique.h"
2#include "OgreTechniqueGroup.h"
[1722]3#include "OgreCubeMapRenderingRun.h"
[790]4
5OgreDistanceCubeMapRenderTechnique::OgreDistanceCubeMapRenderTechnique(unsigned long startFrame,
6                                                                                                                unsigned long cubeMapUpdateInterval,
7                                                                                                                unsigned int cubeMapResolution,                                                                                         
8                                                                                                                unsigned char texID,
9                                                                                                                bool useDistCalc,
10                                                                                                                bool useFaceAngleCalc,
11                                                                                                                float distTolerance,
12                                                                                                                float angleTolerance,
13                                                                                                                bool updateAllFace,
[1711]14                                                                                                                bool renderSelf,
[1722]15                                                                                                                bool renderEnvironment,
16                                                                                                                String selfMaterial,
17                                                                                                                String environmentMaterial,
[1725]18                                                                                                                int layer,
[790]19                                                                                                                Pass* pass,
20                                                                                                                OgreRenderable* parentRenderable,
21                                                                                                                OgreTechniqueGroup* parentTechniqueGroup)
[1711]22                                                        :
[1725]23                                                        OgreCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, texID, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, selfMaterial, environmentMaterial, layer, pass, parentRenderable, parentTechniqueGroup),
24                                                        CubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup),
25                                                        DistanceCubeMapRenderTechnique(startFrame, cubeMapUpdateInterval, cubeMapResolution, useDistCalc, useFaceAngleCalc, distTolerance, angleTolerance, updateAllFace, renderSelf, renderEnvironment, layer, parentRenderable, parentTechniqueGroup),
[790]26                                                        RenderTechnique(parentRenderable, parentTechniqueGroup)
27{       
[1725]28        switch(layer)
29        {
30                case 0:
31                        texturePostFix = "_DISTANCECUBEMAP";
32                        break;
33                case 1:
34                        texturePostFix = "_DISTANCECUBEMAP_L1";
35                        break;
36                case 2:
37                        texturePostFix = "_DISTANCECUBEMAP_L2";
38                        break;
39                case 3:
40                        texturePostFix = "_DISTANCECUBEMAP_L3";
41                        break;
42                case 4:
43                        texturePostFix = "_DISTANCECUBEMAP_L4";
44                        break;
45                case 5:
46                        texturePostFix = "_DISTANCECUBEMAP_L5";
47                        break;
48                case 6:
49                        texturePostFix = "_DISTANCECUBEMAP_L6";
50                        break;
51        }
52        if(sharedRuns->getRun(cubemapLayer) == 0)
53                sharedRuns->addRun(cubemapLayer, createCubeMapRun());
[1722]54
[1725]55        distanceCubeMapRunChanged(sharedRuns->getRun(cubemapLayer));
[790]56}
57
58
59OgreDistanceCubeMapRenderTechnique::~OgreDistanceCubeMapRenderTechnique()
60{
61
62}
63
64void OgreDistanceCubeMapRenderTechnique::update(unsigned long frameNum)
65{
66        DistanceCubeMapRenderTechnique::update(frameNum);
67}
68
69void OgreDistanceCubeMapRenderTechnique::distanceCubeMapRunChanged(RenderingRun* run)
70{
[1722]71        OgreCubeMapRenderingRun* cuberun =(OgreCubeMapRenderingRun*) (run->asOgreRenderingRun());
72        String cubemapname = cuberun->getCubeMapTextureName();
[790]73       
74        pass->getTextureUnitState(texID)->setTextureName(cubemapname);
75}
76
77void OgreDistanceCubeMapRenderTechnique::distanceCubeMapRunUpdated(RenderingRun* run)
78{
79        GpuProgramParametersSharedPtr fpParams = pass->getFragmentProgramParameters();
[1725]80        Vector3 center = ((OgreSharedRuns*) sharedRuns)->getRootPosition(cubemapLayer);
[790]81        fpParams->setNamedConstant("lastCenter",center);
82}
83
84
[1722]85
[836]86///Technique factory
87OgreDistanceCubeMapRenderTechniqueFactory::OgreDistanceCubeMapRenderTechniqueFactory()
88{
[1711]89        typeName = "DistanceCubeMap";   
[836]90}
91
92OgreRenderTechnique* OgreDistanceCubeMapRenderTechniqueFactory::createInstance(
93                                                                                IllumTechniqueParams* params,
94                                                                                Pass* pass,
95                                                                                OgreRenderable* parentRenderable,
96                                                                                OgreTechniqueGroup* parentTechniqueGroup)
97{       
[1711]98        OgreCubeMapRenderTechniqueFactory::resetParams();
[836]99        texID = 1;
[1722]100        environmentMaterial = "GameTools/DistanceShader";
101        selfMaterial = "GameTools/DistanceShader";
[1711]102        OgreCubeMapRenderTechniqueFactory::parseParams(params);
[836]103        parseParams(params);
[1711]104       
[836]105        OgreDistanceCubeMapRenderTechnique* result = new OgreDistanceCubeMapRenderTechnique(
106                                                                                                startFrame,
107                                                                                                cubeMapUpdateInterval,
108                                                                                                cubeMapResolution,
109                                                                                                texID,
110                                                                                                useDistCalc,
111                                                                                                useFaceAngleCalc,
112                                                                                                distTolerance,
113                                                                                                angleTolerance,
114                                                                                                updateAllFace,
[1711]115                                                                                                renderSelf,
[1722]116                                                                                                renderEnvironment,
117                                                                                                selfMaterial,
118                                                                                                environmentMaterial,
[1725]119                                                                                                layer,
[836]120                                                                                                pass,
121                                                                                                parentRenderable,
122                                                                                                parentTechniqueGroup);
123
124        return result;
125}
126
Note: See TracBrowser for help on using the repository browser.