Пример #1
0
        public void Render(GraphicsDeviceManager graphics, BasicEffect effect)
        {
            if (indices != null && verts != null)
            {
                if (verts.Count > 0)
                {
                    effect.TextureEnabled = textureEnabled;

                    if (textureEnabled)
                    {
                        if (Game1.textures.ContainsKey(textureName))
                        {
                            effect.Texture = Game1.textures[textureName];
                        }
                        else
                        {
                            //Console.WriteLine("missing texture: " + textureName);
                            effect.Texture = Game1.textures["test"];
                        }
                    }

                    foreach (var pass in effect.CurrentTechnique.Passes)
                    {
                        pass.Apply();

                        graphics.GraphicsDevice.DrawUserIndexedPrimitives(
                            PrimitiveType.TriangleList,
                            verts_sealed, 0, verts_sealed.Length,
                            indices, 0, indices.Length / 3,
                            VertexPositionColorTexture.VertexDeclaration
                            );
                    }

                    if (Samplers.EnableWireframe)
                    {
                        effect.TextureEnabled = false;

                        Samplers.SetToDevice(graphics, EngineRasterizer.Wireframe);

                        foreach (var pass in effect.CurrentTechnique.Passes)
                        {
                            pass.Apply();

                            graphics.GraphicsDevice.DrawUserIndexedPrimitives(
                                PrimitiveType.TriangleList,
                                verts_sealed, 0, verts_sealed.Length,
                                indices, 0, indices.Length / 3,
                                VertexPositionColorTexture.VertexDeclaration
                                );
                        }

                        Samplers.SetToDevice(graphics, EngineRasterizer.Default);
                    }
                }
                else
                {
                    Console.WriteLine("Empty QuadList!");
                }
            }
        }
Пример #2
0
        public void Render(GraphicsDeviceManager graphics, BasicEffect effect)
        {
            Samplers.SetToDevice(graphics, EngineSampler.Default);

            foreach (var ql in normalq)
            {
                ql.Value.Render(graphics, effect);
            }

            Samplers.SetToDevice(graphics, EngineSampler.Animated);

            foreach (var ql in animatedq)
            {
                ql.Value.Render(graphics, effect);
            }

            Samplers.SetToDevice(graphics, EngineSampler.Default);

            if (flagq.ContainsKey(((QuadFlags)(1 << Game1.currentflag)).ToString()))
            {
                flagq[((QuadFlags)(1 << Game1.currentflag)).ToString()].Render(graphics, effect);
            }

            if (!Game1.HideInvisible)
            {
                effect.Alpha = 0.25f;

                if (flagq.ContainsKey("invis"))
                {
                    flagq["invis"].Render(graphics, effect);
                }

                effect.Alpha = 1f;
            }
        }
Пример #3
0
        public void Draw(GraphicsDeviceManager graphics, BasicEffect effect, AlphaTestEffect alpha)
        {
            Samplers.SetToDevice(graphics, EngineSampler.Default);

            foreach (var ql in normalq)
            {
                ql.Value.Draw(graphics, effect, null);
            }

            Samplers.SetToDevice(graphics, EngineSampler.Animated);

            foreach (var ql in animatedq)
            {
                ql.Value.Draw(graphics, effect, null);
            }

            Samplers.SetToDevice(graphics, EngineSampler.Default);

            graphics.GraphicsDevice.BlendState = BlendState.Additive;

            if (flagq.ContainsKey(((QuadFlags)(1 << Game1.currentflag)).ToString()))
            {
                flagq[((QuadFlags)(1 << Game1.currentflag)).ToString()].Draw(graphics, effect, alpha);
            }

            graphics.GraphicsDevice.BlendState = BlendState.NonPremultiplied;

            foreach (var ql in alphaq)
            {
                ql.Value.Draw(graphics, effect, alpha);
            }

            effect.Alpha = 0.5f;

            if (!Game1.HideWater)
            {
                foreach (var ql in waterq)
                {
                    ql.Value.Draw(graphics, effect, null);
                }
            }

            if (!Game1.HideInvisible)
            {
                if (flagq.ContainsKey("invis"))
                {
                    flagq["invis"].Draw(graphics, effect, null);
                }
            }


            effect.Alpha = 1f;
        }
