WaterMesh implements the water simulation.
Ejemplo n.º 1
0
		// Just override the mandatory create scene method
		public override void CreateScene()
		{
			RAND = new Random( 0 ); // najak: use a time-based seed
			GuiMgr = OverlayManager.Instance.Elements;
			scene.AmbientLight = new ColorEx( 0.75f, 0.75f, 0.75f ); // default Ambient Light
			// Customize Controls - speed up camera and slow down the input update rate
			this.camSpeed = 5.0f;
			inputInterval = inputTimer = 0.02f;

			// Create water mesh and entity, and attach to sceneNode
			waterMesh = new WaterMesh( "WaterMesh", PLANE_SIZE, CMPLX );
			waterEntity = scene.CreateEntity( "WaterEntity", "WaterMesh" );
			SceneNode waterNode = scene.RootSceneNode.CreateChildSceneNode();
			waterNode.AttachObject( waterEntity );

			// Add Ogre head, give it it's own node
			headNode = waterNode.CreateChildSceneNode();
			Entity ent = scene.CreateEntity( "head", "ogrehead.mesh" );
			headNode.AttachObject( ent );

			// Create the camera node, set its position & attach camera
			camera.Yaw( -45f );
			camera.Move( new Vector3( 1500f, 700f, PLANE_SIZE + 700f ) );
			camera.LookAt( new Vector3( PLANE_SIZE / 2f, 300f, PLANE_SIZE / 2f ) );
			camera.SetAutoTracking( false, headNode ); // Autotrack the head, but it isn't working right

			//scene.SetFog(FogMode.Exp, ColorEx.White, 0.000020f); // add Fog for fun, cuz we can

			// show overlay
			waterOverlay = OverlayManager.Instance.GetByName( "Example/WaterOverlay" );
			waterOverlay.Show();

			// Create Rain Emitter, but default Rain to OFF
			particleSystem = ParticleSystemManager.Instance.CreateSystem( "rain", "Examples/Water/Rain" );
			particleEmitter = particleSystem.GetEmitter( 0 );
			particleEmitter.EmissionRate = 0f;

			// Attach Rain Emitter to SceneNode, and place it 3000f above the water surface
			SceneNode rNode = scene.RootSceneNode.CreateChildSceneNode();
			rNode.Translate( new Vector3( PLANE_SIZE / 2.0f, 3000, PLANE_SIZE / 2.0f ) );
			rNode.AttachObject( particleSystem );
			particleSystem.FastForward( 20 ); // Fastforward rain to make it look natural

			// It can't be set in .particle file, and we need it ;)
			//particleSystem.Origin = BillboardOrigin.BottomCenter;

			// Set Lighting
			lightNode = scene.RootSceneNode.CreateChildSceneNode();
			lightSet = scene.CreateBillboardSet( "Lights", 20 );
			lightSet.MaterialName = "Particles/Flare";
			lightNode.AttachObject( lightSet );
			SetLighting( "Ambient" ); // Add Lights - added by Najak to show lighted Water conditions - cool!

			#region STUBBED LIGHT ANIMATION
			// Create a new animation state to track this
			// TODO: Light Animation not working.
			//this.animState = scene.CreateAnimationState("WaterLight");
			//this.animState.Time = 0f;
			//this.animState.IsEnabled = false;

			// set up spline animation of light node.  Create random Spline
			Animation anim = scene.CreateAnimation( "WaterLight", 20 );
			AnimationTrack track = anim.CreateNodeTrack( 0, this.lightNode );
			TransformKeyFrame key = (TransformKeyFrame)track.CreateKeyFrame( 0 );
			for ( int ff = 1; ff <= 19; ff++ )
			{
				key = (TransformKeyFrame)track.CreateKeyFrame( ff );
				Random rand = new Random( 0 );
				Vector3 lpos = new Vector3(
					(float)rand.NextDouble() % (int)PLANE_SIZE, //- PLANE_SIZE/2,
					(float)rand.NextDouble() % 300 + 100,
					(float)rand.NextDouble() % (int)PLANE_SIZE ); //- PLANE_SIZE/2
				key.Translate = lpos;
			}
			key = (TransformKeyFrame)track.CreateKeyFrame( 20 );
			#endregion STUBBED LIGHT ANIMATION

			// Initialize the Materials/Demo
			UpdateMaterial();
			UpdateInfoParamC();
			UpdateInfoParamD();
			UpdateInfoParamU();
			UpdateInfoParamT();
			UpdateInfoNormals();
			UpdateInfoHeadDepth();
			UpdateInfoSkyBox();
			UpdateInfoHeadSpeed();
			UpdateInfoLights();
			UpdateInfoTracking();

			// Init Head Animation:  Load adds[] elements - Ogre head animation
			adds[ 0 ] = 0.3f;
			adds[ 1 ] = -1.6f;
			adds[ 2 ] = 1.1f;
			adds[ 3 ] = 0.5f;
			sines[ 0 ] = 0;
			sines[ 1 ] = 100;
			sines[ 2 ] = 200;
			sines[ 3 ] = 300;

		} // end CreateScene()
