Matériaux BasicEffect

Page mise à jour :
Date de création de la page :

résumé

Manipulez les paramètres liés à la partie matérielle du BasicEffect pour voir à quoi ressemble le modèle.

Environnement d’exploitation

Conditions préalables

Versions XNA prises en charge
  • 4.0
Plates-formes prises en charge
  • Windows (XP SP2 ou version ultérieure, Vista, 7)
  • Xbox 360 (en anglais)
  • Windows Phone 7
Version du nuanceur de vertex requise par Windows 2.0
Version de Pixel Shader requise par Windows 2.0

Environnement d’exploitation

plateforme
  • Fenêtres 7
  • Xbox 360 (en anglais)
  • Windows Phone 7

Comment utiliser l’échantillon

Fonctionne avec le clavierManette Xbox 360Souris tactile
Sélectionnez les paramètres que vous souhaitez modifier ↑、↓ Joystick gauche ↑, ↓ Bouton gauche -
Modification des paramètres ←、→ Joystick gauche ←, → ←→ Glisser -

substance

Qu’est-ce que BasicEffect ?

Dans XNA, si vous voulez afficher des polygones 3D, vous devez écrire un programme de shader pour les dessiner et décider comment les dessiner. Pour ce faire, créez un fichier d’effet séparé, écrivez un programme, lisez-le en tant que classe d’effet (Effect) et exécutez le programme de shader.

Cependant, il existe de nombreux cas où vous n’avez pas besoin d’un effet de dessin spécial, et même dans de tels cas, un effet est nécessaire, il est donc étonnamment fastidieux de s’embêter à implémenter un programme de shader.

Par conséquent, les paramètres de base tels que les matériaux et les lumières sont préparés à l’avance en tant que propriétés afin que les effets puissent être facilement gérés « BasicEffect ». C’est très facile car vous n’avez pas besoin de créer un fichier d’effet, vous pouvez le gérer en créant simplement une instance de la classe.

Même si vous chargez des données de modèle à partir du contenu, BasicEffect est défini par défaut, de sorte que vous n’avez même pas besoin de créer une instance.

matériel

Le matériau fait principalement référence aux caractéristiques du matériau d’une substance et est utilisé pour spécifier la couleur, le degré de réflexion et la résistance de la substance. Depuis qu’il est devenu possible de l’exprimer indépendamment dans les programmes de shader, la définition d’un matériau peut avoir un sens approximatif sans être fixe, mais BasicEffect a les paramètres suivants :

Alpha Opacité. Une valeur de 1,0 indique une opacité et une valeur de 0,0 représente une transparence totale.
Couleur diffuse Couleur de la substance de l’objet à afficher. Représenter les couleurs en RVB. L’ombrage du matériau est réfléchi en fonction de l’état de la lumière.
Couleur émissive Couleur émise de l’objet à afficher. Représenter les couleurs en RVB. Puisqu’il s’agit d’une couleur qui émet sa propre lumière, la couleur est ajoutée sans être affectée par la lumière.
Couleur Spéculaire Couleur du reflet de l’objet à afficher. Représenter les couleurs en RVB. En fonction de la direction et du point de vue de la lumière, le matériau semblera être réfléchi.
SpecularPower Intensité de la réflexion de l’objet à afficher. Plus la valeur est élevée, plus la zone réfléchie est petite.

Image du changement de matériau

L’image ci-dessous montre les différentes valeurs du matériau.

État initial

Il s’agit de l’état immédiatement après le chargement des données de l’exemple de modèle.

初期状態

Alpha 1
Diffus (rouge) 0.8
Diffus (vert) 0.8
Diffus (bleu) 0
Émissif (rouge) 0
Émissif (vert) 0
Émissif (bleu) 0
Spéculaire (rouge) 0
Spéculaire (vert) 0
Spéculaire (bleu) 0
SpecularPower 5

Modification de l’opacité (alpha)

C’est à ce moment-là que vous modifiez l’opacité. La couleur bleue de l’arrière-plan est faiblement visible.

