示例#1
0
        void Initialize()
        {
            LayerRetainsBacking = true;
            LayerColorFormat    = EAGLColorFormat.RGBA8;
            ContextRenderingApi = EAGLRenderingAPI.OpenGLES1;

            MultipleTouchEnabled = true;

            var now = DateTime.UtcNow;
            _sunLoc = Location.SunLocation(now);
            Camera = new Camera();
            CameraMan = new BlimpCameraMan(
                new Location(-122.3352, 47.645),
                new Location(-122.3352, 47.6453));
            Unload += HandleUnload;
        }
示例#2
0
 public BlimpCameraMan(ILocatable posLoc, ILocatable lookAt)
 {
     Dirty = true;
     Pos3d = posLoc.ToPositionAboveSeaLeveld (_altitude);
     LookAt = new Location (lookAt);
     LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);
 }
示例#3
0
 void Initialize()
 {
     var now = DateTime.Now;
     _sunLoc = Caulker.Location.SunLocation(now);
     Camera = new Camera();
     CameraMan = new BlimpCameraMan(
         new Location(153.0306, -27.4778),         // Greetings from Brisbane :)
         new Location(153.0306, -27.4878));
     Unload += HandleUnload;
 }
示例#4
0
        public void Drag(Location start, Location end)
        {
            var d = -start.VectorTo(end);

            _pos = _pos.LocationAway(d);
            Pos3d = _pos.ToPositionAboveSeaLeveld (_altitude);
            LookAt = LookAt.LocationAway(d);
            LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);

            Dirty = true;
        }
示例#5
0
        public void Rotate(ILocatable loc, float ddegs)
        {
            _pos = _pos.RotateAround(loc, ddegs);
            LookAt = LookAt.RotateAround(loc, ddegs);

            Pos3d = _pos.ToPositionAboveSeaLeveld (_altitude);
            LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);

            Dirty = true;
        }
示例#6
0
 public ManualCameraMan(ILocatable posLoc, ILocatable lookAt)
 {
     Dirty = true;
     _pos = new Location(posLoc);
     Pos3d = _pos.ToPositionAboveSeaLeveld (_altitude);
     LookAt = new Location (lookAt);
     LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);
 }
示例#7
0
 public LocLinAnim(double duration, ILocatable start, ILocatable end)
 {
     _start = new Location(start);
     _end = new Location(end);
     _current = _start;
     _duration = duration;
 }
示例#8
0
 public Camera()
 {
     _projectionMatrixF = Matrix4.Identity;
     _viewMatrixF = Matrix4.Identity;
     _projectionMatrix = Matrix4d.Identity;
     _viewMatrix = Matrix4d.Identity;
     ScreenLocations = new Location[21];
 }
示例#9
0
 public void SetLookAt(ILocatable lookAt, bool animated)
 {
     if (animated) {
         _lookAtAnim = new LocLinAnim(2, LookAt, lookAt);
         var oldLocPos = LookAt.ToPositionAboveSeaLeveld(_altitude);
         _posAnim = new VectorLinAnim(5, Pos3d, oldLocPos);
     }
     else {
         LookAt = new Location(lookAt);
         LookAt3d = LookAt.ToPositionAboveSeaLeveld (0);
         Dirty = true;
     }
 }
示例#10
0
        public static double HeadingTo(this ILocatable start, ILocatable finish)
        {
            var n = new Location(
                start.Longitude,
                finish.Latitude
            );
            var e = new Location(
                finish.Longitude,
                start.Latitude
            );
            var northMiles = start.MilesTo(n);
            if (n.Latitude < start.Latitude) {
                northMiles *= -1;
            }
            var eastMiles = start.MilesTo(e);
            if (e.Longitude < start.Longitude) {
                eastMiles *= -1;
            }

            var a = Math.Atan2(northMiles, eastMiles);

            if (a < 0) {
                a += Math.PI * 2;
            }

            var heading = 90 - a*180/Math.PI;

            while (heading < 0) {
                heading += 360;
            }
            while (heading >= 360) {
                heading -= 360;
            }

            return heading;
        }