Example #1
0
        public bool Update(SimTime t)
        {
            var dt = t.WallTimeElapsed;

            var err = _end - _current;

            var derr = (err - _lastError) / dt;

            _ierr += err * dt;

            var p = Proportional * dt;
            var i = Integral * dt;
            var d = Differential * dt;

            var change = err * p + derr * d + _ierr * i;

            if (err.Length > 1E-05)
            {
                _current  += change;
                _lastError = err;
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #2
0
 public void Update(SimTime t)
 {
     if (_lookAtAnim != null)
     {
         if (_lookAtAnim.Update(t))
         {
             LookAt   = _lookAtAnim.Value;
             LookAt3d = LookAt.ToPositionAboveSeaLeveld(0);
             Dirty    = true;
         }
         else
         {
             _lookAtAnim = null;
         }
     }
     if (_posAnim != null)
     {
         if (_posAnim.Update(t))
         {
             Pos3d = _posAnim.Value;
             Dirty = true;
         }
         else
         {
             _posAnim = null;
         }
     }
 }
Example #3
0
        public void Draw(Camera cam, SimTime t)
        {
            GL.Disable(All.DepthTest);
            GL.Enable(All.Texture2D);

            _textures.BeginFrame();
            _geometries.BeginFrame();

            if (MissingTileTexture == 0)
            {
                using (var img = UIImage.FromFile("MissingTile.png")) {
                    MissingTileTexture = img.ToGLTexture();
                }
            }

            GL.EnableClientState(All.TextureCoordArray);
            GL.EnableClientState(All.NormalArray);

            var zoom = cam.Zoom;

            if (_lastZoom < 0)
            {
                _lastZoom = zoom;
            }
            if (zoom != _lastZoom)
            {
                _prevZoom         = _lastZoom;
                _lastZoomFadeTime = t.WallTime;
            }
            var fadeTime   = t.WallTime - _lastZoomFadeTime;
            var shouldFade = fadeTime.TotalSeconds < FadeSecs;
            var fade       = shouldFade ? (float)(fadeTime.TotalSeconds / FadeSecs) : 1.0f;

            _lastZoom = zoom;

            var centerTile1 = TileName.FromLocation(cam.LookAt, _prevZoom);
            var centerTile  = TileName.FromLocation(cam.LookAt, zoom);

            //
            // Draw the tiles
            //
            if (shouldFade)
            {
                DrawTiles(cam, centerTile1, 1.0f);
            }
            DrawTiles(cam, centerTile, fade);

            GL.DisableClientState(All.TextureCoordArray);
            GL.DisableClientState(All.NormalArray);
            GL.Disable(All.Texture2D);
            GL.Enable(All.DepthTest);
        }
Example #4
0
 public bool Update(SimTime t)
 {
     if (_accTime > _duration)
     {
         return(false);
     }
     else
     {
         _accTime += t.WallTimeElapsed;
         var a = _accTime / _duration;
         if (a > 1)
         {
             a = 1;
         }
         a *= a;
         //a = 1 - a;
         _current = _start.LocationAway(_start.VectorTo(_end) * (float)a);
         return(true);
     }
 }
Example #5
0
 public bool Update(SimTime t)
 {
     if (_accTime > _duration)
     {
         return(false);
     }
     else
     {
         _accTime += t.WallTimeElapsed;
         var a = _accTime / _duration;
         if (a > 1)
         {
             a = 1;
         }
         //a *= a;
         //a = 1 - a;
         _current = _start + (_end - _start) * a;
         return(true);
     }
 }
Example #6
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame (e);

            var sz = new Size((int)Frame.Width, (int)Frame.Height);
            if (sz.Width != Size.Width) {
                Size = sz;
            }

            MakeCurrent ();

            //
            // Initialize drawables
            //
            foreach (var d in _drawablesNeedingLoad) {
                d.LoadContent ();
            }
            _drawablesNeedingLoad.Clear ();

            //
            // Determine the current sim time
            //
            var t = new NSDate().SecondsSinceReferenceDate;
            var wallNow = DateTime.UtcNow;

            var time = new SimTime() {
                Time = wallNow,
                WallTime = wallNow,
                TimeElapsed = t - _lastT,
                WallTimeElapsed = t - _lastT
            };
            _lastT = t;

            //Console.WriteLine ("FPS {0:0}", 1.0 / time.WallTimeElapsed);

            GL.Viewport (0, 0, Size.Width, Size.Height);

            GL.ClearColor (158/255.0f, 207/255.0f, 237/255.0f, 1.0f);
            GL.Clear((int)(All.DepthBufferBit | All.ColorBufferBit));

            //
            // Set the common OpenGL state
            //
            GL.Enable(All.Blend);
            GL.BlendFunc(All.SrcAlpha, All.OneMinusSrcAlpha);
            GL.Enable(All.DepthTest);
            GL.EnableClientState(All.VertexArray);

            //
            // Render the background
            //
            _background.Render();

            //
            // Setup the 3D camera
            //
            Camera.SetViewport(Size.Width, Size.Height);
            CameraMan.Update(time);
            Camera.Execute(CameraMan);

            //
            // Enable the sun
            //
            if (ShowSun) {
                GL.Enable(All.Lighting);
                GL.Enable(All.ColorMaterial);

                GL.Enable(All.Light0);
                var sp = _sunLoc.ToPositionAboveSeaLevel(150000000);
                GL.Light(All.Light0, All.Position, new float[]{sp.X,sp.Y,sp.Z,1});
            }

            //
            // Draw all the layers
            //
            foreach (var d in _drawables) {
                d.Draw(Camera, time);
            }

            if (ShowSun) {
                GL.Disable(All.Lighting);
                GL.Disable(All.ColorMaterial);
            }

            SwapBuffers();

            frameCount++;
        }
Example #7
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame (e);

            var sz = new Size((int)Frame.Width, (int)Frame.Height);
            if (sz.Width != Size.Width) {
                Size = sz;
            }

            MakeCurrent();
            GL.Viewport (0, 0, Size.Width, Size.Height);

            var t = new NSDate().SecondsSinceReferenceDate;
            var wallNow = DateTime.UtcNow;

            var time = new SimTime() {
                Time = wallNow,
                WallTime = wallNow,
                TimeElapsed = t - _lastT,
                WallTimeElapsed = t - _lastT
            };
            _lastT = t;

            //Console.WriteLine ("FPS {0:0}", 1.0 / time.WallTimeElapsed);

            GL.ClearColor (158/255.0f, 207/255.0f, 237/255.0f, 1.0f);
            GL.Clear((int)(All.DepthBufferBit | All.ColorBufferBit));

            //
            // Set the common OpenGL state
            //
            GL.Enable(All.Blend);
            GL.BlendFunc(All.SrcAlpha, All.OneMinusSrcAlpha);
            GL.Enable(All.DepthTest);
            GL.EnableClientState(All.VertexArray);

            //
            // Render the background
            //
            _background.Render();

            //
            // Setup the 3D camera
            //
            Camera.SetViewport(Size.Width, Size.Height);
            CameraMan.Update(time);
            Camera.Execute(CameraMan);

            //
            // Enable the sun
            //
            if (ShowSun) {
                GL.Enable(All.Lighting);
                GL.Enable(All.ColorMaterial);

                GL.Enable(All.Light0);
                var sp = _sunLoc.ToPositionAboveSeaLevel(150000000);
                GL.Light(All.Light0, All.Position, new float[]{sp.X,sp.Y,sp.Z,1});
            }

            //
            // Draw all the layers
            //
            foreach (var d in _draws) {
                d.Draw(Camera, time);
            }

            if (ShowSun) {
                GL.Disable(All.Lighting);
                GL.Disable(All.ColorMaterial);

            //				if (_gesture == WorldView3d.GestureType.Rotating) {
            //					var verts = new Vector3[2];
            //					var ppp = Location.SunLocation(DateTime.UtcNow.AddHours(-12));
            //					verts[0] = ppp.ToPositionAboveSeaLevel(0);
            //					verts[1] = ppp.ToPositionAboveSeaLevel(1000);
            //					GL.Color4(0, 1.0f, 0, 1.0f);
            //					GL.VertexPointer(3, All.Float, 0, verts);
            //					GL.DrawArrays(All.Lines, 0, 2);
            //					Console.WriteLine (Camera.LookAt);
            //					Console.WriteLine (ppp);
            //				}

            }

            SwapBuffers();
        }