不透明度(Alpha)変更

Alpha 0.31
Diffus (rouge) 0.8
Diffus (vert) 0.8
Diffus (bleu) 0
Émissif (rouge) 0
Émissif (vert) 0
Émissif (bleu) 0
Spéculaire (rouge) 0
Spéculaire (vert) 0
Spéculaire (bleu) 0
SpecularPower 5

Modifications diffuses

La couleur de la substance est modifiée pour la rendre bleuâtre.

Diffuse 変更

Alpha 1
Diffus (rouge) 0.05
Diffus (vert) 0.71
Diffus (bleu) 1
Émissif (rouge) 0
Émissif (vert) 0
Émissif (bleu) 0
Spéculaire (rouge) 0
Spéculaire (vert) 0
Spéculaire (bleu) 0
SpecularPower 5

Modifications émissives

Les éléments rouges et bleus d’Emissive sont maximisés. Quel que soit l’état de la lumière, au moins l’état violet est maintenu.

Emissive 変更

Alpha 1
Diffus (rouge) 0.8
Diffus (vert) 0.8
Diffus (bleu) 0
Émissif (rouge) 1
Émissif (vert) 0
Émissif (bleu) 1
Spéculaire (rouge) 0
Spéculaire (vert) 0
Spéculaire (bleu) 0
SpecularPower 5

Changements spéculaires

En réglant Spéculaire, le matériau apparaîtra réfléchissant.

Specular 変更

Alpha 1
Diffus (rouge) 0.8
Diffus (vert) 0.8
Diffus (bleu) 0
Émissif (rouge) 0
Émissif (vert) 0
Émissif (bleu) 0
Spéculaire (rouge) 1
Spéculaire (vert) 1
Spéculaire (bleu) 1
SpecularPower 5

Modification de la puissance spéculaire

La modification de la puissance spéculaire modifie la portée de la surface réfléchissante.

SpecularPower 変更

Alpha 1
Diffus (rouge) 0.8
Diffus (vert) 0.8
Diffus (bleu) 0
Émissif (rouge) 0
Émissif (vert) 0
Émissif (bleu) 0
Spéculaire (rouge) 1
Spéculaire (vert) 1
Spéculaire (bleu) 1
SpecularPower 20

champ

Le champ contient des informations sur le matériau à définir sur BasicEffect. De plus, il a des paramètres pour sélectionner les menus, mais comme il ne s’agit que d’un paramètre de fonctionnement, je vais omettre les détails.

/// <summary>
/// 不透明度
/// </summary>
private float alpha = 1.0f;

/// <summary>
/// ディフーズ
/// </summary>
private Vector3 diffuse = Vector3.One;

/// <summary>
/// エミッシブ
/// </summary>
private Vector3 emissive = Vector3.Zero;

/// <summary>
/// スペキュラー
/// </summary>
private Vector3 specular = Vector3.Zero;

/// <summary>
/// スペキュラーの強さ
/// </summary>
private float specularPower = 5.0f;

Récupération de la matière du modèle

La valeur du matériau défini dans le modèle en tant que valeur initiale est récupérée. Dans cet exemple, le code est écrit en supposant qu’il n’y a qu’un seul effet défini dans le modèle.

// ライトとビュー、プロジェクションはあらかじめ設定しておく
foreach (ModelMesh mesh in this.model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        // デフォルトのライト適用
        effect.EnableDefaultLighting();

        // ビューマトリックスをあらかじめ設定 ((0, 0, 6) から原点を見る)
        effect.View = Matrix.CreateLookAt(
            new Vector3(0.0f, 0.0f, 6.0f),
            Vector3.Zero,
            Vector3.Up
        );

        // プロジェクションマトリックスをあらかじめ設定
        effect.Projection = Matrix.CreatePerspectiveFieldOfView(
            MathHelper.ToRadians(45.0f),
            (float)this.GraphicsDevice.Viewport.Width /
                (float)this.GraphicsDevice.Viewport.Height,
            1.0f,
            100.0f
        );

        // モデルのマテリアルを取得 //

        // アルファ
        this.alpha = effect.Alpha;

        // ディフーズ
        this.diffuse = effect.DiffuseColor;

        // エミッシブ
        this.emissive = effect.EmissiveColor;

        // スペキュラー
        this.specular = effect.SpecularColor;

        // スペキュラーの強さ
        this.specularPower = effect.SpecularPower;
    }
}