Ejemplo n.º 2
0
        // Just override the mandatory create scene method
        protected override void CreateScene()
        {
            RAND               = new Random(0);                    // najak: use a time-based seed
            GuiMgr             = OverlayElementManager.Instance;
            scene.AmbientLight = new ColorEx(0.75f, 0.75f, 0.75f); // default Ambient Light

            // Customize Controls - speed up camera and slow down the input update rate
            this.camSpeed = 5.0f;
            inputInterval = inputTimer = 0.02f;

            // Create water mesh and entity, and attach to sceneNode
            waterMesh   = new WaterMesh("WaterMesh", PLANE_SIZE, CMPLX);
            waterEntity = scene.CreateEntity("WaterEntity", "WaterMesh");
            SceneNode waterNode = scene.RootSceneNode.CreateChildSceneNode();

            waterNode.AttachObject(waterEntity);

            // Add Ogre head, give it it's own node
            headNode = waterNode.CreateChildSceneNode();
            Entity ent = scene.CreateEntity("head", "ogrehead.mesh");

            headNode.AttachObject(ent);

            // Create the camera node, set its position & attach camera
            camera.Yaw(-45f);
            camera.Move(new Vector3(1500f, 700f, PLANE_SIZE + 700f));
            camera.LookAt(new Vector3(PLANE_SIZE / 2f, 300f, PLANE_SIZE / 2f));
            camera.SetAutoTracking(false, headNode);             // Autotrack the head, but it isn't working right

            //scene.SetFog(FogMode.Exp, ColorEx.White, 0.000020f); // add Fog for fun, cuz we can

            // show overlay
            waterOverlay = (Overlay)OverlayManager.Instance.GetByName("Example/WaterOverlay");
            waterOverlay.Show();

            // Create Rain Emitter, but default Rain to OFF
            particleSystem  = ParticleSystemManager.Instance.CreateSystem("rain", "Examples/Water/Rain");
            particleEmitter = particleSystem.GetEmitter(0);
            particleEmitter.EmissionRate = 0f;

            // Attach Rain Emitter to SceneNode, and place it 3000f above the water surface
            SceneNode rNode = scene.RootSceneNode.CreateChildSceneNode();

            rNode.Translate(new Vector3(PLANE_SIZE / 2.0f, 3000, PLANE_SIZE / 2.0f));
            rNode.AttachObject(particleSystem);
            particleSystem.FastForward(20);             // Fastforward rain to make it look natural

            // It can't be set in .particle file, and we need it ;)
            particleSystem.BillboardOrigin = BillboardOrigin.BottomCenter;

            // Set Lighting
            lightNode             = scene.RootSceneNode.CreateChildSceneNode();
            lightSet              = scene.CreateBillboardSet("Lights", 20);
            lightSet.MaterialName = "Particles/Flare";
            lightNode.AttachObject(lightSet);
            SetLighting("Ambient");             // Add Lights - added by Najak to show lighted Water conditions - cool!

            #region STUBBED LIGHT ANIMATION
            // Create a new animation state to track this
            // TODO: Light Animation not working.
            //this.animState = scene.CreateAnimationState("WaterLight");
            //this.animState.Time = 0f;
            //this.animState.IsEnabled = false;

            // set up spline animation of light node.  Create random Spline
            Animation          anim  = scene.CreateAnimation("WaterLight", 20);
            NodeAnimationTrack track = anim.CreateNodeTrack(0, this.lightNode);
            TransformKeyFrame  key   = (TransformKeyFrame)track.CreateKeyFrame(0);
            for (int ff = 1; ff <= 19; ff++)
            {
                key = (TransformKeyFrame)track.CreateKeyFrame(ff);
                Random  rand = new Random(0);
                Vector3 lpos = new Vector3(
                    (float)rand.NextDouble() % (int)PLANE_SIZE,                    //- PLANE_SIZE/2,
                    (float)rand.NextDouble() % 300 + 100,
                    (float)rand.NextDouble() % (int)PLANE_SIZE);                   //- PLANE_SIZE/2
                key.Translate = lpos;
            }
            key = (TransformKeyFrame)track.CreateKeyFrame(20);
            #endregion STUBBED LIGHT ANIMATION

            // Initialize the Materials/Demo
            UpdateMaterial();  UpdateInfoParamC();  UpdateInfoParamD();  UpdateInfoParamU();
            UpdateInfoParamT();  UpdateInfoNormals();  UpdateInfoHeadDepth();  UpdateInfoSkyBox();
            UpdateInfoHeadSpeed(); UpdateInfoLights(); UpdateInfoTracking();

            // Init Head Animation:  Load adds[] elements - Ogre head animation
            adds[0]  = 0.3f; adds[1] = -1.6f; adds[2] = 1.1f; adds[3] = 0.5f;
            sines[0] = 0; sines[1] = 100; sines[2] = 200; sines[3] = 300;
        }         // end CreateScene()