BasicEffect materiāli

Lapa atjaunota :
Lapas izveides datums :

Kopsavilkuma

Manipulējiet ar parametriem, kas saistīti ar BasicEffect materiālo daļu, lai redzētu, kā modelis izskatās.

Darbības vide

Priekšnoteikumi

Atbalstītās XNA versijas
  • 4.0
Atbalstītās platformas
  • Windows (XP SP2 vai jaunāka versija, Vista, 7)
  • Xbox 360
  • Windows tālrunis 7
Windows nepieciešamā Vertex Shader versija 2.0
Windows nepieciešamā Pixel Shader versija 2.0

Darbības vide

platforma
  • Operētājsistēmā Windows 7
  • Xbox 360
  • Windows tālrunis 7

Kā strādāt ar paraugu

Darbojas tastatūraXbox 360 kontrolierismouse touch
Atlasiet parametrus, kurus vēlaties mainīt ↑、↓ Kreisā nūja ↑, ↓ Kreisā poga -
Parametru maiņa ←、→ Kreisā nūja ←, → ←→ vilkt -

viela

Kas ir BasicEffect?

XNA, ja vēlaties parādīt 3D daudzstūrus, jums ir jāraksta ēnotāja programma, lai tos uzzīmētu un izlemtu, kā tos uzzīmēt. Lai to izdarītu, izveidojiet atsevišķu efektu failu, uzrakstiet programmu, izlasiet to kā efektu klasi (efekts) un izpildiet ēnotāju programmu.

Tomēr ir daudz gadījumu, kad jums nav nepieciešams īpašs zīmēšanas efekts, un pat šādos gadījumos ir nepieciešams efekts, tāpēc ir pārsteidzoši apgrūtinoši apgrūtināt ēnotāju programmas ieviešanu.

Tāpēc pamatparametri, piemēram, materiāli un gaismas, tiek iepriekš sagatavoti kā īpašības, lai efektus varētu viegli apstrādāt "BasicEffect". Tas ir ļoti vienkārši, jo jums nav jāizveido efekta fails, varat to apstrādāt, vienkārši izveidojot klases instanci.

Pat ja ielādējat modeļa datus no satura, BasicEffect ir iestatīts pēc noklusējuma, tāpēc jums pat nav jāizveido instance.

materiāls

Materiāls galvenokārt attiecas uz vielas materiāla īpašībām, un to izmanto, lai noteiktu vielas krāsu, atstarošanas pakāpi un izturību. Tā kā ir kļuvis iespējams to patstāvīgi izteikt ēnotāju programmās, materiāla definīcijai var būt aptuvena nozīme bez fiksēšanas, bet BasicEffect ir šādi parametri:

Alfa Necaurredzamība. Vērtība 1,0 norāda uz necaurredzamību, un vērtība 0,0 norāda uz pilnīgu caurspīdīgumu.
Difūzā krāsa Parādāmā objekta vielas krāsa. Attēlojiet krāsas RGB. Materiāla ēnojums tiek atspoguļots atkarībā no gaismas stāvokļa.
EmissiveColor Attēlojamā objekta izstarotā krāsa. Attēlojiet krāsas RGB. Tā kā tā ir krāsa, kas izstaro savu gaismu, krāsa tiek pievienota, neietekmējot gaismu.
SpecularColor Attēlojamā objekta atspulga krāsa. Attēlojiet krāsas RGB. Atkarībā no gaismas virziena un skata punkta materiāls, šķiet, tiks atspoguļots.
SpecularPower Attēlojamā objekta atstarošanas intensitāte. Jo augstāka vērtība, jo mazāks ir atspoguļotais laukums.

Materiālo izmaiņu attēls

Zemāk redzamajā attēlā parādītas dažādas materiāla vērtības.

Sākotnējais stāvoklis

Tas ir stāvoklis tūlīt pēc parauga modeļa datu ielādes.

初期状態

Alfa 1
Difūzs (sarkans) 0.8
Difūzs (zaļš) 0.8
Difūzs (zils) 0
Emissive (sarkans) 0
Emissive (zaļš) 0
Emissive (zils) 0
Specular (sarkans) 0
Specular (zaļš) 0
Spoguļattēls (zils) 0
SpecularPower 5

Necaurredzamības (alfa) izmaiņas

Tas ir tad, kad jūs maināt necaurredzamību. Fona zilā krāsa ir vāji redzama.

不透明度(Alpha)変更

