Vật liệu BasicEffect

Trang Cập Nhật :
Ngày tạo trang :

tóm tắt

Thao tác các tham số liên quan đến phần vật liệu của BasicEffect để xem mô hình trông như thế nào.

Môi trường hoạt động

Điều kiện tiên quyết

Các phiên bản XNA được hỗ trợ
  • 4.0
Nền tảng được hỗ trợ
  • Windows (XP SP2 trở lên, Vista, 7)
  • Xbox 360
  • Windows Phone 7
Phiên bản Vertex Shader bắt buộc của Windows 2.0
Phiên bản Pixel Shader bắt buộc của Windows 2.0

Môi trường hoạt động

nền tảng
  • cửa sổ 7
  • Xbox 360
  • Windows Phone 7

Làm thế nào để làm việc với mẫu

điều khiển Xbox
Bàn phím hoạt độngBộ 360cảm ứng chuột
Chọn các thông số bạn muốn thay đổi ↑、↓ Thanh trái ↑, ↓ Nút bên trái -
Thay đổi thông số ←、→ Gậy trái ←, → ←→ Kéo -

chất

BasicEffect là gì?

Trong XNA, nếu bạn muốn hiển thị đa giác 3D, bạn phải viết một chương trình đổ bóng để vẽ chúng và quyết định cách vẽ chúng. Để thực hiện việc này, hãy tạo một tệp hiệu ứng riêng biệt, viết chương trình, đọc nó dưới dạng lớp hiệu ứng (Hiệu ứng) và thực thi chương trình đổ bóng.

Tuy nhiên, có nhiều trường hợp bạn không cần hiệu ứng vẽ đặc biệt và ngay cả trong những trường hợp như vậy, Hiệu ứng là cần thiết, vì vậy thật đáng ngạc nhiên khi bận tâm đến việc triển khai chương trình đổ bóng.

Do đó, các thông số cơ bản như vật liệu và đèn được chuẩn bị trước làm thuộc tính để có thể dễ dàng xử lý các hiệu ứng "BasicEffect". Nó rất dễ dàng vì bạn không cần tạo một tệp hiệu ứng, bạn có thể xử lý nó bằng cách tạo một thể hiện của lớp.

Ngay cả khi bạn tải dữ liệu Mô hình từ nội dung, BasicEffect được đặt theo mặc định, vì vậy bạn thậm chí không cần tạo phiên bản.

vật liệu

Vật liệu chủ yếu đề cập đến các đặc tính của vật liệu của một chất, và được sử dụng để chỉ định màu sắc, mức độ phản xạ và độ bền của chất. Vì có thể thể hiện nó một cách độc lập trong các chương trình đổ bóng, định nghĩa của vật liệu có thể có ý nghĩa thô mà không bị cố định, nhưng BasicEffect có các tham số sau:

Alpha Opacity. Giá trị 1,0 biểu thị độ mờ và giá trị 0,0 thể hiện độ trong suốt hoàn toàn.
Khuếch tánMàu Màu sắc của chất của đối tượng được hiển thị. Biểu diễn màu sắc trong RGB. Bóng của vật liệu được phản xạ tùy thuộc vào trạng thái của ánh sáng.
Màu phát xạ Màu phát ra của đối tượng được hiển thị. Biểu diễn màu sắc trong RGB. Vì nó là màu phát ra ánh sáng riêng, màu sắc được thêm vào mà không bị ảnh hưởng bởi ánh sáng.
SpecularColor Màu sắc của sự phản chiếu của đối tượng được hiển thị. Biểu diễn màu sắc trong RGB. Tùy thuộc vào hướng và quan điểm của ánh sáng, vật liệu sẽ xuất hiện để được phản xạ.
SpecularPower Cường độ phản xạ của đối tượng được hiển thị. Giá trị càng cao, diện tích phản ánh càng nhỏ.

Hình ảnh thay đổi vật liệu

Hình ảnh dưới đây cho thấy các giá trị khác nhau của vật liệu.

Trạng thái ban đầu

Đây là trạng thái ngay sau khi tải dữ liệu mô hình mẫu.

初期状態

Alpha 1
Khuếch tán (Đỏ) 0.8
Khuếch tán (Xanh lá cây) 0.8
Khuếch tán (Xanh dương) 0
Phát xạ (Đỏ) 0
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 0
Specular (Đỏ) 0
Specular (màu xanh lá cây) 0
Specular (Xanh dương) 0
SpecularPower 5

Thay đổi độ mờ (Alpha)

Đây là khi bạn thay đổi độ mờ. Màu xanh của nền có thể nhìn thấy mờ nhạt.

不透明度(Alpha)変更

Alpha 0.31
Khuếch tán (Đỏ) 0.8
Khuếch tán (Xanh lá cây) 0.8
Khuếch tán (Xanh dương) 0
Phát xạ (Đỏ) 0
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 0
Specular (Đỏ) 0
Specular (màu xanh lá cây) 0
Specular (Xanh dương) 0
SpecularPower 5

