protected override void Draw(GameTime gameTime)
        {
            if (fLines != null)
            {
                if (fAngleChanged)
                {
                    fAngleChanged = false;

                    fWorldMatrix = Matrix.CreateRotationZ(fAngle) *
                                   Matrix.CreateTranslation(
                        GraphicsDevice.Viewport.Width / 2f,
                        GraphicsDevice.Viewport.Height / 2f, 0);
                }
                fBasicEffect.World = fWorldMatrix;

                fLines.UseVertexBuffer = fUseVertexBuffer;

                foreach (EffectPass pass in fBasicEffect.CurrentTechnique.Passes)
                {
                    pass.Apply();
                    fLines.Render();
                }
            }
            base.Draw(gameTime);
        }
Exemple #2
0
        /// <summary>
        /// Draw the space
        /// </summary>
        private void RenderGrid()
        {
            fLines = new DynamicPrimitiveLine(GraphicsDevice);

            float worldFactor = WORLD_SIZE / (WORLD_BLOCKS - 1);
            VertexPositionColor p1;
            VertexPositionColor p2;

            for (int x = 0; x < WORLD_BLOCKS; x++)
            {
                float sx1 = (x + 0.5f) * worldFactor - HALF_WORLD_SIZE;
                for (int y = 0; y < WORLD_BLOCKS; y++)
                {
                    float sy1 = (y + 0.5f) * worldFactor - HALF_WORLD_SIZE;
                    for (int z = 0; z < WORLD_BLOCKS; z++)
                    {
                        float sz1 = (z + 0.5f) * worldFactor - HALF_WORLD_SIZE;

                        float   dx    = 1024 * (fSpace[x, y, z].ForcePositiveX - fSpace[x, y, z].ForceNegativeX);
                        float   dy    = 1024 * (fSpace[x, y, z].ForcePositiveY - fSpace[x, y, z].ForceNegativeY);
                        float   dz    = 1024 * (fSpace[x, y, z].ForcePositiveZ - fSpace[x, y, z].ForceNegativeZ);
                        Vector3 d     = new Vector3(dx, dy, dz);
                        float   power = d.Length() / 1000000;
                        if (power > 0)
                        {
                            d.Normalize();
                            if (power > 200)
                            {
                                power = 200;
                            }

                            dx = d.X * power;
                            dy = d.Y * power;
                            dz = d.Z * power;

                            float sx2 = sx1 + dx;
                            float sy2 = sy1 + dy;
                            float sz2 = sz1 + dz;
                            int   r   = (int)(255f * Math.Abs(d.X));
                            int   g   = (int)(255f * Math.Abs(d.Y));
                            int   b   = (int)(255f * Math.Abs(d.Z));
                            Color c1  = new Color(r, g, b);
                            Color c2  = Color.Transparent;
                            p1 = new VertexPositionColor(new Vector3(sx1, sy1, sz1), c1);
                            p2 = new VertexPositionColor(new Vector3(sx2, sy2, sz2), c2);
                            fLines.AddLine(p1, p2);
                        }
                    }
                }
            }
            fBasicEffect.World      = fCamera.Camera.WorldMatrix;
            fBasicEffect.View       = fCamera.Camera.ViewMatrix;
            fBasicEffect.Projection = fCamera.Camera.ProjectionMatrix;
            foreach (EffectPass pass in fBasicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                fLines.Render();
            }
        }
Exemple #3
0
        /// <summary>
        /// Allows the game component to draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);

            fBasicEffect.World = fWorldMatrix;
            foreach (EffectPass pass in fBasicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                fLines.Render();
            }
            base.Draw(gameTime);
        }
        /// <summary>
        /// Render to a render target
        /// </summary>
        /// <param name="gameTime"></param>
        private void CreateRenderTarget(GameTime gameTime)
        {
            RenderTargetBinding[] previousRenderTargets = GraphicsDevice.GetRenderTargets();

            GraphicsDevice.SetRenderTarget(fTarget);
            GraphicsDevice.Clear(Color.Transparent);

            GraphicsDevice.DepthStencilState = DepthStencilState.None;
            GraphicsDevice.BlendState        = BlendState.Opaque;
            GraphicsDevice.RasterizerState   = RasterizerState.CullNone;
            GraphicsDevice.SamplerStates[0]  = SamplerState.LinearWrap;

            float  aspectRatio = ((float)GraphicsDevice.Viewport.Width) / ((float)GraphicsDevice.Viewport.Height);
            Matrix modelWorld  = Matrix.CreateRotationY(fPlaneAngle) *
                                 Matrix.CreateRotationX(MathHelper.ToRadians(90));
            Matrix modelProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(40.0f), aspectRatio, 1.0f, 30000.0f);
            Matrix modelView       = Matrix.CreateLookAt(new Vector3(0, 0, 4000), Vector3.Zero, Vector3.Up);

            foreach (ModelMesh mesh in fModelGrid.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    effect.View       = modelView;
                    effect.Projection = fCamera.Camera.ProjectionMatrix;
                    effect.World      = modelWorld;
                }
                mesh.Draw();
            }

            GraphicsDevice.DepthStencilState = DepthStencilState.Default;
            GraphicsDevice.BlendState        = BlendState.Opaque;
            GraphicsDevice.RasterizerState   = RasterizerState.CullCounterClockwise;
            GraphicsDevice.SamplerStates[0]  = SamplerState.LinearWrap;

            Matrix view = Matrix.CreateLookAt(
                new Vector3(0.0f, 0.0f, 1.0f),
                Vector3.Zero, Vector3.Up
                );

            Matrix projection = Matrix.CreateOrthographicOffCenter(
                0, TARGET_WIDTH, TARGET_HEIGHT, 0, 1.0f, 1000.0f);


            GraphicsDevice.BlendState        = BlendState.Opaque;
            GraphicsDevice.RasterizerState   = RasterizerState.CullNone;
            GraphicsDevice.DepthStencilState = DepthStencilState.None;
            GraphicsDevice.SamplerStates[0]  = SamplerState.LinearWrap;

            fLineEffect.World              = Matrix.Identity;
            fLineEffect.Projection         = projection;
            fLineEffect.View               = view;
            fLineEffect.VertexColorEnabled = true;
            fLineEffect.CurrentTechnique.Passes[0].Apply();

            fLines.Render();
            fSpriteBatch.Begin();
            string  text     = DateTime.Now.ToString("HH:mm:ss");
            Vector2 size     = fFont.MeasureString(text);
            Vector2 position = new Vector2(TARGET_WIDTH / 2 - size.X / 2, TARGET_HEIGHT / 2 - size.Y / 2);

            fSpriteBatch.DrawString(fFont, text, position, Color.Cornsilk);


            fSpriteBatch.End();


            GraphicsDevice.SetRenderTargets(previousRenderTargets);
        }
