Materiały BasicEffect

Strona zaktualizowana :
Data utworzenia strony :

streszczenie

Manipuluj parametrami związanymi z częścią materiałową BasicEffect, aby zobaczyć, jak wygląda model.

Środowisko pracy

Warunki wstępne

Obsługiwane wersje XNA
  • 4.0
Obsługiwane platformy
  • Windows (XP SP2 lub nowszy, Vista, 7)
  • Konsola Xbox 360
  • Windows Phone 7
Wymagana wersja cieniowania wierzchołków systemu Windows 2.0
Wymagana wersja Pixel Shader dla systemu Windows 2.0

Środowisko pracy

podest
  • Okna 7
  • Konsola Xbox 360
  • Windows Phone 7

Jak pracować z próbką

Działa klawiaturaKontroler Xbox 360mysz dotykowa
Wybierz parametry, które chcesz zmienić ↑、↓ Lewy drążek ↑, ↓ Lewy przycisk -
Zmiana parametrów ←、→ Lewy drążek ←, → ←→ Przeciąganie -

substancja

Co to jest BasicEffect?

W XNA, jeśli chcesz wyświetlić wielokąty 3D, musisz napisać program do cieniowania, aby je narysować i zdecydować, jak je narysować. Aby to zrobić, utwórz osobny plik efektów, napisz program, odczytaj go jako klasę efektów (Effect) i uruchom program cieniujący.

Istnieje jednak wiele przypadków, w których nie jest potrzebny specjalny efekt rysowania, a nawet w takich przypadkach efekt jest konieczny, więc zawracanie sobie głowy implementacją programu cieniującego jest zaskakująco kłopotliwe.

Dlatego podstawowe parametry, takie jak materiały i światła, są przygotowywane jako właściwości z wyprzedzeniem, aby można było łatwo obsługiwać efekty "BasicEffect". Jest to bardzo proste, ponieważ nie musisz tworzyć pliku efektów, możesz sobie z tym poradzić, po prostu tworząc instancję klasy.

Nawet jeśli załadujesz dane modelu z zawartości, BasicEffect jest ustawiony domyślnie, więc nie musisz nawet tworzyć wystąpienia.

materiał

Materiał odnosi się głównie do właściwości materiału substancji i służy do określenia koloru, stopnia odbicia i wytrzymałości substancji. Ponieważ stało się możliwe wyrażenie go niezależnie w programach cieniujących, definicja materiału może mieć przybliżone znaczenie bez ustalenia, ale BasicEffect ma następujące parametry:

Alfa Nieprzezroczystość. Wartość 1,0 oznacza krycie, a wartość 0,0 oznacza całkowitą przezroczystość.
Kolor rozproszenia Kolor substancji wyświetlanego obiektu. Reprezentują kolory w RGB. Zacienienie materiału odbija się w zależności od stanu światła.
Kolor emisyjny Emitowany kolor obiektu, który ma być wyświetlany. Reprezentują kolory w RGB. Ponieważ jest to kolor, który emituje własne światło, kolor jest dodawany bez wpływu światła.
Kolor zwierciadlany Kolor odbicia wyświetlanego obiektu. Reprezentują kolory w RGB. W zależności od kierunku i punktu widzenia światła, materiał będzie wydawał się być odbity.
Potęga zwierciadlana Intensywność odbicia wyświetlanego obiektu. Im wyższa wartość, tym mniejszy odbity obszar.

Obraz istotnej zmiany

Poniższy obrazek przedstawia różne wartości materiału.

Stan początkowy

Jest to stan bezpośrednio po załadowaniu przykładowych danych modelu.

初期状態

Alfa 1
Rozproszenie (czerwony) 0.8
Dyfuzyjny (zielony) 0.8
Dyfuzyjny (niebieski) 0
Emisyjny (czerwony) 0
Emisyjny (zielony) 0
Emisyjny (niebieski) 0
Zwierciadlane (czerwone) 0
Zwierciadlane (zielone) 0
Zwierciadlane (niebieskie) 0
Potęga zwierciadlana 5

Zmiana krycia (alfa)

Dzieje się tak, gdy zmieniasz krycie. Niebieski kolor tła jest słabo widoczny.

不透明度(Alpha)変更

Alfa 0.31
Rozproszenie (czerwony) 0.8
Dyfuzyjny (zielony) 0.8
Dyfuzyjny (niebieski) 0
Emisyjny (czerwony) 0
Emisyjny (zielony) 0
Emisyjny (niebieski) 0
Zwierciadlane (czerwone) 0
Zwierciadlane (zielone) 0
Zwierciadlane (niebieskie) 0
Potęga zwierciadlana 5