Example #8
0
		public void Draw (Camera cam, SimTime t)
		{			
			GL.Disable(All.DepthTest);
			GL.Enable(All.Texture2D);
			
			_textures.BeginFrame();
			_geometries.BeginFrame();
			
			GL.EnableClientState(All.TextureCoordArray);
			GL.EnableClientState(All.NormalArray);
			
			var zoom = cam.Zoom;
			
			if (_lastZoom < 0) _lastZoom = zoom;
			if (zoom != _lastZoom) {
				_prevZoom = _lastZoom;
				_lastZoomFadeTime = t.WallTime;
			}
			var fadeTime = t.WallTime - _lastZoomFadeTime;
			var shouldFade = fadeTime.TotalSeconds < FadeSecs;
			var fade = shouldFade ? (float)(fadeTime.TotalSeconds/FadeSecs) : 1.0f;
			_lastZoom = zoom;
			
			var centerTile1 = TileName.FromLocation(cam.LookAt, _prevZoom);
			var centerTile = TileName.FromLocation(cam.LookAt, zoom);
			
			//
			// Draw the tiles
			//
			if (shouldFade) {				
				DrawTiles(cam, centerTile1, 1.0f);
			}			
			DrawTiles(cam, centerTile, fade);			
			
			GL.DisableClientState(All.TextureCoordArray);
			GL.DisableClientState(All.NormalArray);
			GL.Disable(All.Texture2D);
			GL.Enable(All.DepthTest);
		}