Mise en place du matériel

L’exemple définit une valeur sur BasicEffect du modèle. Pour « DiffuseColor », « EmissiveColor » et « SpecularColor », définissez dans une structure Vector3, et non dans une structure Color. Spécifiez les éléments rouge pour X, vert pour Y et bleu pour Z avec des valeurs de 0,0 ~ 1,0.

// マテリアルを設定
foreach (ModelMesh mesh in this.model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        // 不透明度
        effect.Alpha = this.alpha;

        // ディフーズ
        effect.DiffuseColor = this.diffuse;

        // エミッシブ
        effect.EmissiveColor = this.emissive;

        // スペキュラー
        effect.SpecularColor = this.specular;

        // スペキュラーの強さ
        effect.SpecularPower = this.specularPower;
    }
}

Dans l’exemple, il y a du code tel que le code d’opération de matériau et l’affichage de chaînes de valeurs, mais il y a des parties qui ne sont pas directement liées à BasicMaterial, donc je vais omettre l’explication. Vous pouvez télécharger l’exemple ou consulter le code complet.

BasicEffect.Alpha propriété

Obtient et définit l’opacité. Spécifiez une valeur comprise entre 0,0 ~ 1,0. flotter obtenir, définir

BasicEffect.DiffuseColor propriété

Obtient et définit la couleur diffuse. X est rouge, Y est vert, Z est bleu et chaque valeur est comprise entre 0,0 ~ 1,0. Vecteur 3 obtenir, définir

BasicEffect.EmissiveColor propriété

Obtient et définit la couleur émise. X est rouge, Y est vert, Z est bleu et chaque valeur est comprise entre 0,0 ~ 1,0. Vecteur 3 obtenir, définir

BasicEffect.SpecularColor propriété

Obtient et définit la couleur réfléchie. X est rouge, Y est vert, Z est bleu et chaque valeur est comprise entre 0,0 ~ 1,0. Vecteur 3 obtenir, définir

BasicEffect.SpecularPower propriété

Obtient et définit l’intensité de la réflexion. La valeur est spécifiée sous la forme 0.0~. flotter obtenir, définir

Tous les codes

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
#if WINDOWS_PHONE
using Microsoft.Xna.Framework.Input.Touch;
#endif

namespace BasicEffectMaterial
{
    /// <summary>
    /// ゲームメインクラス
    /// </summary>
    public class GameMain : Microsoft.Xna.Framework.Game
    {
        /// <summary>
        /// グラフィックデバイス管理クラス
        /// </summary>
        private GraphicsDeviceManager graphics = null;

        /// <summary>
        /// スプライトのバッチ化クラス
        /// </summary>
        private SpriteBatch spriteBatch = null;

        /// <summary>
        /// スプライトでテキストを描画するためのフォント
        /// </summary>
        private SpriteFont font = null;

        /// <summary>
        /// 直前のキーボード入力の状態
        /// </summary>
        private KeyboardState oldKeyboardState = new KeyboardState();

        /// <summary>
        /// 直前のマウスの状態
        /// </summary>
        private MouseState oldMouseState = new MouseState();

        /// <summary>
        /// 直前のゲームパッド入力の状態
        /// </summary>
        private GamePadState oldGamePadState = new GamePadState();

        /// <summary>
        /// モデル
        /// </summary>
        private Model model = null;

        /// <summary>
        /// 不透明度
        /// </summary>
        private float alpha = 1.0f;

        /// <summary>
        /// ディフーズ
        /// </summary>
        private Vector3 diffuse = Vector3.One;

        /// <summary>
        /// エミッシブ
        /// </summary>
        private Vector3 emissive = Vector3.Zero;

