Temel Efekt Malzemeleri

Sayfa güncel :
Sayfa oluşturma tarihi :

özet

Modelin nasıl göründüğünü görmek için BasicEffect'in malzeme kısmıyla ilgili parametreleri değiştirin.

Çalışma ortamı

Önkoşullar

Desteklenen XNA Sürümleri
  • 4.0
Desteklenen Platformlar
  • Windows (XP SP2 veya üstü, Vista, 7)
  • Xbox 360 için
  • Windows Phone 7
Windows Gerekli Köşe Gölgelendiricisi Sürümü 2.0
Windows Gerekli Pixel Shader Sürümü 2.0

Çalışma ortamı

peron
  • pencereler 7
  • Xbox 360 için
  • Windows Phone 7

Örnekle nasıl çalışılır

Çalışıyor klavyeXbox 360 denetleyicisifare dokunuşu
Değiştirmek istediğiniz parametreleri seçin ↑、↓ Sol çubuk ↑, ↓ Sol Düğme -
Parametreleri Değiştirme ←、→ Sol çubuk ←, → ←→ Sürükleme -

madde

BasicEffect Nedir?

XNA'da, 3B çokgenleri görüntülemek istiyorsanız, bunları çizmek ve nasıl çizileceğine karar vermek için bir gölgelendirici programı yazmanız gerekir. Bunu yapmak için ayrı bir efekt dosyası oluşturun, bir program yazın, bunu bir efekt sınıfı (Efekt) olarak okuyun ve gölgelendirici programını çalıştırın.

Bununla birlikte, özel bir çizim efektine ihtiyaç duymadığınız birçok durum vardır ve bu gibi durumlarda bile bir Efekt gereklidir, bu nedenle bir gölgelendirici programı uygulamakla uğraşmak şaşırtıcı derecede zahmetlidir.

Bu nedenle, malzemeler ve ışıklar gibi temel parametreler, efektlerin kolayca ele alınabilmesi için önceden özellikler olarak hazırlanır "BasicEffect". Çok kolaydır çünkü bir efekt dosyası oluşturmanıza gerek yoktur, sadece sınıfın bir örneğini oluşturarak bunu halledebilirsiniz.

Model verilerini içerikten yükleseniz bile, BasicEffect varsayılan olarak ayarlanır, bu nedenle bir örnek oluşturmanız bile gerekmez.

malzeme

Malzeme esas olarak bir maddenin malzemesinin özelliklerini ifade eder ve maddenin rengini, yansıma derecesini ve gücünü belirtmek için kullanılır. Gölgelendirici programlarında bağımsız olarak ifade etmek mümkün hale geldiğinden, bir malzemenin tanımı sabitlenmeden kaba bir anlama sahip olabilir, ancak BasicEffect aşağıdaki parametrelere sahiptir:

Alfa Opak -lık. 1,0 değeri opaklığı, 0,0 değeri ise tam saydamlığı gösterir.
Dağınık Renk Görüntülenecek nesnenin maddesinin rengi. Renkleri RGB'de temsil edin. Malzemenin gölgelenmesi, ışığın durumuna bağlı olarak yansıtılır.
EmissiveColor Görüntülenecek nesnenin yayılan rengi. Renkleri RGB'de temsil edin. Kendi ışığını yayan bir renk olduğu için ışıktan etkilenmeden renk eklenir.
Speküler Renk Görüntülenecek nesnenin yansımasının rengi. Renkleri RGB'de temsil edin. Işığın yönüne ve bakış açısına bağlı olarak, malzeme yansımış gibi görünecektir.
Speküler Güç Görüntülenecek nesnenin yansımasının yoğunluğu. Değer ne kadar yüksek olursa, yansıtılan alan o kadar küçük olur.

Malzeme değişiminin görüntüsü

Aşağıdaki resim malzemenin farklı değerlerini göstermektedir.

Başlangıç durumu

Bu, örnek model verileri yüklendikten hemen sonraki durumdur.

初期状態

Alfa 1
Dağınık (Kırmızı) 0.8
Dağınık (Yeşil) 0.8
Dağınık (Mavi) 0
Yayıcı (Kırmızı) 0
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 0
Speküler (Kırmızı) 0
Speküler (Yeşil) 0
Aynasal (Mavi) 0
Speküler Güç 5

Opaklık (Alfa) değişimi

Bu, opaklığı değiştirdiğiniz zamandır. Arka planın mavi rengi belli belirsiz görünüyor.

不透明度(Alpha)変更

