source: GTP/trunk/App/Demos/Illum/IBRBillboardCloudTrees/OGRE/IBRTreesOGRE/include/IndirectTexturing.h @ 1493

Revision 1493, 20.2 KB checked in by igarcia, 18 years ago (diff)
Line 
1#include "ExampleApplication.h"
2#include "ExtendedCamera.h"
3#include "Grass.h"
4#include <vector>
5#include <OgreVector3.h>
6#include "LightComposite.h"
7#include <OgreOSMScene.h>
8#include <OgreConfigFile.h>
9
10/**
11        Callback handler to post-process created objects.
12*/
13class OSceneCallback : public OSMSceneCallbacks
14{
15        public:
16                // We override the OnCreate method for cameras (See IXMLSceneCallbacks class)
17                void OnCameraCreate(Ogre::Camera* pCamera, TiXmlElement* pCameraDesc)
18                {
19                        // If a camera of name "FirstCamera" is loaded, it will be set as the default current
20                        if(pCamera->getName() == "FirstCamera")
21                                Ogre::Root::getSingleton().getAutoCreatedWindow()->getViewport(0)->setCamera(pCamera);
22                }
23
24
25};
26
27class SampleListener : public ExampleFrameListener
28{
29protected:
30        // References to the main character and the camera
31        Character *mChar;
32        ExtendedCamera *mExCamera;
33
34        // Camera mode - Now supports 1st person, 3rd person (chasing) and 3rd person (fixed)
35        unsigned int mMode;
36        AnimationState* mCharacterAnimState;
37
38public:
39
40        SampleListener(RenderWindow* win, Camera* cam)
41                : ExampleFrameListener(win, cam)
42        {
43                mChar = 0;
44                mExCamera = 0;
45                mMode = 0;
46                mMoveSpeed = 1000;
47        }
48
49        void setCharacter (Character *character) {
50                mChar = character;
51                mCharacterAnimState = mChar->getEntity()->getAnimationState("Fly");
52                mCharacterAnimState->setEnabled(true);
53                mCharacterAnimState->setLoop(true);
54        }
55
56        void setExtendedCamera (ExtendedCamera *cam) {
57                mExCamera = cam;
58        }
59
60        bool frameStarted(const FrameEvent& evt)
61        {
62                mInputDevice->capture ();
63
64                if (mChar) {
65                        mChar->update (evt.timeSinceLastFrame, mInputDevice);
66
67                        if (mExCamera) {
68                                mExCamera->update (evt.timeSinceLastFrame,
69                                        mChar->getCameraNode ()->getWorldPosition (),
70                                        mChar->getSightNode ()->getWorldPosition ());
71
72                        }
73                }
74
75                mCharacterAnimState->addTime(evt.timeSinceLastFrame);
76
77                // Exit if we press Esc
78                if (mInputDevice->isKeyDown (KC_ESCAPE))
79                        return false;
80
81                return true;
82        }
83};
84
85class SkyPlaneListener : public ExampleFrameListener
86{
87protected:
88        // References to the main character and the camera
89        SceneManager *mSceneMgr;
90        Grass *mGrass;
91        LightComposite *mLightComposite;
92
93        // Create the scene loader
94        OSMScene* mOScene;
95
96        // Camera mode - Now supports 1st person, 3rd person (chasing) and 3rd person (fixed)
97        unsigned int mMode;
98        AnimationState *mAnimState;
99
100        // Gametools 8/11/2005 - Isma
101        Real mAnimationSpeed;
102        AnimationState* mCharacterAnimState;
103        Real mFactorAnimationSpeed;
104        Real mAngle;
105        Real mStepAngle;
106
107        unsigned int mFrame;
108public:
109
110
111        void loadScene(Ogre::String filename)
112        {
113                // Create an oE_Loader Callback object to post-process created objects
114                OSceneCallback oeCallback;
115               
116                mOScene = new OSMScene(mSceneMgr, mWindow);
117
118                // Initialises with the scene to be loaded and the callback if requiered
119                mOScene->initialise(filename.c_str(), &oeCallback);
120
121                // create and setup the scene in the root node
122                mOScene->createScene();
123        }
124
125        SkyPlaneListener(RenderWindow* win, Camera* cam, SceneManager *sceneMgr)
126                : ExampleFrameListener(win, cam)
127        {
128                //showDebugOverlay(false);
129                mSceneMgr = sceneMgr;
130                mMoveScale = 1;
131                mRotScale = 0.025;
132                mAngle = 0.0;
133                mStepAngle = 10.0;
134
135                Ogre::ConfigFile config;
136                config.load("configScene.cfg");
137                Ogre::String moveSpeed = config.getSetting("MoveSpeed");
138                mMoveSpeed = Ogre::StringConverter::parseReal(moveSpeed);
139
140                showDebugOverlay(false);
141                //createCameraAutoTracking();   
142
143                SceneNode *snButterfly = mSceneMgr->getSceneNode("butterflyNode");
144                Entity *entityButterfly = (Entity*) snButterfly->getAttachedObject(0);
145                mCharacterAnimState = entityButterfly->getAnimationState("Fly");
146                mCharacterAnimState->setEnabled(true);
147                mCharacterAnimState->setLoop(true);
148
149                mFrame = 0;
150                mFactorAnimationSpeed = 2.0;
151                //mFactorAnimationSpeed = 0.1;
152        }
153
154        void createCameraAutoTracking()
155        {
156                SceneNode *cameraSceneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode");
157                cameraSceneNode->attachObject(mCamera);
158                SceneNode *entitySceneNode = mSceneMgr->getSceneNode("butterflyNode");
159                SceneNode *targetNode = mSceneMgr->getSceneNode("targetNode");
160                //SceneNode *snLight = mSceneMgr->getSceneNode("lightNode");
161                cameraSceneNode->setAutoTracking(true,targetNode);
162                //cameraSceneNode->setAutoTracking(true,snLight);
163                cameraSceneNode->translate(Vector3(300.0,0.0,0.0));
164                // set up spline animation of node
165                Animation* anim = mSceneMgr->createAnimation("CameraTrack",10);
166                // Spline it for nice curves
167                anim->setInterpolationMode(Animation::IM_SPLINE);
168                // Create a track to animate the camera's node
169                NodeAnimationTrack* track = anim->createNodeTrack(0, cameraSceneNode);
170                //AnimationTrack* track = anim->createTrack(0, snLight);               
171                // Setup keyframes
172                TransformKeyFrame* key = track->createNodeKeyFrame(0); // startposition
173                key->setTranslate(Vector3(0.0,0.0,300.0));
174                key = track->createNodeKeyFrame(2.5);
175                key->setTranslate(Vector3(-600.0,0.0,0.0));
176                key = track->createNodeKeyFrame(5);
177                key->setTranslate(Vector3(0.0,0.0,-600.0));
178                key = track->createNodeKeyFrame(7.5);
179                key->setTranslate(Vector3(600.0,0.0,0.0));     
180                key = track->createNodeKeyFrame(10);
181                key->setTranslate(Vector3(0.0,0.0,300.0));
182
183                // Create a new animation state to track this
184                mAnimState = mSceneMgr->createAnimationState("CameraTrack");
185                mAnimState->setEnabled(true);
186                mAnimState->setLoop(true);
187        }
188
189        void setGrass(Grass *grass)
190        {
191                mGrass = grass;
192        }
193
194        void setLightComposite(LightComposite *lightComposite)
195        {
196                loadScene("../../media/scene/scene.OSM");
197                mLightComposite = lightComposite;
198        }
199
200        bool frameStarted(const FrameEvent& evt)
201        {
202                mLightComposite->update(mInputDevice);
203
204                /*
205                mAnimState->addTime(evt.timeSinceLastFrame * 0.5 * mFactorAnimationSpeed);
206                //mGrass->waveGrass(evt.timeSinceLastFrame);
207                //SceneNode *snLight = mSceneMgr->getSceneNode("bulletaLanternNode");
208                SceneNode *snLight = mSceneMgr->getSceneNode("lightNode");             
209
210                if (mInputDevice->isKeyDown(KC_I))
211                {
212                        snLight->setPosition(snLight->getPosition() + Vector3(0.0,0.0,10.0));   
213                }
214                if (mInputDevice->isKeyDown(KC_K))
215                {
216                        snLight->setPosition(snLight->getPosition() + Vector3(0.0,0.0,-10.0)); 
217                }
218                if (mInputDevice->isKeyDown(KC_J))
219                {
220                        snLight->translate(-10.0,0.0,0.0);                     
221                }
222                if (mInputDevice->isKeyDown(KC_L))
223                {
224                        snLight->translate(10.0,0.0,0.0);                       
225                }
226                if (mInputDevice->isKeyDown(KC_U))
227                {
228                        snLight->translate(0.0,10.0,0.0);
229                }
230                if (mInputDevice->isKeyDown(KC_O))
231                {
232                        snLight->translate(0.0,-10.0,0.0);                     
233                }
234
235                if ((mAngle < -45) && (mStepAngle < 0))
236                {                       
237                        mStepAngle = -mStepAngle;
238                }
239                if ((mAngle > 45) && (mStepAngle > 0))
240                {
241                        mStepAngle = -mStepAngle;
242                }
243                mAngle = mAngle + mStepAngle;
244                snLight->rotate(Vector3::UNIT_X,Radian(Degree(mStepAngle)));
245                Real sunHeight;
246                Real sunShift;
247                SceneNode *snSun = mSceneMgr->getSceneNode("sunNode");
248                sunHeight = -mAngle * 20.0;
249                sunShift = -mAngle * 400.0;
250                snSun->setPosition(0.0,2000.0,0.0);
251                snSun->translate(0.0,sunHeight,sunShift);
252                //LogManager::getSingleton().logMessage("sunHeight:" + StringConverter::toString(sunHeight));
253
254                //ColourValue newColour;
255                //Real intensity;
256                //intensity = 1.0 - (Math::Abs(mAngle) + 45.0) / 90.0;
257                //newColour.r = mLightComposite->getNightLight().r + (mLightComposite->getRangeLight().r * intensity);
258                //newColour.g = mLightComposite->getNightLight().g + (mLightComposite->getRangeLight().g * intensity);
259                //newColour.b = mLightComposite->getNightLight().b + (mLightComposite->getRangeLight().b * intensity);
260                //mLightComposite->setAmbientColour(newColour);
261
262                Light *light = mLightComposite->getLight(0);
263
264                //ColourValue newDiffuseColour;
265                //ColourValue diffuseDarkColour(0.0,0.0,0.0);
266                //ColourValue diffuseBrightColour(0.7,0.8,1.0);
267                //ColourValue diffuseRange = diffuseBrightColour - diffuseDarkColour;
268                //newDiffuseColour.r = diffuseDarkColour.r + (diffuseRange.r * intensity);
269                //newDiffuseColour.g = diffuseDarkColour.g + (diffuseRange.g * intensity);
270                //newDiffuseColour.b = diffuseDarkColour.b + (diffuseRange.b * intensity);
271                light->setDiffuseColour(ColourValue(1.0,1.0,1.0));
272                light->setSpecularColour(ColourValue(1.0,1.0,1.0));
273
274                Vector3 dir=Vector3(snSun->getPosition());
275                dir.normalise();
276                light->setDirection(dir);
277                LogManager::getSingleton().logMessage("LightDirection:" + StringConverter::toString(light->getDirection()));
278
279                GpuProgramParametersSharedPtr vertParams,fragParams;
280                MaterialPtr mat = MaterialManager::getSingleton().getByName("chestnutLeavesBillboardCloudGroupMaterial0");
281                vertParams = mat->getBestTechnique()->getPass(0)->getVertexProgramParameters();
282                //vertParams->setNamedConstant("lightDirection",dir);
283                fragParams = mat->getBestTechnique()->getPass(0)->getFragmentProgramParameters();
284                //fragParams->setNamedConstant("Kd",intensity);
285
286                //ColourValue newShadowColour;
287                //ColourValue darkShadow(0.4,0.4,0.4);
288                //ColourValue lightShadow(0.8,0.8,0.8);
289                //ColourValue shadowRange = lightShadow - darkShadow;
290                //newShadowColour.r = darkShadow.r + (shadowRange.r * intensity);
291                //newShadowColour.g = darkShadow.g + (shadowRange.g * intensity);
292                //newShadowColour.b = darkShadow.b + (shadowRange.b * intensity);
293                //mLightComposite->setShadowColour(newShadowColour);
294
295                //BillboardSet *bbs = mSceneMgr->getBillboardSet("lightbbs");
296                //bbs->getBillboard(0)->setColour(newColour);
297
298                // Gametools 8/11/2005 - Isma
299                // When recording....
300                //mAnimationSpeed = Math::RangeRandom(0.25*evt.timeSinceLastFrame,0.5*evt.timeSinceLastFrame);
301                mAnimationSpeed = Math::RangeRandom(evt.timeSinceLastFrame*1000.0,evt.timeSinceLastFrame*1200.0);
302               
303                //mLightComposite->showDebugShadowMap(0);
304                */
305                SceneNode *butterflyNode = mSceneMgr->getSceneNode("butterflyNode");
306                Entity* butterfly = (Entity*)butterflyNode->getAttachedObject(0);
307                Ogre::AnimationState* characterAnimState = butterfly ->getAnimationState("Fly");
308                characterAnimState->setEnabled(true);
309                characterAnimState->setLoop(true);
310                characterAnimState->addTime(evt.timeSinceLastFrame);
311
312
313                static Ogre::Real currentTime = 0;
314
315                // We update all loaded animations each frame
316                Ogre::SceneManager::AnimationIterator animationIt = mSceneMgr->getAnimationIterator();
317
318                while(animationIt.hasMoreElements())
319                {
320                        Ogre::Animation* animation = animationIt.getNext();
321                       
322                        const Ogre::Animation::NodeTrackList& trackList = animation->_getNodeTrackList();
323                       
324                        Ogre::Animation::NodeTrackList::const_iterator it = trackList.begin();
325                        Ogre::Animation::NodeTrackList::const_iterator iend = trackList.end();
326
327                        for(; it != iend; ++it) {
328                                const Ogre::NodeAnimationTrack* track = it->second;
329                                track->getAssociatedNode()->resetToInitialState();
330                        }
331                       
332                        currentTime += evt.timeSinceLastFrame;
333                        animation->apply(currentTime);
334                }               
335
336                return ExampleFrameListener::frameStarted(evt);
337        }
338
339        bool frameEnded(const FrameEvent& evt)
340        {
341                return ExampleFrameListener::frameEnded(evt);
342        }
343};
344
345class SkyPlaneApplication : public ExampleApplication
346{
347public:
348        std::vector<Vector3> vVertexs;
349
350        SkyPlaneApplication()
351        {
352        }
353
354
355
356
357protected:
358
359        // Gametools 8/11/2005
360        // Main character
361        OgreCharacter *ogre;
362        ExtendedCamera *exCamera;
363        Grass *mGrass;
364        LightComposite *mLightComposite;
365        Ogre::ConfigFile config;
366        Ogre::String mNumTrees;
367
368        // Just override the mandatory create scene method
369        void createScene(void)
370        {
371               
372                config.load("configScene.cfg");
373                mNumTrees = config.getSetting("NumTrees");
374
375                SceneManager *mSceneMgr = Root::getSingleton().getSceneManager("ExampleSMInstance");
376
377                ColourValue nightLight(0.09,0.07,0.27);
378                ColourValue dayLight(1.0,1.0,1.0);
379                //ColourValue dayLight(0.85,0.88,0.96);
380                ColourValue shadow(0.6,0.6,0.6,1.0);
381                mLightComposite = new LightComposite();
382                //mLightComposite->setDayLight(nightLight);
383                mLightComposite->setDayLight(dayLight);
384                mLightComposite->setNightLight(nightLight);
385                mLightComposite->init(mSceneMgr,mCamera);
386                mLightComposite->setShadowTexturePixelFormat(PF_A8R8G8B8);
387                // ATI
388                // Seems that NVIDIA don't support at all 16 bits FLOAT RGBA textures...!
389                //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT16_RGBA);
390                // NVIDIA
391                //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT32_RGBA);
392                mLightComposite->setShadowTextureSize(1024);
393                //mLightComposite->setShadowTextureSize(2048);
394                mLightComposite->setShadowColour(shadow);
395                //mLightComposite->setAmbientColour(nightLight);
396                mLightComposite->setAmbientColour(dayLight);
397                mLightComposite->showShadowMapOverlay(false);
398                mLightComposite->createShadowMapOverlay(0);     
399
400                //mLightComposite->setDayLight(Vector3(1.0,1.0,1.0));
401                //mLightComposite->setNightLight(Vector3(0.0,0.0,0.0));
402
403                //// Define the required skyplane
404                //Plane skyPlane;
405                //// 5000 world units from the camera
406                //skyPlane.d = 5000;
407                //// Above the camera, facing down
408                //skyPlane.normal = -Vector3::UNIT_Y;
409                //// Create the plane 10000 units wide, tile the texture 3 times
410                //mSceneMgr->setSkyPlane(true, skyPlane,"Examples/SpaceSkyPlaneNight",150000,500);
411
412                mSceneMgr->setSkyBox(true, "CloudsSkyBox");
413
414                // Floor plane
415                Plane plane;
416                plane.normal = Vector3::UNIT_Y;
417                plane.d = 100;
418                MeshManager::getSingleton().createPlane("Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
419                        15000, 15000, 200, 200, true, 1, 60, 60, Vector3::UNIT_Z);
420                Entity* pPlaneEnt = mSceneMgr->createEntity("Ground", "Ground");
421                pPlaneEnt->setMaterialName("Examples/GrassFloor");
422                pPlaneEnt->setCastShadows(false);
423
424                SceneNode *terrain = mSceneMgr->getRootSceneNode()->createChildSceneNode();
425                terrain->attachObject(pPlaneEnt);
426                terrain->setPosition(Vector3(0.0,0.0,0.0));
427
428                SceneNode *forestNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("forestNode");
429
430                for (unsigned int i = 0; i < Ogre::StringConverter::parseInt(mNumTrees); i++)
431                {
432                        Real xPos = Math::RangeRandom(-5000.0, 5000.0);
433                        Real zPos = Math::RangeRandom(-5000.0, 5000.0);
434
435                        if (i == 0)
436                        {
437                                xPos = 200;
438                                zPos = 0;
439                        }
440                        else if (i == 1)
441                        {
442                                xPos = -200;
443                                zPos = 0;
444                        }                       
445
446                        if ((i == 0) || (i == 1) || !(((xPos < 1000) && (xPos > -2000)) && ((zPos < 1000) && (zPos > -2000))))
447                        {                               
448                                Entity *leaves = mSceneMgr->createEntity("leavesNode_" + StringConverter::toString(i),"chestnutLeavesVisibilityBillboardCloudGroupedIndirectTexturingLOD02.mesh");
449                                leaves->setCastShadows(true);                           
450                                SceneNode *leavesNode = forestNode->createChildSceneNode();
451                                leavesNode->setPosition(xPos,120.0,zPos);
452                                leavesNode->attachObject(leaves);
453                                leavesNode->scale(4.0,4.0,4.0);         
454                                leaves->setNormaliseNormals(true);
455
456                                SceneNode *trunkNode;
457                                Entity* trunk;
458                                trunk = mSceneMgr->createEntity("head1_" + StringConverter::toString(i), "chestnutTrunkLevel2.mesh");
459                                trunkNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("trunkNode_" + StringConverter::toString(i));
460                                trunkNode->attachObject(trunk);                         
461                                trunkNode->setPosition(xPos,120.0,zPos);
462                                trunkNode->scale(4.0,4.0,4.0);
463                                trunk->setNormaliseNormals(true);
464                        }
465                }
466
467                StaticGeometry* s = mSceneMgr->createStaticGeometry("forestStatic");
468                s->setRegionDimensions(Vector3(1000, 1000, 1000));
469                s->setOrigin(Vector3(-500, 500, 500));
470                s->addSceneNode(forestNode);
471                s->build();
472                forestNode->setVisible(false, true);
473                s->setCastShadows(true);
474                s->setVisible(true);
475
476                // Point light, movable, reddish
477                //ColourValue mMinLightColour(0.7, 0.9, 0.4);
478                //ColourValue mMaxLightColour(0.8, 0.9, 0.4);
479                //Real mMinFlareSize = 400;
480                //Real mMaxFlareSize = 500;
481                //Light *mLight = mSceneMgr->createLight("Light2");
482                //mLight->setType(Light::LT_DIRECTIONAL);
483                //mLight->setDirection(Vector3(-0.5, -1.0, 0.5));
484                //mLight->setCastShadows(true);
485                //mLight->setDiffuseColour(1.0, 1.0, 1.0);     
486                //mLight->setSpecularColour(1.0, 1.0, 1.0);
487
488                //SceneNode *lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("lightNode");
489                //lightNode->attachObject(mLight);
490                //mLightComposite->addLight(mLight);
491                //mLightComposite->setCurrentLight(0);
492
493                //SceneNode *sunNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("sunNode");
494                //BillboardSet* bbsSun = mSceneMgr->createBillboardSet("lightbbs", 1);
495                //bbsSun->setMaterialName("Examples/Flare");
496                //Billboard* bb = bbsSun->createBillboard(0,0,0,dayLight);
497                //bb->setDimensions(1500.0,1500.0);
498                //sunNode->attachObject(bbsSun);
499
500                //lightNode->setDirection(Vector3::UNIT_Z);
501                //lightNode->setPosition(Vector3(186.65,561.971,216.371));
502
503                Entity *entityRuinMesh = mSceneMgr->createEntity("ruin","ruin.mesh");
504                entityRuinMesh->setCastShadows(true);
505                SceneNode *snRuinMesh = mSceneMgr->getRootSceneNode()->createChildSceneNode();
506                snRuinMesh->attachObject(entityRuinMesh);               
507                snRuinMesh->translate(0,-110.0,105.0+150.0);
508                snRuinMesh->scale(2.0,2.0,2.0);
509
510                Entity *barrel = mSceneMgr->createEntity("barrel","barrel.mesh");
511                SceneNode *barrelNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("barrelNode");
512                barrelNode->attachObject(barrel);
513                barrelNode->translate(225.0,-20.0,185.0);
514                barrelNode->scale(0.75,0.75,0.75);
515                barrelNode->rotate(Vector3::UNIT_X,Radian(Degree(90.0)));
516                barrel->setCastShadows(true);
517                barrel->setNormaliseNormals(true);
518
519                Entity *butterfly = mSceneMgr->createEntity("butterfly", "butterfly_bones_animated.mesh");
520                SceneNode *butterflyNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("butterflyNode");
521                butterflyNode->setPosition(Vector3(0.0,200.0,3000.0));
522                butterflyNode->attachObject(butterfly);
523                butterflyNode->setPosition(Vector3(-82.5,-45.1,35.0+150.0));
524                butterflyNode->scale(1.0/2.0,1.0/2.0,1.0/2.0);
525                butterfly->setCastShadows(true);
526                butterfly->setNormaliseNormals(true);
527
528                SceneNode *farmNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("farmNode");
529                Entity *farm = mSceneMgr->createEntity("farm","farm.mesh");
530                farm->setCastShadows(true);
531                farm->setNormaliseNormals(true);
532
533                Entity *cow = mSceneMgr->createEntity("cow","cow.mesh");
534                cow->setCastShadows(true);
535                farmNode->attachObject(farm);
536                SceneNode *cowNode = farmNode->createChildSceneNode("cowNode");
537                cowNode->attachObject(cow);
538                cowNode->translate(Vector3(-9.1,7,3.5));
539                farmNode->scale(Vector3(150,150,150));
540                Vector3 positionFarm = Vector3(0.0,200.0,-2200);
541                farmNode->setPosition(positionFarm);
542
543                mCamera->setFOVy(Radian(Degree(60.0)));
544                mCamera->setPosition(Vector3(44.8621, -2.74644, 282.558));
545                mCamera->setOrientation(Quaternion(0.9296, 0.09672, 0.345428, -0.05414));
546
547                mGrass = new Grass();
548                mGrass->setGrassShadowReceiver(false);
549                mGrass->setGrassScaleRandomRangeMax(Vector3(1.0,1.0,1.0));
550                mGrass->setGrassScaleRandomRangeMin(Vector3(1.0,0.75,1.0));
551                mGrass->setGrassHeight(50.0);
552                mGrass->setGrassWidth(40.0);
553                mGrass->setGrassFrequency(30);
554                mGrass->setGrassInterFrequency(20);
555                mGrass->setGrassMaterial("Examples/GrassBlades");
556                mGrass->setGrassMeshName("grassblades");
557                mGrass->setSceneManager(mSceneMgr);
558                mGrass->setGrassHeightPosition(-100);
559                mGrass->setGrassLandscapeSizeX(4000);
560                mGrass->setGrassLandscapeSizeZ(4000);
561                mGrass->initGrass();
562
563                SceneNode *targetNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNode");
564                targetNode->setPosition(Vector3(0.0,0.0,0.0));
565                SceneNode *targetNodeFrontTrees = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNodeFrontTrees");
566                targetNodeFrontTrees->setPosition(Vector3(0.0,0.0,200.0));
567
568                ////// Main character
569                //OgreCharacter *ogre = new OgreCharacter ("Character", mSceneMgr);
570                //ExtendedCamera *exCamera = new ExtendedCamera ("ExtendedCamera", mSceneMgr, mCamera);
571
572                //mFrameListener = new SampleListener (mWindow, mCamera);
573                //static_cast<SampleListener *>(mFrameListener)->setCharacter (ogre);
574                //static_cast<SampleListener *>(mFrameListener)->setExtendedCamera (exCamera);
575        }
576
577        //  // Create new frame listener
578          void createFrameListener(void)
579          {
580              mFrameListener= new SkyPlaneListener(mWindow, mCamera, mSceneMgr);
581        static_cast<SkyPlaneListener *>(mFrameListener)->setGrass(mGrass);
582
583        static_cast<SkyPlaneListener *>(mFrameListener)->setLightComposite(mLightComposite);           
584              mRoot->addFrameListener(mFrameListener);
585          }
586
587        //void createFrameListener(void)
588        //{
589        //      mRoot->addFrameListener(mFrameListener);
590        //}
591
592};
Note: See TracBrowser for help on using the repository browser.