        /// <summary>
        /// スペキュラー
        /// </summary>
        private Vector3 specular = Vector3.Zero;

        /// <summary>
        /// スペキュラーの強さ
        /// </summary>
        private float specularPower = 5.0f;

        /// <summary>
        /// 選択しているメニューのインデックス
        /// </summary>
        private int selectedMenuIndex = 0;

        /// <summary>
        /// パラメータの最大数
        /// </summary>
        private static int MaxParameterCount = 11;

        /// <summary>
        /// メニューリスト
        /// </summary>
        private static string[] MenuNameList = new string[]
            {
                "Alpha",
                "Diffuse (Red)",
                "Diffuse (Green)",
                "Diffuse (Blue)",
                "Emissive (Red)",
                "Emissive (Green)",
                "Emissive (Blue)",
                "Specular (Red)",
                "Specular (Green)",
                "Specular (Blue)",
                "SpecularPower"
            };

        /// <summary>
        /// パラメータテキストリスト
        /// </summary>
        private string[] parameters = new string[MaxParameterCount];


        /// <summary>
        /// GameMain コンストラクタ
        /// </summary>
        public GameMain()
        {
            // グラフィックデバイス管理クラスの作成
            this.graphics = new GraphicsDeviceManager(this);

            // ゲームコンテンツのルートディレクトリを設定
            this.Content.RootDirectory = "Content";

#if WINDOWS_PHONE
            // Windows Phone のデフォルトのフレームレートは 30 FPS
            this.TargetElapsedTime = TimeSpan.FromTicks(333333);

            // バックバッファサイズの設定
            this.graphics.PreferredBackBufferWidth = 480;
            this.graphics.PreferredBackBufferHeight = 800;

            // フルスクリーン表示
            this.graphics.IsFullScreen = true;
#endif

            // ウインドウ上でマウスのポインタを表示するようにする
            this.IsMouseVisible = true;
        }

        /// <summary>
        /// ゲームが始まる前の初期化処理を行うメソッド
        /// グラフィック以外のデータの読み込み、コンポーネントの初期化を行う
        /// </summary>
        protected override void Initialize()
        {
            // コンポーネントの初期化などを行います
            base.Initialize();
        }