Example #9
0
		public void Update (SimTime t)
		{
		}
Example #10
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);

            var sz = new Size((int)Frame.Width, (int)Frame.Height);

            if (sz.Width != Size.Width)
            {
                Size = sz;
            }

            MakeCurrent();

            //
            // Initialize drawables
            //
            foreach (var d in _drawablesNeedingLoad)
            {
                d.LoadContent();
            }
            _drawablesNeedingLoad.Clear();

            //
            // Determine the current sim time
            //
            var t       = new NSDate().SecondsSinceReferenceDate;
            var wallNow = DateTime.UtcNow;

            var time = new SimTime()
            {
                Time            = wallNow,
                WallTime        = wallNow,
                TimeElapsed     = t - _lastT,
                WallTimeElapsed = t - _lastT
            };

            _lastT = t;

            //Console.WriteLine ("FPS {0:0}", 1.0 / time.WallTimeElapsed);

            GL.Viewport(0, 0, Size.Width, Size.Height);

            GL.ClearColor(158 / 255.0f, 207 / 255.0f, 237 / 255.0f, 1.0f);
            GL.Clear((int)(All.DepthBufferBit | All.ColorBufferBit));

            //
            // Set the common OpenGL state
            //
            GL.Enable(All.Blend);
            GL.BlendFunc(All.SrcAlpha, All.OneMinusSrcAlpha);
            GL.Enable(All.DepthTest);
            GL.EnableClientState(All.VertexArray);

            //
            // Render the background
            //
            _background.Render();

            //
            // Setup the 3D camera
            //
            Camera.SetViewport(Size.Width, Size.Height);
            CameraMan.Update(time);
            Camera.Execute(CameraMan);

            //
            // Enable the sun
            //
            if (ShowSun)
            {
                GL.Enable(All.Lighting);
                GL.Enable(All.ColorMaterial);

                GL.Enable(All.Light0);
                var sp = _sunLoc.ToPositionAboveSeaLevel(150000000);
                GL.Light(All.Light0, All.Position, new float[] { sp.X, sp.Y, sp.Z, 1 });
            }

            //
            // Draw all the layers
            //
            foreach (var d in _drawables)
            {
                d.Draw(Camera, time);
            }

            if (ShowSun)
            {
                GL.Disable(All.Lighting);
                GL.Disable(All.ColorMaterial);
            }

            SwapBuffers();

            frameCount++;
        }
Example #11
0
 public void Update(SimTime t)
 {
 }