Alfa 0.31
Difūzs (sarkans) 0.8
Difūzs (zaļš) 0.8
Difūzs (zils) 0
Emissive (sarkans) 0
Emissive (zaļš) 0
Emissive (zils) 0
Specular (sarkans) 0
Specular (zaļš) 0
Spoguļattēls (zils) 0
SpecularPower 5

Difūzas modifikācijas

Vielas krāsa tiek mainīta, lai padarītu to zilganu.

Diffuse 変更

Alfa 1
Difūzs (sarkans) 0.05
Difūzs (zaļš) 0.71
Difūzs (zils) 1
Emissive (sarkans) 0
Emissive (zaļš) 0
Emissive (zils) 0
Specular (sarkans) 0
Specular (zaļš) 0
Spoguļattēls (zils) 0
SpecularPower 5

Emissive modifikācijas

Emissive sarkanie un zilie elementi ir maksimāli palielināti. Neatkarīgi no gaismas stāvokļa tiek saglabāts vismaz purpura stāvoklis.

Emissive 変更

Alfa 1
Difūzs (sarkans) 0.8
Difūzs (zaļš) 0.8
Difūzs (zils) 0
Emissive (sarkans) 1
Emissive (zaļš) 0
Emissive (zils) 1
Specular (sarkans) 0
Specular (zaļš) 0
Spoguļattēls (zils) 0
SpecularPower 5

Spekulāras izmaiņas

Iestatot Specular, materiāls parādīsies atstarojošs.

Specular 変更

Alfa 1
Difūzs (sarkans) 0.8
Difūzs (zaļš) 0.8
Difūzs (zils) 0
Emissive (sarkans) 0
Emissive (zaļš) 0
Emissive (zils) 0
Specular (sarkans) 1
Specular (zaļš) 1
Spoguļattēls (zils) 1
SpecularPower 5

SpecularPower modifikācija

Mainot SpecularPower, mainās atstarojošās virsmas diapazons.

SpecularPower 変更

Alfa 1
Difūzs (sarkans) 0.8
Difūzs (zaļš) 0.8
Difūzs (zils) 0
Emissive (sarkans) 0
Emissive (zaļš) 0
Emissive (zils) 0
Specular (sarkans) 1
Specular (zaļš) 1
Spoguļattēls (zils) 1
SpecularPower 20

lauks

Laukā ir būtiska informācija, kas jāiestata uz BasicEffect. Turklāt tam ir parametri izvēlņu izvēlei, bet, tā kā tas ir tikai darbības parametrs, es izlaidīšu detaļas.

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

Modeļa materiāla izgūšana

Tiek izgūta modelī iestatītā materiāla vērtība kā sākotnējā vērtība. Šajā paraugā kods ir rakstīts, pieņemot, ka modelī ir iestatīts tikai viens efekts.

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

Materiāla iestatīšana

Paraugs iestata vērtību modeļa BasicEffect. "DiffuseColor", "EmissiveColor" un "SpecularColor", kas iestatīts vektorā3, nevis krāsu struktūrā. Norādiet sarkanās krāsas elementus X, zaļo krāsu Y un zilo krāsu Z ar vērtībām 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;
    }
}

Paraugā ir kods, piemēram, materiāla operācijas kods un vērtību virknes parādīšana, bet ir daļas, kas nav tieši saistītas ar BasicMaterial, tāpēc es izlaidīšu skaidrojumu. Jūs varat lejupielādēt paraugu vai pārbaudīt pilnu kodu.

BasicEffect.Alpha īpašums

Saņem un nosaka necaurredzamību. Norādiet vērtību diapazonā 0,0~1,0. peldēt saņemt, iestatīt

BasicEffect.DiffuseColor īpašums

Iegūst un iestata difūzo krāsu. X ir sarkans, Y ir zaļš, Z ir zils, un katra vērtība ir diapazonā 0,0 ~ 1,0. 3. vektors saņemt, iestatīt

BasicEffect.EmissiveColor īpašums

Iegūst un iestata izstaroto krāsu. X ir sarkans, Y ir zaļš, Z ir zils, un katra vērtība ir diapazonā 0,0 ~ 1,0. 3. vektors saņemt, iestatīt

BasicEffect.SpecularColor īpašums

Iegūst un iestata atspoguļoto krāsu. X ir sarkans, Y ir zaļš, Z ir zils, un katra vērtība ir diapazonā 0,0 ~ 1,0. 3. vektors saņemt, iestatīt

BasicEffect.SpecularPower īpašums

Saņem un nosaka pārdomu intensitāti. Vērtība ir norādīta kā 0,0 ~. peldēt saņemt, iestatīt

Visi kodi

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