"BasicEffect" medžiagos

Puslapis atnaujintas :
Puslapio sukūrimo data :

suvestinė

Manipuliuokite parametrais, susijusiais su materialiąja "BasicEffect" dalimi, kad pamatytumėte, kaip modelis atrodo.

Darbo aplinka

Būtinosios sąlygos

Palaikomos XNA versijos
  • 4.0
Palaikomos platformos
  • "Windows" (XP SP2 arba naujesnė versija, Vista, 7)
  • "Xbox 360"
  • "Windows Phone 7"
"Windows" reikalinga "Vertex Shader" versija 2.0
"Windows" reikalinga "Pixel Shader" versija 2.0

Darbo aplinka

platforma
  • Langai 7
  • "Xbox 360"
  • "Windows Phone 7"

Kaip dirbti su pavyzdžiu

Veikia klaviatūraXbox 360 valdiklismouse touch
Pasirinkite parametrus, kuriuos norite keisti ↑、↓ Kairė lazda ↑, ↓ Kairysis mygtukas -
Parametrų keitimas ←、→ Kairė lazda ←, → ←→ Vilkimas -

medžiaga

Kas yra "BasicEffect"?

XNA, jei norite rodyti 3D daugiakampius, turite parašyti šešėlių programą, kad juos nupieštumėte ir nuspręstumėte, kaip juos piešti. Norėdami tai padaryti, sukurkite atskirą efekto failą, parašykite programą, perskaitykite ją kaip efektų klasę (efektas) ir vykdykite šešėlių programą.

Tačiau yra daug atvejų, kai jums nereikia specialaus piešimo efekto, ir net tokiais atvejais efektas yra būtinas, todėl stebėtinai sudėtinga vargintis įgyvendinant šešėlių programą.

Todėl pagrindiniai parametrai, tokie kaip medžiagos ir žibintai, iš anksto paruošiami kaip savybės, kad efektus būtų galima lengvai valdyti "BasicEffect". Tai labai paprasta, nes jums nereikia kurti efekto failo, galite jį tvarkyti tiesiog sukurdami klasės egzempliorių.

Net jei įkeliate modelio duomenis iš turinio, "BasicEffect" yra nustatytas pagal numatytuosius nustatymus, todėl jums net nereikia kurti egzemplioriaus.

medžiaga

Medžiaga daugiausia susijusi su medžiagos medžiagos savybėmis ir naudojama medžiagos spalvai, atspindžio laipsniui ir stiprumui nurodyti. Kadangi tapo įmanoma ją išreikšti savarankiškai šešėlių programose, medžiagos apibrėžimas gali turėti grubią reikšmę be fiksavimo, tačiau "BasicEffect" turi šiuos parametrus:

Alfa Neskaidrumo. Reikšmė 1,0 rodo neskaidrumą, o 0,0 reikšmė reiškia visišką skaidrumą.
DiffuseColor Rodomo objekto medžiagos spalva. Pateikite spalvas RGB. Medžiagos atspalvis atsispindi priklausomai nuo šviesos būklės.
EmissiveColor Rodomo objekto skleidžiama spalva. Pateikite spalvas RGB. Kadangi tai spalva, skleidžianti savo šviesą, spalva pridedama be šviesos poveikio.
SpecularColor Rodomo objekto atspindžio spalva. Pateikite spalvas RGB. Priklausomai nuo šviesos krypties ir požiūrio taško, medžiaga atsispindės.
SpecularPower Rodomo objekto atspindžio intensyvumas. Kuo didesnė vertė, tuo mažesnis plotas atsispindi.

Esminio pokyčio vaizdas

Žemiau esančiame paveikslėlyje parodytos skirtingos medžiagos vertės.

Pradinė būsena

Tai yra būsena iškart po to, kai įkeliami pavyzdinio modelio duomenys.

初期状態

Alfa 1
Difuzinis (raudonas) 0.8
Difuzinis (žalias) 0.8
Difuzinis (mėlynas) 0
Emissive (raudona) 0
Emisinis (žalias) 0
Emissive (mėlyna) 0
Specular (raudona) 0
Spektrinis (žalias) 0
Specular (mėlyna) 0
SpecularPower 5

Neskaidrumo (Alfa) pokytis

Tai yra tada, kai pakeičiate neskaidrumą. Mėlyna fono spalva yra silpnai matoma.

不透明度(Alpha)変更

Alfa 0.31
Difuzinis (raudonas) 0.8
Difuzinis (žalias) 0.8
Difuzinis (mėlynas) 0
Emissive (raudona) 0
Emisinis (žalias) 0
Emissive (mėlyna) 0
Specular (raudona) 0
Spektrinis (žalias) 0
Specular (mėlyna) 0
SpecularPower 5

