空間の範囲
箱型の範囲
平面である 2 次元空間と範囲を長方形領域で荒らすことができたように、 3 次元空間上の範囲も 1 つの値で表せます。空間上の範囲は箱型と球体の 2 種類があり、これらの値を用いて衝突や交差を判定できます。
箱型の範囲は Microsoft.Xna.Framework.BoundingBox 構造体で表されます。
[TypeConverterAttribute("typeof(Microsoft.Xna.Framework.Design.BoundingBoxConverter)")] [SerializableAttribute] public struct BoundingBox : IEquatable<BoundingBox>
この構造体は箱の範囲を最小点と最大点の 2 点を用いて表します。オーバーロードされたコンストラクタから、これらの値を初期化できます。
public BoundingBox (Vector3 min, Vector3 max)
min パラメータにははこの最小点を、max パラメータには最大点を指定します。 例えば最小点 (0, 0, 0) から最大点 (1, 1, 1) までの箱を正の Z 軸から見たとき、箱の背面左下隅が最小点、箱の前面右上隅が最大点となります。
using System.Diagnostics; using Microsoft.Xna.Framework; public class TestGame : Game { public static void Main(string[] args) { BoundingBox box1 = new BoundingBox(); BoundingBox box2 = new BoundingBox(Vector3.Zero, Vector3.One); Debug.WriteLine("box1=" + box1); Debug.WriteLine("box2=" + box2); } }
コード1は BoundingBox 構造体の値を生成し、出力しています。box1 は最小点と最大点が共に 0 にある空の箱です。box2 は最小点 (0, 0, 0) から最大点 (1, 1, 1)までの単純な箱です。
箱の最小点は Min フィールドから、最大点は Max フィールドから設定または取得できます。
public Vector3 Min
public Vector3 Max
箱の範囲は、これらのフィールドを通して任意で変更できます。
using System.Diagnostics; using Microsoft.Xna.Framework; public class TestGame : Game { public static void Main(string[] args) { BoundingBox box; box.Min = new Vector3(-5, -5, -5); box.Max = new Vector3(5, 5, 5); Debug.WriteLine("Min=" + box.Min + ", Max=" + box.Max); } }
コード2は BoundingBox 構造体を Min フィールドと Max フィールドから設定しています。
球体の範囲
空間の範囲を球体で表すには Microsoft.Xna.Framework.BoundingSphere 構造体を用います。
[TypeConverterAttribute("typeof(Microsoft.Xna.Framework.Design.BoundingSphereConverter)")] [SerializableAttribute] public struct BoundingSphere : IEquatable<BoundingSphere>
この構造体は球体の中心と半径で範囲を表します。球体の中心と半径はコンストラクタから指定できます。
public BoundingSphere (Vector3 center, float radius)
center パラメータには球の中心点を、radius パラメータには半径を指定します。
using System.Diagnostics; using Microsoft.Xna.Framework; public class TestGame : Game { public static void Main(string[] args) { Vector3 center = new Vector3(5, 5, 5); BoundingSphere sphere1 = new BoundingSphere(); BoundingSphere sphere2 = new BoundingSphere(center, 3); Debug.WriteLine("sphere1=" + sphere1); Debug.WriteLine("sphere2=" + sphere2); } }
コード3は BoundingSphere 構造体の値を生成し、出力しています。コンストラクタで設定した中心と半径が正しく設定されています。
球の中心は Center フィールド、半径は Radius フィールドから設定または取得できます。
public Vector3 Center
public float Radius
球の範囲は、これらのフィールドを通して任意で変更できます。
using System.Diagnostics; using Microsoft.Xna.Framework; public class TestGame : Game { public static void Main(string[] args) { BoundingSphere sphere; sphere.Center = Vector3.Zero; sphere.Radius = 1; Debug.WriteLine("Center=" + sphere.Center + ", Radius=" + sphere.Radius); } }
コード4は BoundingSphere 構造体の中心と半径をフィールドから設定しています。