Пример #4
0
        //public static bool twoSided = false;

        private void DrawLevel()
        {
            if (RenderEnabled)
            {
                //if (loading != null && gameLoaded)
                //{
                //if we have a sky
                if (sky != null)
                {
                    effect.View       = skycamera.ViewMatrix;
                    effect.Projection = skycamera.ProjectionMatrix;

                    effect.DiffuseColor = new Vector3(1, 1, 1);
                    sky.RenderSky(graphics, effect);
                    effect.DiffuseColor = new Vector3(2.0f, 2.0f, 2.0f);
                }

                //clear z buffer
                GraphicsDevice.Clear(ClearOptions.DepthBuffer, Color.Green, 1, 0);

                //render depending on lod
                if (lodEnabled)
                {
                    effect.View       = lowcamera.ViewMatrix;
                    effect.Projection = lowcamera.ProjectionMatrix;

                    if (show_inst)
                    {
                        Samplers.SetToDevice(graphics, EngineRasterizer.DoubleSided);
                        foreach (var v in instanced)
                        {
                            v.Render(graphics, instanceEffect, lowcamera);
                        }
                    }

                    if (show_paths)
                    {
                        Samplers.SetToDevice(graphics, EngineRasterizer.DoubleSided);
                        foreach (var v in paths)
                        {
                            v.Render(graphics, instanceEffect, lowcamera);
                        }
                    }

                    Samplers.SetToDevice(graphics, EngineRasterizer.Default);

                    foreach (MGLevel qb in quads_low)
                    {
                        qb.Render(graphics, effect);
                    }

                    foreach (Kart k in karts)
                    {
                        k.Render(graphics, instanceEffect, lowcamera);
                    }
                }
                else
                {
                    if (show_inst)
                    {
                        Samplers.SetToDevice(graphics, EngineRasterizer.DoubleSided);
                        foreach (var v in instanced)
                        {
                            v.Render(graphics, instanceEffect, camera);
                        }
                    }

                    if (show_paths)
                    {
                        Samplers.SetToDevice(graphics, EngineRasterizer.DoubleSided);
                        foreach (var v in paths)
                        {
                            v.Render(graphics, instanceEffect, camera);
                        }
                    }

                    Samplers.SetToDevice(graphics, EngineRasterizer.Default);

                    effect.View       = camera.ViewMatrix;
                    effect.Projection = camera.ProjectionMatrix;

                    foreach (MGLevel qb in levels)
                    {
                        qb.Render(graphics, effect);
                    }

                    foreach (Kart k in karts)
                    {
                        k.Render(graphics, instanceEffect, camera);
                    }
                }
            }
        }
Пример #5
0
        //public static bool twoSided = false;

        private void DrawLevel(FirstPersonCamera cam = null)
        {
            if (RenderEnabled)
            {
                //if (loading != null && gameLoaded)
                //{
                //if we have a sky and sky is enabled
                if (sky != null && settings.Sky)
                {
                    effect.View       = skycamera.ViewMatrix;
                    effect.Projection = skycamera.ProjectionMatrix;

                    effect.DiffuseColor /= 2;
                    sky.DrawSky(graphics, effect, null);
                    effect.DiffuseColor *= 2;

                    alphaTestEffect.DiffuseColor = effect.DiffuseColor;

                    //clear z buffer
                    GraphicsDevice.Clear(ClearOptions.DepthBuffer, Color.Green, 1, 0);
                }

                effect.View       = (cam != null ? cam.ViewMatrix : camera.ViewMatrix);
                effect.Projection = (cam != null ? cam.ProjectionMatrix : camera.ProjectionMatrix);

                alphaTestEffect.View       = effect.View;
                alphaTestEffect.Projection = effect.Projection;


                if (settings.Models || settings.BotsPath)
                {
                    Samplers.SetToDevice(graphics, EngineRasterizer.DoubleSided);

                    if (settings.Models)
                    {
                        foreach (var v in instanced)
                        {
                            v.Draw(graphics, instanceEffect, null, (cam != null ? cam : camera));
                        }

                        //render karts
                        foreach (Kart k in karts)
                        {
                            k.Draw(graphics, instanceEffect, null, (cam != null ? cam : camera));
                        }
                    }

                    if (settings.BotsPath)
                    {
                        foreach (var v in paths)
                        {
                            v.Draw(graphics, instanceEffect, null, (cam != null ? cam : camera));
                        }
                    }

                    Samplers.SetToDevice(graphics, EngineRasterizer.Default);
                }

                Samplers.SetToDevice(graphics, EngineRasterizer.Default);

                //render depending on lod
                foreach (MGLevel qb in (settings.UseLowLod ? MeshLow : MeshHigh))
                {
                    qb.Draw(graphics, effect, alphaTestEffect);
                }


                if (settings.VisData)
                {
                    //GraphicsDevice.Clear(ClearOptions.DepthBuffer, Color.Green, 1, 0);

                    //texture enabled makes visdata invisible
                    effect.TextureEnabled = false;

                    foreach (var x in bbox)
                    {
                        foreach (var pass in effect.CurrentTechnique.Passes)
                        {
                            pass.Apply();
                            graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineList, x, 0, x.Length / 2);
                        }
                    }

                    if (settings.VisDataLeaves)
                    {
                        foreach (var x in bbox2)
                        {
                            foreach (var pass in effect.CurrentTechnique.Passes)
                            {
                                pass.Apply();
                                graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineList, x, 0, x.Length / 2);
                            }
                        }
                    }
                }
            }
        }