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

Revision 1546, 21.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        bool grassEnabled;
368        bool trunkLOD;
369
370        // Just override the mandatory create scene method
371        void createScene(void)
372        {
373               
374                config.load("configScene.cfg");
375                mNumTrees = config.getSetting("NumTrees");
376
377                Ogre::String sGrassEnabled = config.getSetting("Grass");
378                grassEnabled = Ogre::StringConverter::parseBool(sGrassEnabled);
379
380                Ogre::String sTrunkLOD = config.getSetting("TrunkLOD");
381                trunkLOD = Ogre::StringConverter::parseBool(sTrunkLOD);
382
383                SceneManager *mSceneMgr = Root::getSingleton().getSceneManager("ExampleSMInstance");
384
385                ColourValue nightLight(0.09,0.07,0.27);
386                ColourValue dayLight(1.0,1.0,1.0);
387                //ColourValue dayLight(0.85,0.88,0.96);
388                ColourValue shadow(0.6,0.6,0.6,1.0);
389                mLightComposite = new LightComposite();
390                //mLightComposite->setDayLight(nightLight);
391                mLightComposite->setDayLight(dayLight);
392                mLightComposite->setNightLight(nightLight);
393                mLightComposite->init(mSceneMgr,mCamera);
394                mLightComposite->setShadowTexturePixelFormat(PF_A8R8G8B8);
395                // ATI
396                // Seems that NVIDIA don't support at all 16 bits FLOAT RGBA textures...!
397                //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT16_RGBA);
398                // NVIDIA
399                //mLightComposite->setShadowTexturePixelFormat(PF_FLOAT32_RGBA);
400                //mLightComposite->setShadowTextureSize(1024);
401                mLightComposite->setShadowTextureSize(512);
402                mLightComposite->setShadowColour(shadow);
403                //mLightComposite->setAmbientColour(nightLight);
404                mLightComposite->setAmbientColour(dayLight);
405                mLightComposite->showShadowMapOverlay(false);
406                mLightComposite->createShadowMapOverlay(0);     
407
408                //mLightComposite->setDayLight(Vector3(1.0,1.0,1.0));
409                //mLightComposite->setNightLight(Vector3(0.0,0.0,0.0));
410
411                //// Define the required skyplane
412                //Plane skyPlane;
413                //// 5000 world units from the camera
414                //skyPlane.d = 5000;
415                //// Above the camera, facing down
416                //skyPlane.normal = -Vector3::UNIT_Y;
417                //// Create the plane 10000 units wide, tile the texture 3 times
418                //mSceneMgr->setSkyPlane(true, skyPlane,"Examples/SpaceSkyPlaneNight",150000,500);
419
420                mSceneMgr->setSkyBox(true, "CloudsSkyBox");
421
422                // Floor plane
423                Plane plane;
424                plane.normal = Vector3::UNIT_Y;
425                plane.d = 100;
426                MeshManager::getSingleton().createPlane("Ground", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
427                        15000, 15000, 200, 200, true, 1, 60, 60, Vector3::UNIT_Z);
428                Entity* pPlaneEnt = mSceneMgr->createEntity("Ground", "Ground");
429                pPlaneEnt->setMaterialName("Examples/GrassFloor");
430                pPlaneEnt->setCastShadows(false);
431
432                SceneNode *terrain = mSceneMgr->getRootSceneNode()->createChildSceneNode();
433                terrain->attachObject(pPlaneEnt);
434                terrain->setPosition(Vector3(0.0,0.0,0.0));
435
436                MeshPtr meshPtr3= (MeshPtr)MeshManager::getSingleton().load("chestnutTrunkLevel3.mesh",
437                        ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
438                if (!meshPtr3.isNull())
439                {
440                        meshPtr3->createManualLodLevel(500,"chestnutTrunkLevel2.mesh");
441                        meshPtr3->createManualLodLevel(1000,"chestnutTrunkLevel1.mesh");
442                        meshPtr3->createManualLodLevel(1300,"chestnutTrunkLevel0.mesh");                       
443                }
444
445                SceneNode *forestNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("forestNode");
446
447                for (unsigned int i = 0; i < Ogre::StringConverter::parseInt(mNumTrees); i++)
448                {
449                        Real xPos = Math::RangeRandom(-5000.0, 5000.0);
450                        Real zPos = Math::RangeRandom(-5000.0, 5000.0);
451
452                        if (i == 0)
453                        {
454                                xPos = 200;
455                                zPos = 0;
456                        }
457                        else if (i == 1)
458                        {
459                                xPos = -200;
460                                zPos = 0;
461                        }                       
462
463                        if ((i == 0) || (i == 1) || !(((xPos < 1000) && (xPos > -2000)) && ((zPos < 1000) && (zPos > -2000))))
464                        {                               
465                                Entity *leaves = mSceneMgr->createEntity("leavesNode_" + StringConverter::toString(i),"chestnutLeavesVisibilityBillboardCloudGroupedIndirectTexturing.mesh");
466                                leaves->setCastShadows(true);                           
467                                SceneNode *leavesNode = forestNode->createChildSceneNode();
468                                leavesNode->setPosition(xPos,120.0,zPos);
469                                leavesNode->attachObject(leaves);
470                                leavesNode->scale(4.0,4.0,4.0);         
471                                leaves->setNormaliseNormals(true);
472
473                                SceneNode *trunkNode;
474                                Entity* trunk;
475                                if (trunkLOD)
476                                {
477                                        trunk = mSceneMgr->createEntity("head1_" + StringConverter::toString(i), "chestnutTrunkLevel3.mesh");
478                                        trunkNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("trunkNode_" + StringConverter::toString(i));
479                                }
480                                else
481                                {
482                                        trunk = mSceneMgr->createEntity("head1_" + StringConverter::toString(i), "chestnutTrunkLevel2.mesh");
483                                        trunkNode = forestNode->createChildSceneNode();
484                                }
485                                trunkNode->attachObject(trunk);                         
486                                trunkNode->setPosition(xPos,-100.0,zPos);
487                                trunkNode->scale(4.0,4.0,4.0);
488                                trunk->setNormaliseNormals(true);
489                        }
490                }
491
492                StaticGeometry* s = mSceneMgr->createStaticGeometry("forestStatic");
493                s->setRegionDimensions(Vector3(1000, 1000, 1000));
494                s->setOrigin(Vector3(-500, 500, 500));
495                s->addSceneNode(forestNode);
496                s->build();
497                forestNode->setVisible(false, true);
498                s->setCastShadows(true);
499                s->setVisible(true);
500
501                // Point light, movable, reddish
502                //ColourValue mMinLightColour(0.7, 0.9, 0.4);
503                //ColourValue mMaxLightColour(0.8, 0.9, 0.4);
504                //Real mMinFlareSize = 400;
505                //Real mMaxFlareSize = 500;
506                //Light *mLight = mSceneMgr->createLight("Light2");
507                //mLight->setType(Light::LT_DIRECTIONAL);
508                //mLight->setDirection(Vector3(-0.5, -1.0, 0.5));
509                //mLight->setCastShadows(true);
510                //mLight->setDiffuseColour(1.0, 1.0, 1.0);     
511                //mLight->setSpecularColour(1.0, 1.0, 1.0);
512
513                //SceneNode *lightNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("lightNode");
514                //lightNode->attachObject(mLight);
515                //mLightComposite->addLight(mLight);
516                //mLightComposite->setCurrentLight(0);
517
518                //SceneNode *sunNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("sunNode");
519                //BillboardSet* bbsSun = mSceneMgr->createBillboardSet("lightbbs", 1);
520                //bbsSun->setMaterialName("Examples/Flare");
521                //Billboard* bb = bbsSun->createBillboard(0,0,0,dayLight);
522                //bb->setDimensions(1500.0,1500.0);
523                //sunNode->attachObject(bbsSun);
524
525                //lightNode->setDirection(Vector3::UNIT_Z);
526                //lightNode->setPosition(Vector3(186.65,561.971,216.371));
527
528                Entity *entityRuinMesh = mSceneMgr->createEntity("ruin","ruin.mesh");
529                entityRuinMesh->setCastShadows(true);
530                SceneNode *snRuinMesh = mSceneMgr->getRootSceneNode()->createChildSceneNode();
531                snRuinMesh->attachObject(entityRuinMesh);               
532                snRuinMesh->translate(0,-110.0,105.0+150.0);
533                snRuinMesh->scale(2.0,2.0,2.0);
534
535                Entity *barrel = mSceneMgr->createEntity("barrel","barrel.mesh");
536                SceneNode *barrelNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("barrelNode");
537                barrelNode->attachObject(barrel);
538                barrelNode->translate(225.0,-20.0,185.0);
539                barrelNode->scale(0.75,0.75,0.75);
540                barrelNode->rotate(Vector3::UNIT_X,Radian(Degree(90.0)));
541                barrel->setCastShadows(true);
542                barrel->setNormaliseNormals(true);
543
544                Entity *butterfly = mSceneMgr->createEntity("butterfly", "butterfly_bones_animated.mesh");
545                SceneNode *butterflyNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("butterflyNode");
546                butterflyNode->setPosition(Vector3(0.0,200.0,3000.0));
547                butterflyNode->attachObject(butterfly);
548                butterflyNode->setPosition(Vector3(-82.5,-45.1,35.0+150.0));
549                butterflyNode->scale(1.0/2.0,1.0/2.0,1.0/2.0);
550                butterfly->setCastShadows(true);
551                butterfly->setNormaliseNormals(true);
552
553                SceneNode *farmNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("farmNode");
554                Entity *farm = mSceneMgr->createEntity("farm","farm.mesh");
555                farm->setCastShadows(true);
556                farm->setNormaliseNormals(true);
557
558                Entity *cow = mSceneMgr->createEntity("cow","cow.mesh");
559                cow->setCastShadows(true);
560                farmNode->attachObject(farm);
561                SceneNode *cowNode = farmNode->createChildSceneNode("cowNode");
562                cowNode->attachObject(cow);
563                cowNode->translate(Vector3(-9.1,7,3.5));
564                farmNode->scale(Vector3(150,150,150));
565                Vector3 positionFarm = Vector3(0.0,200.0,-2200);
566                farmNode->setPosition(positionFarm);
567
568                mCamera->setFOVy(Radian(Degree(60.0)));
569                mCamera->setPosition(Vector3(44.8621, -2.74644, 282.558));
570                mCamera->setOrientation(Quaternion(0.9296, 0.09672, 0.345428, -0.05414));
571
572                if (grassEnabled)
573                {
574                        mGrass = new Grass();
575                        mGrass->setGrassShadowReceiver(false);
576                        mGrass->setGrassScaleRandomRangeMax(Vector3(1.0,1.0,1.0));
577                        mGrass->setGrassScaleRandomRangeMin(Vector3(1.0,0.75,1.0));
578                        mGrass->setGrassHeight(50.0);
579                        mGrass->setGrassWidth(40.0);
580                        mGrass->setGrassFrequency(40);
581                        mGrass->setGrassInterFrequency(30);
582                        mGrass->setGrassMaterial("Examples/GrassBlades");
583                        mGrass->setGrassMeshName("grassblades");
584                        mGrass->setSceneManager(mSceneMgr);
585                        mGrass->setGrassHeightPosition(-100);
586                        mGrass->setGrassLandscapeSizeX(6000);
587                        mGrass->setGrassLandscapeSizeZ(6000);
588                        mGrass->initGrass();
589                }
590
591                SceneNode *targetNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNode");
592                targetNode->setPosition(Vector3(0.0,0.0,0.0));
593                SceneNode *targetNodeFrontTrees = mSceneMgr->getRootSceneNode()->createChildSceneNode("targetNodeFrontTrees");
594                targetNodeFrontTrees->setPosition(Vector3(0.0,0.0,200.0));
595
596                ////// Main character
597                //OgreCharacter *ogre = new OgreCharacter ("Character", mSceneMgr);
598                //ExtendedCamera *exCamera = new ExtendedCamera ("ExtendedCamera", mSceneMgr, mCamera);
599
600                //mFrameListener = new SampleListener (mWindow, mCamera);
601                //static_cast<SampleListener *>(mFrameListener)->setCharacter (ogre);
602                //static_cast<SampleListener *>(mFrameListener)->setExtendedCamera (exCamera);
603        }
604
605        //  // Create new frame listener
606          void createFrameListener(void)
607          {
608              mFrameListener= new SkyPlaneListener(mWindow, mCamera, mSceneMgr);
609        static_cast<SkyPlaneListener *>(mFrameListener)->setGrass(mGrass);
610
611        static_cast<SkyPlaneListener *>(mFrameListener)->setLightComposite(mLightComposite);           
612              mRoot->addFrameListener(mFrameListener);
613          }
614
615        //void createFrameListener(void)
616        //{
617        //      mRoot->addFrameListener(mFrameListener);
618        //}
619
620};
Note: See TracBrowser for help on using the repository browser.