Modyfikacje rozproszone

Kolor substancji zmienia się, aby był niebieskawy.

Diffuse 変更

Alfa 1
Rozproszenie (czerwony) 0.05
Dyfuzyjny (zielony) 0.71
Dyfuzyjny (niebieski) 1
Emisyjny (czerwony) 0
Emisyjny (zielony) 0
Emisyjny (niebieski) 0
Zwierciadlane (czerwone) 0
Zwierciadlane (zielone) 0
Zwierciadlane (niebieskie) 0
Potęga zwierciadlana 5

Modyfikacje emisyjne

Czerwone i niebieskie elementy Emissionive są zmaksymalizowane. Niezależnie od stanu światła, przynajmniej stan fioletowy jest zachowany.

Emissive 変更

Alfa 1
Rozproszenie (czerwony) 0.8
Dyfuzyjny (zielony) 0.8
Dyfuzyjny (niebieski) 0
Emisyjny (czerwony) 1
Emisyjny (zielony) 0
Emisyjny (niebieski) 1
Zwierciadlane (czerwone) 0
Zwierciadlane (zielone) 0
Zwierciadlane (niebieskie) 0
Potęga zwierciadlana 5

Zmiany zwierciadlane

Ustawienie Lustrzane powoduje, że materiał będzie wyglądał na odblaskowy.

Specular 変更

Alfa 1
Rozproszenie (czerwony) 0.8
Dyfuzyjny (zielony) 0.8
Dyfuzyjny (niebieski) 0
Emisyjny (czerwony) 0
Emisyjny (zielony) 0
Emisyjny (niebieski) 0
Zwierciadlane (czerwone) 1
Zwierciadlane (zielone) 1
Zwierciadlane (niebieskie) 1
Potęga zwierciadlana 5

Modyfikacja SpecularPower

Zmiana SpecularPower zmienia zasięg powierzchni odbijającej.

SpecularPower 変更

Alfa 1
Rozproszenie (czerwony) 0.8
Dyfuzyjny (zielony) 0.8
Dyfuzyjny (niebieski) 0
Emisyjny (czerwony) 0
Emisyjny (zielony) 0
Emisyjny (niebieski) 0
Zwierciadlane (czerwone) 1
Zwierciadlane (zielone) 1
Zwierciadlane (niebieskie) 1
Potęga zwierciadlana 20

pole

Pole zawiera informacje o materiale, które należy ustawić na wartość BasicEffect. Dodatkowo posiada parametry do wyboru menu, ale ponieważ jest to tylko parametr do działania, pominę szczegóły.

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

Pobieranie materiału modelu

Pobierana jest wartość materiału ustawiona w modelu jako wartość początkowa. W tym przykładzie kod jest napisany przy założeniu, że w modelu jest tylko jeden zestaw efektów.

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

Ustawianie materiału

Przykład ustawia wartość BasicEffect modelu. W przypadku "DiffuseColor", "EmissiveColor" i "SpecularColor" należy ustawić w strukturze Vector3, a nie w strukturze Color. Określ elementy koloru czerwonego dla X, zielonego dla Y i niebieskiego dla Z o wartościach 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;
    }
}

W przykładzie znajduje się kod taki jak kod operacji materiałowej i wyświetlanie wartości ciągów znaków, ale są części, które nie są bezpośrednio związane z BasicMaterial, więc pominę wyjaśnienie. Możesz pobrać przykład lub zapoznać się z pełnym kodem.

BasicEffect.Alpha własność

Pobiera i ustawia krycie. Określ wartość z zakresu 0,0~1,0. spławik pobierz, ustaw

BasicEffect.DiffuseColor własność

Pobiera i ustawia kolor zmiękczenia. X jest czerwony, Y jest zielony, Z jest niebieski, a każda wartość mieści się w zakresie 0,0~1,0. Wektor3 pobierz, ustaw

BasicEffect.EmissiveColor własność

Pobiera i ustawia emitowany kolor. X jest czerwony, Y jest zielony, Z jest niebieski, a każda wartość mieści się w zakresie 0,0~1,0. Wektor3 pobierz, ustaw

BasicEffect.SpecularColor własność

Pobiera i ustawia odbity kolor. X jest czerwony, Y jest zielony, Z jest niebieski, a każda wartość mieści się w zakresie 0,0~1,0. Wektor3 pobierz, ustaw

BasicEffect.SpecularPower własność

Pobiera i ustawia intensywność odbicia. Wartość jest określona jako 0,0~. spławik pobierz, ustaw

Wszystkie kody

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