วัสดุ BasicEffect
สรุป
จัดการพารามิเตอร์ที่เกี่ยวข้องกับส่วนวัสดุของ BasicEffect เพื่อดูว่าโมเดลมีลักษณะอย่างไร
สภาพแวดล้อมในการทํางาน
เบื้องต้น
เวอร์ชัน XNA ที่รองรับ |
|
แพลตฟอร์มที่รองรับ |
|
Windows เวอร์ชัน Vertex Shader ที่จําเป็น | 2.0 |
Windows เวอร์ชัน Pixel Shader ที่จําเป็น | 2.0 |
สภาพแวดล้อมในการทํางาน
แท่น |
|
วิธีการทํางานกับตัวอย่าง
ตัวควบคุม Xbox เมาส์แป้นพิมพ์ที่ใช้งานได้ | 360 | สัมผัส | ||
---|---|---|---|---|
เลือกพารามิเตอร์ที่คุณต้องการเปลี่ยน | ↑、↓ | แท่งซ้าย↑↓ | ปุ่มซ้าย | - |
การเปลี่ยนพารามิเตอร์ | ←、→ | ←สติ๊กซ้าย → | ←→ลาก | - |
สาร
BasicEffect คืออะไร?
ใน XNA หากคุณต้องการแสดงรูปหลายเหลี่ยม 3 มิติ คุณต้องเขียนโปรแกรม shader เพื่อวาดและตัดสินใจว่าจะวาดอย่างไร ในการทําเช่นนี้ให้สร้างไฟล์เอฟเฟกต์แยกต่างหากเขียนโปรแกรมอ่านเป็นคลาสเอฟเฟกต์ (Effect) และรันโปรแกรม shader
อย่างไรก็ตาม มีหลายกรณีที่คุณไม่จําเป็นต้องมีเอฟเฟกต์การวาดภาพพิเศษ และแม้กระทั่งในกรณีเช่นนี้ จําเป็นต้องมีเอฟเฟกต์ ดังนั้นจึงยุ่งยากอย่างน่าประหลาดใจที่จะใช้โปรแกรม shader
ดังนั้นพารามิเตอร์พื้นฐานเช่นวัสดุและไฟจึงถูกเตรียมไว้เป็นคุณสมบัติล่วงหน้าเพื่อให้สามารถจัดการเอฟเฟกต์ "BasicEffect" ได้อย่างง่ายดาย มันง่ายมากเพราะคุณไม่จําเป็นต้องสร้างไฟล์เอฟเฟกต์คุณสามารถจัดการได้โดยเพียงแค่สร้างอินสแตนซ์ของคลาส
แม้ว่าคุณจะโหลดข้อมูลโมเดลจากเนื้อหา BasicEffect จะถูกตั้งค่าตามค่าเริ่มต้น คุณจึงไม่จําเป็นต้องสร้างอินสแตนซ์ด้วยซ้ํา
วัตถุ
วัสดุส่วนใหญ่หมายถึงลักษณะของวัสดุของสารและใช้เพื่อระบุสีระดับการสะท้อนและความแข็งแรงของสาร เนื่องจากเป็นไปได้ที่จะแสดงออกอย่างอิสระในโปรแกรม shader คําจํากัดความของวัสดุจึงมีความหมายคร่าวๆโดยไม่ได้รับการแก้ไข แต่ BasicEffect มีพารามิเตอร์ต่อไปนี้:
แอลฟา | ความทึบ ค่า 1.0 แสดงถึงความทึบ และค่า 0.0 แสดงถึงความโปร่งใสอย่างสมบูรณ์ |
กระจายสี | สีของสารของวัตถุที่จะแสดง แสดงสีในรูปแบบ RGB การแรเงาของวัสดุจะสะท้อนขึ้นอยู่กับสถานะของแสง |
EmissiveColor | สีที่ปล่อยออกมาของวัตถุที่จะแสดง แสดงสีในรูปแบบ RGB เนื่องจากเป็นสีที่เปล่งแสงในตัวเอง สีจึงถูกเพิ่มเข้าไปโดยไม่ได้รับผลกระทบจากแสง |
สเปกลูลาร์คัลเลอร์ | สีของการสะท้อนของวัตถุที่จะแสดง แสดงสีในรูปแบบ RGB ขึ้นอยู่กับทิศทางและมุมมองของแสงวัสดุจะปรากฏให้เห็น |
สเปกคิวลาร์พาวเวอร์ | ความเข้มของการสะท้อนของวัตถุที่จะแสดง ยิ่งค่าสูงเท่าใด พื้นที่ก็จะยิ่งสะท้อนน้อยลงเท่านั้น |
ภาพการเปลี่ยนแปลงวัสดุ
ภาพด้านล่างแสดงค่าต่างๆ ของวัสดุ
สถานะเริ่มต้น
นี่คือสถานะทันทีหลังจากโหลดข้อมูลโมเดลตัวอย่าง
แอลฟา | 1 |
กระจาย (สีแดง) | 0.8 |
กระจาย (สีเขียว) | 0.8 |
กระจาย (สีน้ําเงิน) | 0 |
Emissive (สีแดง) | 0 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 0 |
Specular (สีแดง) | 0 |
Specular (สีเขียว) | 0 |
Specular (สีน้ําเงิน) | 0 |
สเปกคิวลาร์พาวเวอร์ | 5 |
การเปลี่ยนแปลงความทึบ (อัลฟ่า)
นี่คือเมื่อคุณเปลี่ยนความทึบ สีฟ้าของพื้นหลังจะมองเห็นได้จาง ๆ
แอลฟา | 0.31 |
กระจาย (สีแดง) | 0.8 |
กระจาย (สีเขียว) | 0.8 |
กระจาย (สีน้ําเงิน) | 0 |
Emissive (สีแดง) | 0 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 0 |
Specular (สีแดง) | 0 |
Specular (สีเขียว) | 0 |
Specular (สีน้ําเงิน) | 0 |
สเปกคิวลาร์พาวเวอร์ | 5 |
การปรับเปลี่ยนแบบกระจาย
สีของสารเปลี่ยนไปเป็นสีน้ําเงิน
แอลฟา | 1 |
กระจาย (สีแดง) | 0.05 |
กระจาย (สีเขียว) | 0.71 |
กระจาย (สีน้ําเงิน) | 1 |
Emissive (สีแดง) | 0 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 0 |
Specular (สีแดง) | 0 |
Specular (สีเขียว) | 0 |
Specular (สีน้ําเงิน) | 0 |
สเปกคิวลาร์พาวเวอร์ | 5 |
การปรับเปลี่ยนการแผ่รังสี
องค์ประกอบสีแดงและสีน้ําเงินของ Emissive ถูกขยายใหญ่สุด โดยไม่คํานึงถึงสถานะของแสงอย่างน้อยสถานะสีม่วงจะยังคงอยู่
แอลฟา | 1 |
กระจาย (สีแดง) | 0.8 |
กระจาย (สีเขียว) | 0.8 |
กระจาย (สีน้ําเงิน) | 0 |
Emissive (สีแดง) | 1 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 1 |
Specular (สีแดง) | 0 |
Specular (สีเขียว) | 0 |
Specular (สีน้ําเงิน) | 0 |
สเปกคิวลาร์พาวเวอร์ | 5 |
การเปลี่ยนแปลงพิเศษ
โดยการตั้งค่า Spectacular วัสดุจะปรากฏสะท้อนแสง
แอลฟา | 1 |
กระจาย (สีแดง) | 0.8 |
กระจาย (สีเขียว) | 0.8 |
กระจาย (สีน้ําเงิน) | 0 |
Emissive (สีแดง) | 0 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 0 |
Specular (สีแดง) | 1 |
Specular (สีเขียว) | 1 |
Specular (สีน้ําเงิน) | 1 |
สเปกคิวลาร์พาวเวอร์ | 5 |
Specular การปรับเปลี่ยนพลังงาน
การเปลี่ยน SpecularPower จะเปลี่ยนช่วงของพื้นผิวสะท้อนแสง
แอลฟา | 1 |
กระจาย (สีแดง) | 0.8 |
กระจาย (สีเขียว) | 0.8 |
กระจาย (สีน้ําเงิน) | 0 |
Emissive (สีแดง) | 0 |
Emissive (สีเขียว) | 0 |
Emissive (สีน้ําเงิน) | 0 |
Specular (สีแดง) | 1 |
Specular (สีเขียว) | 1 |
Specular (สีน้ําเงิน) | 1 |
สเปกคิวลาร์พาวเวอร์ | 20 |
สนาม
เขตข้อมูลมีข้อมูลวัสดุที่จะตั้งค่าเป็น BasicEffect นอกจากนี้ยังมีพารามิเตอร์สําหรับการเลือกเมนู แต่เนื่องจากเป็นเพียงพารามิเตอร์สําหรับการทํางานฉันจะละเว้นรายละเอียด
<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;
การดึงวัสดุของแบบจําลอง
ค่าของวัสดุที่ตั้งไว้ในแบบจําลองเป็นค่าเริ่มต้นจะถูกดึงออกมา ในตัวอย่างนี้ โค้ดถูกเขียนบนสมมติฐานว่ามีเอฟเฟกต์เพียงชุดเดียวในแบบจําลอง
// ライトとビュー、プロジェクションはあらかじめ設定しておく
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;
}
}
การตั้งค่าวัสดุ
ตัวอย่างตั้งค่าเป็น BasicEffect ของโมเดล สําหรับ "DiffuseColor", "EmissiveColor" และ "SpecularColor" ที่ตั้งค่าใน Vector3 ไม่ใช่ในโครงสร้างสี ระบุองค์ประกอบของสีแดงสําหรับ X สีเขียวสําหรับ Y และสีน้ําเงินสําหรับ Z ด้วยค่า 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;
}
}
ในตัวอย่างมีรหัสเช่นรหัสการทํางานของวัสดุและการแสดงสตริงของค่า แต่มีบางส่วนที่ไม่เกี่ยวข้องโดยตรงกับ BasicMaterial ดังนั้นฉันจะละเว้นคําอธิบาย คุณสามารถดาวน์โหลดตัวอย่างหรือตรวจสอบรหัสแบบเต็ม
BasicEffect.Alpha
ทรัพย์สิน
รับและตั้งค่าความทึบ ระบุค่าในช่วง 0.0~1.0 | ลอย | รับ ตั้งค่า |
BasicEffect.DiffuseColor
ทรัพย์สิน
รับและตั้งค่าสีกระจาย X เป็นสีแดง Y เป็นสีเขียว Z เป็นสีน้ําเงิน และแต่ละค่าอยู่ในช่วง 0.0~1.0 | เวกเตอร์ 3 | รับ ตั้งค่า |
BasicEffect.EmissiveColor
ทรัพย์สิน
รับและตั้งค่าสีที่ปล่อยออกมา X เป็นสีแดง Y เป็นสีเขียว Z เป็นสีน้ําเงิน และแต่ละค่าอยู่ในช่วง 0.0~1.0 | เวกเตอร์ 3 | รับ ตั้งค่า |
BasicEffect.SpecularColor
ทรัพย์สิน
รับและตั้งค่าสีที่สะท้อน X เป็นสีแดง Y เป็นสีเขียว Z เป็นสีน้ําเงิน และแต่ละค่าอยู่ในช่วง 0.0~1.0 | เวกเตอร์ 3 | รับ ตั้งค่า |
BasicEffect.SpecularPower
ทรัพย์สิน
รับและตั้งค่าความเข้มของการสะท้อน ค่าถูกระบุเป็น 0.0~ | ลอย | รับ ตั้งค่า |
รหัสทั้งหมด
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);
}
}
}