Exemplo n.º 1
0
        void drawTracks(BallTrackData activeBallData)
        {
            List <VertexPositionColor> vertices = new List <VertexPositionColor>();

            var baseTime = activeBallData.Frames.First().Time;
            var end      = DateTime.Now.AddSeconds(1);

            for (DateTime t = baseTime; t < end; t = t.AddSeconds(0.01f))
            {
                var pos = realToScreen3d(activeBallData.ProjFit.PredictPos(t).ToV3());
                vertices.Add(new VertexPositionColor(pos, Color.Red));
            }

            var varr    = vertices.ToArray();
            var indices = Enumerable.Range(0, varr.Length).ToArray();

            lineEffect.World              = Matrix.Identity;
            lineEffect.View               = camera.View;
            lineEffect.Projection         = camera.Projection;
            lineEffect.VertexColorEnabled = true;
            foreach (EffectPass pass in lineEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                GraphicsDevice.DrawUserIndexedPrimitives <VertexPositionColor>(PrimitiveType.LineStrip, varr, 0, varr.Length, indices, 0, varr.Length - 1);
            }
        }
Exemplo n.º 2
0
        void drawTracksFancy(BallTrackData activeBallData)
        {
            List <VertexPositionColor>[] vertices = new List <VertexPositionColor> [5];
            for (int i = 0; i < vertices.Length; i++)
            {
                vertices[i] = new List <VertexPositionColor>();
            }

            int numTrails = vertices.Length - 1;

            var rad = activeBallData.Frames.Last().Ball.Radius;

            var baseTime = activeBallData.Frames.First().Time;
            var end      = DateTime.Now.AddSeconds(0.5);

            for (DateTime t = baseTime; t < end; t = t.AddSeconds(0.01f))
            {
                var pos = realToScreen3d(activeBallData.ProjFit.PredictPos(t).ToV3());

                var posNext = realToScreen3d(activeBallData.ProjFit.PredictPos(t.AddSeconds(0.01f)).ToV3());

                Color c;

                if (t < DateTime.Now)
                {
                    c = Color.LimeGreen;
                }
                else
                {
                    c = Color.Red;
                }

                for (int i = 0; i < numTrails; i++)
                {
                    var dir = Vector3.Normalize(posNext - pos);
                    var u   = Vector3.Normalize(Vector3.Cross(dir, Vector3.UnitY));
                    var v   = Vector3.Normalize(Vector3.Cross(u, dir));

                    var theta = (2 * Math.PI / numTrails * i);
                    var disp  = (float)Math.Sin(theta) * u + (float)Math.Cos(theta) * v;

                    var posMod = pos + disp * rad;
                    vertices[i].Add(new VertexPositionColor(posMod, c));
                }

                vertices[vertices.Length - 1].Add(new VertexPositionColor(pos, Color.Red));
            }

            var indices = Enumerable.Range(0, vertices[0].Count()).ToArray();

            lineEffect.World              = Matrix.Identity;
            lineEffect.View               = camera.View;
            lineEffect.Projection         = camera.Projection;
            lineEffect.VertexColorEnabled = true;
            foreach (EffectPass pass in lineEffect.CurrentTechnique.Passes)
            {
                pass.Apply();

                foreach (var verts in vertices)
                {
                    var varr = verts.ToArray();
                    GraphicsDevice.DrawUserIndexedPrimitives <VertexPositionColor>(PrimitiveType.LineStrip, varr, 0, varr.Length, indices, 0, varr.Length - 1);
                }
            }
        }