Sửa đổi khuếch tán

Màu sắc của chất được thay đổi để làm cho nó hơi xanh.

Diffuse 変更

Alpha 1
Khuếch tán (Đỏ) 0.05
Khuếch tán (Xanh lá cây) 0.71
Khuếch tán (Xanh dương) 1
Phát xạ (Đỏ) 0
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 0
Specular (Đỏ) 0
Specular (màu xanh lá cây) 0
Specular (Xanh dương) 0
SpecularPower 5

Sửa đổi phát xạ

Các yếu tố màu đỏ và xanh của Emissive được tối đa hóa. Bất kể trạng thái của ánh sáng, ít nhất trạng thái màu tím được duy trì.

Emissive 変更

Alpha 1
Khuếch tán (Đỏ) 0.8
Khuếch tán (Xanh lá cây) 0.8
Khuếch tán (Xanh dương) 0
Phát xạ (Đỏ) 1
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 1
Specular (Đỏ) 0
Specular (màu xanh lá cây) 0
Specular (Xanh dương) 0
SpecularPower 5

Thay đổi cụ thể

Bằng cách cài đặt Specular, vật liệu sẽ xuất hiện phản chiếu.

Specular 変更

Alpha 1
Khuếch tán (Đỏ) 0.8
Khuếch tán (Xanh lá cây) 0.8
Khuếch tán (Xanh dương) 0
Phát xạ (Đỏ) 0
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 0
Specular (Đỏ) 1
Specular (màu xanh lá cây) 1
Specular (Xanh dương) 1
SpecularPower 5

Sửa đổi SpecularPower

Thay đổi SpecularPower làm thay đổi phạm vi của bề mặt phản chiếu.

SpecularPower 変更

Alpha 1
Khuếch tán (Đỏ) 0.8
Khuếch tán (Xanh lá cây) 0.8
Khuếch tán (Xanh dương) 0
Phát xạ (Đỏ) 0
Emissive (Xanh lá cây) 0
Phát xạ (Xanh dương) 0
Specular (Đỏ) 1
Specular (màu xanh lá cây) 1
Specular (Xanh dương) 1
SpecularPower 20

trường

Trường có thông tin vật liệu để đặt thành BasicEffect. Ngoài ra, nó có các tham số để chọn menu, nhưng vì nó chỉ là một tham số để hoạt động, tôi sẽ bỏ qua các chi tiết.

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

Truy xuất tài liệu của mô hình

Giá trị của vật liệu được đặt trong mô hình dưới dạng giá trị ban đầu được truy xuất. Trong mẫu này, mã được viết dựa trên giả định rằng chỉ có một hiệu ứng được đặt trong mô hình.

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

Thiết lập tài liệu

Mẫu đặt giá trị cho BasicEffect của Mô hình. Đối với "DiffuseColor", "EmissiveColor" và "SpecularColor", được đặt trong Vector3, không phải trong cấu trúc Màu. Chỉ định các phần tử màu đỏ cho X, màu xanh lá cây cho Y và màu xanh lam cho Z với các giá trị 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;
    }
}

Trong mẫu, có mã như mã hoạt động vật liệu và hiển thị chuỗi giá trị, nhưng có những phần không liên quan trực tiếp đến BasicMaterial, vì vậy tôi sẽ bỏ qua lời giải thích. Bạn có thể tải xuống mẫu hoặc kiểm tra mã đầy đủ.

BasicEffect.Alpha tài sản

Nhận và đặt độ mờ. Chỉ định một giá trị trong phạm vi 0,0 ~ 1,0. nổi nhận, thiết lập

BasicEffect.DiffuseColor tài sản

Lấy và đặt màu khuếch tán. X có màu đỏ, Y là màu xanh lá cây, Z là màu xanh lam và mỗi giá trị nằm trong phạm vi 0,0 ~ 1,0. Vectơ3 nhận, thiết lập

BasicEffect.EmissiveColor tài sản

Nhận và đặt màu phát ra. X có màu đỏ, Y là màu xanh lá cây, Z là màu xanh lam và mỗi giá trị nằm trong phạm vi 0,0 ~ 1,0. Vectơ3 nhận, thiết lập

BasicEffect.SpecularColor tài sản

Nhận và đặt màu phản chiếu. X có màu đỏ, Y là màu xanh lá cây, Z là màu xanh lam và mỗi giá trị nằm trong phạm vi 0,0 ~ 1,0. Vectơ3 nhận, thiết lập

BasicEffect.SpecularPower tài sản

Nhận và đặt cường độ phản chiếu. Giá trị được chỉ định là 0,0 ~. nổi nhận, thiết lập

Tất cả các mã

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