        /// <summary>
        /// ゲームが始まるときに一回だけ呼ばれ
        /// すべてのゲームコンテンツを読み込みます
        /// </summary>
        protected override void LoadContent()
        {
            // テクスチャーを描画するためのスプライトバッチクラスを作成します
            this.spriteBatch = new SpriteBatch(this.GraphicsDevice);

            // フォントをコンテンツパイプラインから読み込む
            this.font = this.Content.Load<SpriteFont>("Font");

            // モデルを作成
            this.model = this.Content.Load<Model>("Model");

            // ライトとビュー、プロジェクションはあらかじめ設定しておく
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    // デフォルトのライト適用
                    effect.EnableDefaultLighting();

                    // ビューマトリックスをあらかじめ設定 ((0, 0, 6) から原点を見る)
                    effect.View = Matrix.CreateLookAt(
                        new Vector3(0.0f, 0.0f, 6.0f),
                        Vector3.Zero,
                        Vector3.Up
                    );

                    // プロジェクションマトリックスをあらかじめ設定
                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(
                        MathHelper.ToRadians(45.0f),
                        (float)this.GraphicsDevice.Viewport.Width /
                            (float)this.GraphicsDevice.Viewport.Height,
                        1.0f,
                        100.0f
                    );

                    // モデルのマテリアルを取得 //

                    // アルファ
                    this.alpha = effect.Alpha;

                    // ディフーズ
                    this.diffuse = effect.DiffuseColor;

                    // エミッシブ
                    this.emissive = effect.EmissiveColor;

                    // スペキュラー
                    this.specular = effect.SpecularColor;

                    // スペキュラーの強さ
                    this.specularPower = effect.SpecularPower;
                }
            }
        }

        /// <summary>
        /// ゲームが終了するときに一回だけ呼ばれ
        /// すべてのゲームコンテンツをアンロードします
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: ContentManager で管理されていないコンテンツを
            //       ここでアンロードしてください
        }

        /// <summary>
        /// 描画以外のデータ更新等の処理を行うメソッド
        /// 主に入力処理、衝突判定などの物理計算、オーディオの再生など
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Update(GameTime gameTime)
        {
            // 入力デバイスの状態取得
            KeyboardState keyboardState = Keyboard.GetState();
            MouseState mouseState = Mouse.GetState();
            GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);

            // Xbox 360 コントローラ、Windows Phone の BACK ボタンを押したときに
            // ゲームを終了させます
            if (gamePadState.Buttons.Back == ButtonState.Pressed)
            {
                this.Exit();
            }

            
            // メニューの選択
            if ((keyboardState.IsKeyDown(Keys.Up) && this.oldKeyboardState.IsKeyUp(Keys.Up)) ||
                (gamePadState.ThumbSticks.Left.Y >= 0.5f &&
                    this.oldGamePadState.ThumbSticks.Left.Y < 0.5f))
            {
                // 選択メニューをひとつ上に移動
                this.selectedMenuIndex =
                    (this.selectedMenuIndex + this.parameters.Length - 1) % this.parameters.Length;
            }
            if ((keyboardState.IsKeyDown(Keys.Down) && this.oldKeyboardState.IsKeyUp(Keys.Down)) ||
                (gamePadState.ThumbSticks.Left.Y <= -0.5f &&
                    this.oldGamePadState.ThumbSticks.Left.Y > -0.5f) ||
                (this.oldMouseState.LeftButton == ButtonState.Pressed &&
                 mouseState.LeftButton == ButtonState.Released))
            {
                // 選択メニューをひとつ下に移動
                this.selectedMenuIndex =
                    (this.selectedMenuIndex + this.parameters.Length + 1) % this.parameters.Length;
            }

            // 各マテリアルの値を操作
            float moveValue = 0.0f;
            if (keyboardState.IsKeyDown(Keys.Left))
            {
                moveValue -= (float)gameTime.ElapsedGameTime.TotalSeconds;
            }
            if (keyboardState.IsKeyDown(Keys.Right))
            {
                moveValue += (float)gameTime.ElapsedGameTime.TotalSeconds;
            }
            if (mouseState.LeftButton == ButtonState.Pressed)
            {
                moveValue += (mouseState.X - this.oldMouseState.X) * 0.005f;
            }
            if (gamePadState.IsConnected)
            {
                moveValue += gamePadState.ThumbSticks.Left.X *
                             (float)gameTime.ElapsedGameTime.TotalSeconds;
            }

            switch (this.selectedMenuIndex)
            {
                case 0: // 不透明度
                    this.alpha = MathHelper.Clamp(this.alpha + moveValue,
                                                  0.0f,
                                                  1.0f);
                    break;
                case 1: // ディフューズ (赤)
                    this.diffuse.X = MathHelper.Clamp(this.diffuse.X + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 2: // ディフューズ (緑)
                    this.diffuse.Y = MathHelper.Clamp(this.diffuse.Y + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 3: // ディフューズ (青)
                    this.diffuse.Z = MathHelper.Clamp(this.diffuse.Z + moveValue,
                                                      0.0f,
                                                      1.0f);
                    break;
                case 4: // エミッシブ (赤)
                    this.emissive.X = MathHelper.Clamp(this.emissive.X + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 5: // エミッシブ (緑)
                    this.emissive.Y = MathHelper.Clamp(this.emissive.Y + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 6: // エミッシブ (青)
                    this.emissive.Z = MathHelper.Clamp(this.emissive.Z + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 7: // スペキュラー (赤)
                    this.specular.X = MathHelper.Clamp(this.specular.X + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 8: // スペキュラー (緑)
                    this.specular.Y = MathHelper.Clamp(this.specular.Y + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 9: // スペキュラー (青)
                    this.specular.Z = MathHelper.Clamp(this.specular.Z + moveValue,
                                                       0.0f,
                                                       1.0f);
                    break;
                case 10: // スペキュラーの強さ
                    moveValue *= 5.0f;
                    this.specularPower = MathHelper.Clamp(this.specularPower + moveValue,
                                                          0.0f,
                                                          100.0f);
                    break;
            }

            // マテリアルを設定
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                foreach (BasicEffect effect in mesh.Effects)
                {
                    // 不透明度
                    effect.Alpha = this.alpha;

                    // ディフーズ
                    effect.DiffuseColor = this.diffuse;

                    // エミッシブ
                    effect.EmissiveColor = this.emissive;

                    // スペキュラー
                    effect.SpecularColor = this.specular;

                    // スペキュラーの強さ
                    effect.SpecularPower = this.specularPower;
                }
            }

            // 入力情報を記憶
            this.oldKeyboardState = keyboardState;
            this.oldMouseState = mouseState;
            this.oldGamePadState = gamePadState;

            // 登録された GameComponent を更新する
            base.Update(gameTime);
        }

        /// <summary>
        /// 描画処理を行うメソッド
        /// </summary>
        /// <param name="gameTime">このメソッドが呼ばれたときのゲーム時間</param>
        protected override void Draw(GameTime gameTime)
        {
            // 画面を指定した色でクリアします
            this.GraphicsDevice.Clear(Color.CornflowerBlue);

            // 深度バッファを有効にする
            this.GraphicsDevice.DepthStencilState = DepthStencilState.Default;

            // モデルを描画
            foreach (ModelMesh mesh in this.model.Meshes)
            {
                mesh.Draw();
            }

            // スプライトの描画準備
            this.spriteBatch.Begin();

            // 操作
            this.spriteBatch.DrawString(this.font,
                "Up, Down : Select Menu",
                new Vector2(20.0f, 20.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "Left, right : Change Value",
                new Vector2(20.0f, 45.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "MouseClick & Drag :",
                new Vector2(20.0f, 70.0f), Color.White);
            this.spriteBatch.DrawString(this.font,
                "    Select Menu & Change Value",
                new Vector2(20.0f, 95.0f), Color.White);

            // 各メニュー //
            for (int i = 0; i < MenuNameList.Length; i++)
            {
                this.spriteBatch.DrawString(this.font,
                    MenuNameList[i],
                    new Vector2(40.0f, 120.0f + i * 24.0f), Color.White);
            }

            // 各パラメータ //

            // 不透明度
            this.parameters[0] = this.alpha.ToString();

            // ディフューズ (赤)
            this.parameters[1] = this.diffuse.X.ToString();

            // ディフューズ (緑)
            this.parameters[2] = this.diffuse.Y.ToString();

            // ディフューズ (青)
            this.parameters[3] = this.diffuse.Z.ToString();

            // エミッシブ (赤)
            this.parameters[4] = this.emissive.X.ToString();

            // エミッシブ (緑)
            this.parameters[5] = this.emissive.Y.ToString();

            // エミッシブ (青)
            this.parameters[6] = this.emissive.Z.ToString();

            // スペキュラー (赤)
            this.parameters[7] = this.specular.X.ToString();

            // スペキュラー (緑)
            this.parameters[8] = this.specular.Y.ToString();

            // スペキュラー (青)
            this.parameters[9] = this.specular.Z.ToString();

            // スペキュラーの強さ
            this.parameters[10] = this.specularPower.ToString();

            for (int i = 0; i < this.parameters.Length; i++)
            {
                this.spriteBatch.DrawString(this.font,
                    this.parameters[i],
                    new Vector2(250.0f, 120.0f + i * 24.0f), Color.White);
            }

            // 選択インデックス
            this.spriteBatch.DrawString(this.font, "*",
                new Vector2(20.0f, 124.0f + this.selectedMenuIndex * 24.0f), Color.White);

            // スプライトの一括描画
            this.spriteBatch.End();

            // 登録された DrawableGameComponent を描画する
            base.Draw(gameTime);
        }
    }
}