Difuziniai pakeitimai

Medžiagos spalva pakeičiama, kad ji taptų melsva.

Diffuse 変更

Alfa 1
Difuzinis (raudonas) 0.05
Difuzinis (žalias) 0.71
Difuzinis (mėlynas) 1
Emissive (raudona) 0
Emisinis (žalias) 0
Emissive (mėlyna) 0
Specular (raudona) 0
Spektrinis (žalias) 0
Specular (mėlyna) 0
SpecularPower 5

Emisiniai pakeitimai

Raudoni ir mėlyni "Emissive" elementai yra maksimalūs. Nepriklausomai nuo šviesos būklės, išlaikoma bent jau violetinė būsena.

Emissive 変更

Alfa 1
Difuzinis (raudonas) 0.8
Difuzinis (žalias) 0.8
Difuzinis (mėlynas) 0
Emissive (raudona) 1
Emisinis (žalias) 0
Emissive (mėlyna) 1
Specular (raudona) 0
Spektrinis (žalias) 0
Specular (mėlyna) 0
SpecularPower 5

Spektriniai pokyčiai

Nustačius "Specular", medžiaga atrodys atspindinti.

Specular 変更

Alfa 1
Difuzinis (raudonas) 0.8
Difuzinis (žalias) 0.8
Difuzinis (mėlynas) 0
Emissive (raudona) 0
Emisinis (žalias) 0
Emissive (mėlyna) 0
Specular (raudona) 1
Spektrinis (žalias) 1
Specular (mėlyna) 1
SpecularPower 5

SpecularPower modifikacija

"SpecularPower" keitimas keičia atspindinčio paviršiaus diapazoną.

SpecularPower 変更

Alfa 1
Difuzinis (raudonas) 0.8
Difuzinis (žalias) 0.8
Difuzinis (mėlynas) 0
Emissive (raudona) 0
Emisinis (žalias) 0
Emissive (mėlyna) 0
Specular (raudona) 1
Spektrinis (žalias) 1
Specular (mėlyna) 1
SpecularPower 20

laukas

Lauke yra esminės informacijos, kurią reikia nustatyti į "BasicEffect". Be to, jame yra meniu pasirinkimo parametrai, tačiau kadangi tai tik veikimo parametras, praleisiu detales.

/// <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;

Modelio medžiagos gavimas

Gaunama modelyje nustatytos medžiagos vertė kaip pradinė vertė. Šiame pavyzdyje kodas rašomas darant prielaidą, kad modelyje yra tik vienas efektas.

// ライトとビュー、プロジェクションはあらかじめ設定しておく
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;
    }
}

Medžiagos nustatymas

Pavyzdyje nustatoma modelio "BasicEffect" reikšmė. "DiffuseColor", "EmissiveColor" ir "SpecularColor", nustatyti "Vector3", o ne spalvų struktūroje. Nurodykite raudonos spalvos elementus X, žalią Y ir mėlyną Z, kurių reikšmės yra 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;
    }
}

Pavyzdyje yra toks kodas kaip medžiagos veikimo kodas ir reikšmių eilutės rodymas, tačiau yra dalių, kurios nėra tiesiogiai susijusios su "BasicMaterial", todėl paaiškinimą praleisiu. Galite atsisiųsti pavyzdį arba patikrinti visą kodą.

BasicEffect.Alpha nuosavybė

Gauna ir nustato neskaidrumą. Nurodykite reikšmę diapazone 0,0 ~ 1,0. plūduriuoti Gaukite, nustatykite

BasicEffect.DiffuseColor nuosavybė

Gauna ir nustato difuzinę spalvą. X yra raudona, Y yra žalia, Z yra mėlyna, o kiekviena reikšmė yra diapazone 0.0 ~ 1.0. Vektorius3 Gaukite, nustatykite

BasicEffect.EmissiveColor nuosavybė

Gauna ir nustato skleidžiamą spalvą. X yra raudona, Y yra žalia, Z yra mėlyna, o kiekviena reikšmė yra diapazone 0.0 ~ 1.0. Vektorius3 Gaukite, nustatykite

BasicEffect.SpecularColor nuosavybė

Gauna ir nustato atspindėtą spalvą. X yra raudona, Y yra žalia, Z yra mėlyna, o kiekviena reikšmė yra diapazone 0.0 ~ 1.0. Vektorius3 Gaukite, nustatykite

BasicEffect.SpecularPower nuosavybė

Gauna ir nustato refleksijos intensyvumą. Reikšmė nurodyta kaip 0,0 ~. plūduriuoti Gaukite, nustatykite

Visi kodai

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);
        }
    }
}