Example #12
0
        public bool Update(SimTime t)
        {
            var dt = t.WallTimeElapsed;

            var err = _end - _current;

            var derr = (err - _lastError) / dt;

            _ierr += err * dt;

            var p = Proportional * dt;
            var i = Integral * dt;
            var d = Differential * dt;

            var change = err * p + derr * d + _ierr * i;

            if (err.Length > 1E-05) {
                _current += change;
                _lastError = err;
                return true;
            } else {
                return false;
            }
        }
Example #13
0
 public bool Update(SimTime t)
 {
     if (_accTime > _duration) {
         return false;
     } else {
         _accTime += t.WallTimeElapsed;
         var a = _accTime / _duration;
         if (a > 1)
             a = 1;
         //a *= a;
         //a = 1 - a;
         _current = _start + (_end - _start) * a;
         return true;
     }
 }
Example #14
0
 public bool Update(SimTime t)
 {
     if (_accTime > _duration) {
         return false;
     } else {
         _accTime += t.WallTimeElapsed;
         var a = _accTime / _duration;
         if (a > 1)
             a = 1;
         a *= a;
         //a = 1 - a;
         _current = _start.LocationAway (_start.VectorTo (_end) * (float)a);
         return true;
     }
 }
Example #15
0
 public void Update(SimTime t)
 {
     if (_lookAtAnim != null) {
         if (_lookAtAnim.Update (t)) {
             LookAt = _lookAtAnim.Value;
             LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);
             Dirty = true;
         } else {
             _lookAtAnim = null;
         }
     }
     if (_posAnim != null) {
         if (_posAnim.Update (t)) {
             Pos3d = _posAnim.Value;
             Dirty = true;
         } else {
             _posAnim = null;
         }
     }
 }
Example #16
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);

            var sz = new Size((int)Frame.Width, (int)Frame.Height);

            if (sz.Width != Size.Width)
            {
                Size = sz;
            }

            MakeCurrent();
            GL.Viewport(0, 0, Size.Width, Size.Height);

            var t       = new NSDate().SecondsSinceReferenceDate;
            var wallNow = DateTime.UtcNow;

            var time = new SimTime()
            {
                Time            = wallNow,
                WallTime        = wallNow,
                TimeElapsed     = t - _lastT,
                WallTimeElapsed = t - _lastT
            };

            _lastT = t;

            //Console.WriteLine ("FPS {0:0}", 1.0 / time.WallTimeElapsed);

            GL.ClearColor(158 / 255.0f, 207 / 255.0f, 237 / 255.0f, 1.0f);
            GL.Clear((int)(All.DepthBufferBit | All.ColorBufferBit));

            //
            // Set the common OpenGL state
            //
            GL.Enable(All.Blend);
            GL.BlendFunc(All.SrcAlpha, All.OneMinusSrcAlpha);
            GL.Enable(All.DepthTest);
            GL.EnableClientState(All.VertexArray);

            //
            // Render the background
            //
            _background.Render();

            //
            // Setup the 3D camera
            //
            Camera.SetViewport(Size.Width, Size.Height);
            CameraMan.Update(time);
            Camera.Execute(CameraMan);

            //
            // Enable the sun
            //
            if (ShowSun)
            {
                GL.Enable(All.Lighting);
                GL.Enable(All.ColorMaterial);

                GL.Enable(All.Light0);
                var sp = _sunLoc.ToPositionAboveSeaLevel(150000000);
                GL.Light(All.Light0, All.Position, new float[] { sp.X, sp.Y, sp.Z, 1 });
            }

            //
            // Draw all the layers
            //
            foreach (var d in _draws)
            {
                d.Draw(Camera, time);
            }

            if (ShowSun)
            {
                GL.Disable(All.Lighting);
                GL.Disable(All.ColorMaterial);

//				if (_gesture == WorldView3d.GestureType.Rotating) {
//					var verts = new Vector3[2];
//					var ppp = Location.SunLocation(DateTime.UtcNow.AddHours(-12));
//					verts[0] = ppp.ToPositionAboveSeaLevel(0);
//					verts[1] = ppp.ToPositionAboveSeaLevel(1000);
//					GL.Color4(0, 1.0f, 0, 1.0f);
//					GL.VertexPointer(3, All.Float, 0, verts);
//					GL.DrawArrays(All.Lines, 0, 2);
//					Console.WriteLine (Camera.LookAt);
//					Console.WriteLine (ppp);
//				}
            }


            SwapBuffers();
        }