How To: Draw a Model with a Custom Effect

Demonstrates how to load a Model file and draw the Model using a custom Effect without modifying the Content Pipeline.

The Complete Sample

The code in this topic shows you the technique. You can download a complete code sample for this topic, including full source code and any additional supporting files required by the sample.

Download ShadowMapping_Sample.zip.

Drawing a Model With a Custom Effect

When you load a Model, the model is set by default to use the BasicEffect. You can change this by customizing the content pipeline, or you can apply a new Effect to the Model when you load the Model.

To draw a model with a custom effect

  1. In your game's LoadContent method, load your Model, typically using the ContentManager.

    terrain = Content.Load<Model>("terrain");
    
  2. In LoadContent, load your Effect, typically using the ContentManager.

    MyEffect = content.Load<Effect>("CustomEffect");
    
  3. Iterate through each ModelMeshPart in your model, and assign your Effect to the Effect property of the ModelMeshPart.

    public static void RemapModel(Model model, Effect effect)
    {
        foreach (ModelMesh mesh in model.Meshes)
        {
            foreach (ModelMeshPart part in mesh.MeshParts)
            {
                part.Effect = effect;
            }
        }
    }
    
  4. Draw the Model, using the steps outlined in How To: Render a Model with one exception: instead of using BasicEffect, use the Effect attached to the model.

    foreach (ModelMesh mesh in terrain.Meshes)
    {
        foreach (Effect effect in mesh.Effects)
        {
            mesh.Draw();
        }
    }
    

See Also

Concepts

3D Graphics Overview

Tasks

How To: Render a Model

Reference

Model
ModelMeshPart
Effect
Draw
Effect