Esempio n. 1
0
        public override void Draw(GameTime gameTime)
        {
            if (Animated)
            {
                Matrix[] bones = AnimPlayer.GetSkinTransforms();

                // Compute camera matrices.
                Matrix view = ScèneJeu.CaméraJeu.Vue;

                Matrix projection = ScèneJeu.CaméraJeu.Projection;

                // Render the skinned mesh.
                foreach (ModelMesh mesh in Modèle.Meshes)
                {
                    Matrix mondeLocal = TransformationsModèle[mesh.ParentBone.Index] * GetMonde();
                    foreach (SkinnedEffect effect in mesh.Effects)
                    {
                        effect.SetBoneTransforms(bones);

                        effect.View       = view;
                        effect.Projection = projection;
                        effect.World      = mondeLocal;

                        effect.EnableDefaultLighting();
                    }

                    mesh.Draw();
                }
            }
            else
            {
                foreach (ModelMesh maille in Modèle.Meshes)
                {
                    Vector3[] oldColor   = new Vector3[maille.MeshParts.Count];
                    int       i          = 0;
                    Matrix    mondeLocal = TransformationsModèle[maille.ParentBone.Index] * GetMonde();
                    foreach (ModelMeshPart portionDeMaillage in maille.MeshParts)
                    {
                        BasicEffect effet = (BasicEffect)portionDeMaillage.Effect;
                        oldColor[i] = effet.EmissiveColor;
                        effet.EnableDefaultLighting();
                        GérerSurlignage(ref effet);
                        GérérCouleurCharm(ref effet);
                        effet.Projection = ScèneJeu.CaméraJeu.Projection;
                        effet.View       = ScèneJeu.CaméraJeu.Vue;
                        effet.World      = mondeLocal;
                        i++;
                    }
                    maille.Draw();
                    i = 0;
                    foreach (ModelMeshPart portionDeMaillage in maille.MeshParts)
                    {
                        BasicEffect effet = (BasicEffect)portionDeMaillage.Effect;
                        effet.EmissiveColor = oldColor[i];
                        i++;
                    }
                }
            }
            //Draw boxes
            if (DrawBoxes)
            {
                //Box effect
                if (lineEffect == null) // Comme ça on a qu'à le créer une seule fois (et on ne peut le créer dans le Initialize())
                {
                    lineEffect = new BasicEffect(ScèneJeu.GraphicsDevice);
                    lineEffect.LightingEnabled    = false;
                    lineEffect.TextureEnabled     = false;
                    lineEffect.VertexColorEnabled = true;
                }
                foreach (BoundingBoxBuffers bb in BoxDrawList)
                {
                    DrawBoundingBox(bb, lineEffect, ScèneJeu.GraphicsDevice, ScèneJeu.CaméraJeu.Vue, ScèneJeu.CaméraJeu.Projection);
                }
            }
        }
Esempio n. 2
0
        public override void Draw(GameTime gameTime)
        {
            Jeu.GraphicsDevice.BlendState = NewBlendState;

            if (Animated)
            {
                Matrix[] bones = AnimPlayer.GetSkinTransforms();

                // Compute camera matrices.
                Matrix view = ScèneJeu.CaméraJeu.Vue;

                Matrix projection = ScèneJeu.CaméraJeu.Projection;

                // Render the skinned mesh.
                foreach (ModelMesh mesh in Modèle.Meshes)
                {
                    Matrix mondeLocal = TransformationsModèle[mesh.ParentBone.Index] * GetMonde();
                    foreach (SkinnedEffect effect in mesh.Effects)
                    {
                        effect.SetBoneTransforms(bones);

                        effect.View       = view;
                        effect.Projection = projection;
                        effect.World      = mondeLocal;
                        effect.Texture    = Texture; //not sure if works
                        effect.EnableDefaultLighting();

                        effect.SpecularColor = new Vector3(0.25f);
                        effect.SpecularPower = 16;
                    }

                    mesh.Draw();
                }
            }
            else
            {
                foreach (ModelMesh maille in Modèle.Meshes)
                {
                    Matrix mondeLocal = TransformationsModèle[maille.ParentBone.Index] * GetMonde();
                    foreach (ModelMeshPart portionDeMaillage in maille.MeshParts)
                    {
                        BasicEffect effet = (BasicEffect)portionDeMaillage.Effect;
                        effet.EnableDefaultLighting();
                        effet.Projection     = ScèneJeu.CaméraJeu.Projection;
                        effet.View           = ScèneJeu.CaméraJeu.Vue;
                        effet.World          = mondeLocal;
                        effet.TextureEnabled = true;
                        effet.Texture        = Texture;
                    }
                    maille.Draw();
                }

                //Draw boxes
                if (DrawBoxes)
                {
                    //Box effect
                    if (lineEffect == null) // Comme ça on a qu'à le créer une seule fois (et on ne peut le créer dans le Initialize())
                    {
                        lineEffect = new BasicEffect(ScèneJeu.GraphicsDevice);
                        lineEffect.LightingEnabled    = false;
                        lineEffect.TextureEnabled     = false;
                        lineEffect.VertexColorEnabled = true;
                    }

                    foreach (BoundingBoxBuffers bb in BoxDrawList)
                    {
                        DrawBoundingBox(bb, lineEffect, ScèneJeu.GraphicsDevice, ScèneJeu.CaméraJeu.Vue, ScèneJeu.CaméraJeu.Projection);
                    }
                }
            }

            Jeu.GraphicsDevice.BlendState = OldBlendState;
        }