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

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