private void DrawSkinnedModel(Model model, SkinnedAnimationPlayer skinnedAnimationPlayer, RootAnimationPlayer rootAnimationPlayer)
        {
            Matrix[] boneTransforms = null;
            if (skinnedAnimationPlayer != null)
            {
                boneTransforms = skinnedAnimationPlayer.GetSkinTransforms();
            }

            Matrix rootTransform = Matrix.Identity;

            if (rootAnimationPlayer != null)
            {
                rootTransform = rootAnimationPlayer.GetCurrentTransform();
            }

            foreach (ModelMesh mesh in model.Meshes)
            {
                foreach (SkinnedEffect effect in mesh.Effects)
                {
                    effect.EnableDefaultLighting();
                    effect.Projection = projection;
                    effect.View       = view;
                    if (boneTransforms != null)
                    {
                        effect.SetBoneTransforms(boneTransforms);
                    }
                    effect.World         = rootTransform * skinnedWorld;
                    effect.SpecularColor = Vector3.Zero;
                }

                mesh.Draw();
            }
        }
        private void DrawRigidModel(Model model, RigidAnimationPlayer rigidAnimationPlayer, RootAnimationPlayer rootAnimationPlayer)
        {
            Matrix[] boneTransforms = null;
            if (rigidAnimationPlayer != null)
            {
                boneTransforms = rigidAnimationPlayer.GetBoneTransforms();
            }

            Matrix rootTransform = Matrix.Identity;

            if (rootAnimationPlayer != null)
            {
                rootTransform = rootAnimationPlayer.GetCurrentTransform();
            }

            foreach (ModelMesh mesh in model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    effect.EnableDefaultLighting();
                    effect.Projection = projection;
                    effect.View       = view;
                    if (boneTransforms != null)
                    {
                        effect.World = boneTransforms[mesh.ParentBone.Index] * rootTransform * rigidWorld;
                    }
                    else
                    {
                        effect.World = rootTransform * rigidWorld;
                    }
                }

                mesh.Draw();
            }
        }
        /// <summary>
        /// Render car model with this seperate method because we
        /// render it in 2 steps, first the solid stuff, then the alpha glass.
        /// We also rotate the wheels around :)
        /// </summary>
        /// <param name="carNumber">Car type number (0, 1 or 2) for the car
        /// texture</param>
        /// <param name="carColor">Car color we are currently using.</param>
        /// <param name="shadowCarMode">In the shadow car mode we render
        /// everything (including wheels and glass) with a special ShadowCar
        /// shader, that is very transparent. Used for the shadow car when
        /// playing that shows how we drove the last time.</param>
        /// <param name="renderMatrix">Render matrix for the car</param>
        public void RenderCar(bool renderCyclist, Color carColor,
                              Matrix renderMatrix)
        {
            //renderMatrix = Matrix.CreateTranslation(renderMatrix.Translation + Vector3.UnitZ * 5);
            // Multiply object matrix by render matrix, result is used multiple
            // times here.
            renderMatrix = objectMatrix * renderMatrix;


            Matrix[] boneTransforms = null;
            if (skinnedPlayer != null)
            {
                boneTransforms = skinnedPlayer.GetSkinTransforms();
            }

            Matrix rootTransform = Matrix.Identity;

            if (skinnedRootPlayer != null)
            {
                rootTransform = skinnedRootPlayer.GetCurrentTransform();
            }


            if (renderCyclist)
            {
                foreach (ModelMesh mesh in skinnedModel.Meshes)
                {
                    //mesh.MeshParts[0].
                    //skinned.Parameters["diffuseTexture"].SetValue();


                    foreach (Effect effect in mesh.Effects)
                    {
                        //effect.Parameters["diffuseTexture"].SetValue(effect);
                        effect.Parameters["viewProj"].SetValue(BaseGame.ViewProjectionMatrix);
                        effect.Parameters["world"].SetValue(rootTransform * renderMatrix);
                        effect.Parameters["Bones"].SetValue(boneTransforms);
                        effect.CommitChanges();

                        //effect.EnableDefaultLighting();
                        //effect.Projection = BaseGame.ProjectionMatrix;
                        //effect.View = BaseGame.ViewMatrix;
                        //if (boneTransforms != null)
                        //effect.SetBoneTransforms(boneTransforms);
                        //effect.World = rootTransform * renderMatrix;
                        //effect.SpecularColor = Vector3.Zero;
                    }

                    mesh.Draw();
                }
            }

            boneTransforms = null;
            if (rigidPlayer != null)
            {
                boneTransforms = rigidPlayer.GetBoneTransforms();
            }

            rootTransform = Matrix.Identity;
            if (rigidRootPlayer != null)
            {
                rootTransform = rigidRootPlayer.GetCurrentTransform();
            }

            foreach (ModelMesh mesh in rigidModel.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    effect.EnableDefaultLighting();
                    effect.DiffuseColor = Color.Lerp(Color.White, carColor, 0.5f).ToVector3();
                    effect.Projection   = BaseGame.ProjectionMatrix;
                    effect.View         = BaseGame.ViewMatrix;
                    if (boneTransforms != null)
                    {
                        effect.World = boneTransforms[mesh.ParentBone.Index] * rootTransform * renderMatrix;
                    }
                    else
                    {
                        effect.World = rootTransform * renderMatrix;
                    }
                    effect.SpecularPower = 64;
                }

                mesh.Draw();
            }
        }