Alfa 0.31
Dağınık (Kırmızı) 0.8
Dağınık (Yeşil) 0.8
Dağınık (Mavi) 0
Yayıcı (Kırmızı) 0
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 0
Speküler (Kırmızı) 0
Speküler (Yeşil) 0
Aynasal (Mavi) 0
Speküler Güç 5

Dağınık Değişiklikler

Maddenin rengi mavimsi hale gelecek şekilde değiştirilir.

Diffuse 変更

Alfa 1
Dağınık (Kırmızı) 0.05
Dağınık (Yeşil) 0.71
Dağınık (Mavi) 1
Yayıcı (Kırmızı) 0
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 0
Speküler (Kırmızı) 0
Speküler (Yeşil) 0
Aynasal (Mavi) 0
Speküler Güç 5

Yayıcı Değişiklikler

Emisive'in kırmızı ve mavi unsurları en üst düzeye çıkarılır. Işığın durumu ne olursa olsun, en azından mor durum korunur.

Emissive 変更

Alfa 1
Dağınık (Kırmızı) 0.8
Dağınık (Yeşil) 0.8
Dağınık (Mavi) 0
Yayıcı (Kırmızı) 1
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 1
Speküler (Kırmızı) 0
Speküler (Yeşil) 0
Aynasal (Mavi) 0
Speküler Güç 5

Aynasal Değişiklikler

Speküler ayarlandığında, malzeme yansıtıcı görünecektir.

Specular 変更

Alfa 1
Dağınık (Kırmızı) 0.8
Dağınık (Yeşil) 0.8
Dağınık (Mavi) 0
Yayıcı (Kırmızı) 0
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 0
Speküler (Kırmızı) 1
Speküler (Yeşil) 1
Aynasal (Mavi) 1
Speküler Güç 5

Speküler Güç Modifikasyonu

Speküler Gücün değiştirilmesi, yansıtıcı yüzeyin aralığını değiştirir.

SpecularPower 変更

Alfa 1
Dağınık (Kırmızı) 0.8
Dağınık (Yeşil) 0.8
Dağınık (Mavi) 0
Yayıcı (Kırmızı) 0
Yayıcı (Yeşil) 0
Yayıcı (Mavi) 0
Speküler (Kırmızı) 1
Speküler (Yeşil) 1
Aynasal (Mavi) 1
Speküler Güç 20

alan

Alanda, BasicEffect olarak ayarlanacak malzeme bilgileri vardır. Ek olarak, menüleri seçmek için parametrelere sahiptir, ancak yalnızca işlem için bir parametre olduğu için ayrıntıları atlayacağım.

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

Modelin malzemesinin alınması

Modelde başlangıç değeri olarak ayarlanan malzemenin değeri alınır. Bu örnekte kod, modelde yalnızca bir efekt kümesi olduğu varsayımıyla yazılmıştır.

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

Malzemenin ayarlanması

Örnek, Modelin BasicEffect değerine bir değer ayarlar. "DiffuseColor", "EmissiveColor" ve "SpecularColor" için, Color yapısında değil, Vector3'te ayarlanır. X için kırmızı, Y için yeşil ve Z için mavi öğelerini 0,0~1,0 değerleriyle belirtin.

// マテリアルを設定
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;
    }
}

Örnekte malzeme işlem kodu ve değerlerin string gösterimi gibi kodlar var ancak BasicMaterial ile doğrudan ilgili olmayan kısımlar olduğu için açıklamayı atlayacağım. Örneği indirebilir veya kodun tamamına göz atabilirsiniz.

BasicEffect.Alpha mülk

Opaklığı alır ve ayarlar. 0,0~1,0 aralığında bir değer belirtin. yüzmek al, ayarla

BasicEffect.DiffuseColor mülk

Dağıtma rengini alır ve ayarlar. X kırmızı, Y yeşil, Z mavi ve her değer 0.0~1.0 aralığındadır. Vektör3 al, ayarla

BasicEffect.EmissiveColor mülk

Yayılan rengi alır ve ayarlar. X kırmızı, Y yeşil, Z mavi ve her değer 0.0~1.0 aralığındadır. Vektör3 al, ayarla

BasicEffect.SpecularColor mülk

Yansıtılan rengi alır ve ayarlar. X kırmızı, Y yeşil, Z mavi ve her değer 0.0~1.0 aralığındadır. Vektör3 al, ayarla

BasicEffect.SpecularPower mülk

Yansımanın yoğunluğunu alır ve ayarlar. Değer 0.0~ olarak belirtilir. yüzmek al, ayarla

Tüm Kodlar

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