Exemple #5
0
        /// <summary>
        /// Draw the space
        /// </summary>
        private void RenderGrid()
        {
            fLines = new DynamicPrimitiveLine(fSpriteBatch.GraphicsDevice);
            float worldFactor = WORLD_SIZE / (WORLD_BLOCKS - 1);

            for (int x = 0; x < WORLD_BLOCKS; x++)
            {
                //int blockX = (int)((particle.Position.X + HALF_WORLD_SIZE) * PARTICLE_TO_WORLD);
                //int blockY = (int)((particle.Position.Y + HALF_WORLD_SIZE) * PARTICLE_TO_WORLD);
                float sx1 = (x + 0.5f) * worldFactor - HALF_WORLD_SIZE;
                for (int y = 0; y < WORLD_BLOCKS; y++)
                {
                    float sy1 = (y + 0.5f) * worldFactor - HALF_WORLD_SIZE;
                    float dx  = 1024 * 1024 * 1024 * (fSpace[x, y].ForceRight - fSpace[x, y].ForceLeft);
                    float dy  = 1024 * 1024 * 1024 * (fSpace[x, y].ForceUp - fSpace[x, y].ForceDown);
                    float f   = Convert.ToSingle(Math.Sqrt(dx * dx + dy * dy));
                    float f1  = f;
                    Color c1;
                    Color c2;
                    int   b1;
                    float size = 1.0f;
                    if (f1 < 1024.0f)
                    {
                        size = f1 / 1024.0f;
                        b1   = (byte)(f1 / 4.0f);
                        c1   = new Color(0, 0, b1, 255);
                        c2   = new Color(0, 0, b1, 255);
                    }
                    else
                    {
                        f1 /= 1024.0f;
                        if (f1 < 1024.0f)
                        {
                            size = 1.0f;// 0.5f + f1 / 512.0f;
                            b1   = (byte)(f1 / 4.0f);
                            c1   = new Color(0, b1, 255 - b1, 255);
                            c2   = new Color(0, 255, 0, 128);
                        }
                        else
                        {
                            f1 /= 1024.0f;
                            if (f1 < 1024.0f)
                            {
                                size = 1.0f;//0.5f + f1 / 512.0f;
                                b1   = (byte)(f1 / 4.0f);
                                c1   = new Color(b1, 255, 0, 255);
                                c2   = new Color(255, 255, 0, 128);
                            }
                            else
                            {
                                f1 /= 1024.0f;
                                if (f1 < 1024.0f)
                                {
                                    size = 1.0f;//0.5f + f1 / 512.0f;
                                    b1   = (byte)(f1 / 4.0f);
                                    c1   = new Color(255, 255 - b1, 0, 255);
                                    c2   = new Color(255, 0, 0, 128);
                                }
                                else
                                {
                                    size = 1.0f;
                                    c1   = new Color(255, 0, 255, 255);
                                    c2   = new Color(255, 0, 255, 255);
                                }
                            }
                        }
                    }

                    dx = MAX_LINE_SIZE * (dx / f) * size;
                    dy = MAX_LINE_SIZE * (dy / f) * size;
                    float sx2 = sx1 + dx;
                    float sy2 = sy1 + dy;
                    VertexPositionColor p1 = new VertexPositionColor(new Vector3(sx1, sy1, 0), c1);
                    VertexPositionColor p2 = new VertexPositionColor(new Vector3(sx2, sy2, 0), c2);
                    fLines.AddLine(p1, p2);
                }
            }
            fBasicEffect.World      = fCamera.Camera.WorldMatrix;
            fBasicEffect.View       = fCamera.Camera.ViewMatrix;
            fBasicEffect.Projection = fCamera.Camera.ProjectionMatrix;


            foreach (EffectPass pass in fBasicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                fLines.Render();
            }
        }