WisdomSoft - for your serial experiences.

光線

光線は開始点と方向を表す単位ベクトルで構成された3次元空間上の直線です。

位置と方向

空間内の指定した原点から特定の方向に伸びる線のことを光線と呼びます。光線は、その名前の通りのイメージです。空間上の任意の開始点から、特定の方向に無限に伸びる線を値で表現できます。

光線は Microsoft.Xna.Framework.Ray 構造体で表されます。

Microsoft.Xna.Framework.Ray 構造体
[TypeConverterAttribute("typeof(Microsoft.Xna.Framework.Design.RayConverter)")]
[SerializableAttribute()]
public struct Ray : IEquatable<Ray>

この構造体は、光線の開始点と方向の 2 つの座標を持ちます。

Ray 構造体のコンストラクタ
public Ray (Vector3 position, Vector3 direction)

position パラメータには光線の開始点を、direction パラメータには光線の向きを表す単位ベクトルを指定します。

コード1
using System.Diagnostics;
using Microsoft.Xna.Framework;

public class TestGame : Game
{
    public static void Main(string[] args)
    {
        Ray ray1 = new Ray();
        Ray ray2 = new Ray(new Vector3(10, 20, 30), Vector3.Up);

        Debug.WriteLine("ray1=" + ray1);
        Debug.WriteLine("ray2=" + ray2);
    }
}
実行結果
コード1 実行結果

コード1は光線の値を生成し、それぞれの文字列表現を出力しています。この光線を用いて、指定した方向にある平面や物体と衝突しているかを計算できます。

これらの値はフィールドで公開されています。開始点は Position フィールドから、方向は Direction フィールドから設定または取得できます。

Ray 構造体 Position フィールド
public Vector3 Position
Ray 構造体 Direction フィールド
public Vector3 Direction

方向を表す Direction フィールドには長さが 1 の単位ベクトルを設定してください。単位ベクトルは長さが 1 のベクトルで、Vector3 構造体の Normalize() メソッドから単位ベクトルを取得できます。

コード2
using System.Diagnostics;
using Microsoft.Xna.Framework;

public class TestGame : Game
{
    public static void Main(string[] args)
    {
        Ray ray;
        ray.Position = new Vector3(10, 20, 30);
        ray.Direction = Vector3.Up;

        Debug.WriteLine("ray.Position=" + ray.Position);
        Debug.WriteLine("ray.Direction=" + ray.Direction);
    }
}
実行結果
コード2 実行結果

コード2は Position フィールドと Direction フィールド用いて、光線の開始点と方向を個別に設定および取得しています。