Möller -Trumbore交差点アルゴリズムは、最も既知のレイトライアングル交差アルゴリズムであり、RayTracerの実装に役立ちます。

Möller-TrumboreアルゴリズムのPseudocode：

//光線Rと三角形Tを与えられた場合、交差点を見つけますI

//三角形の頂点を取得します
V1 = T.V1
V2 = T.V2
V3 = T.V3

//レイの起源と方向を取得します
o = r.origin
D = R.Direction

//三角エッジのベクトルを計算します
E1 = V2 -V1
E2 = V3 -V1

//トライアングルを正常に計算します
p = d x e2
det = e1•p

//三角形と光線が平行している場合、交差点を返さない
if（det <epsilon）falseを返します。

//ベクトルをRay OriginからVertex1に計算します
T = O -V1

// BaryCentric座標を計算します
u =（t•p） / det
v =（d•t2） / det

//ポイントが三角形にあるかどうかを確認します
if（u <0 || u> 1）falseを返します。
if（v <0 || u + v> 1）falseを返します。

//交差点まで距離を計算します
t =（e2•t2） / det

//交差点がRay Originの背後に発生した場合、交差点を返さない
if（t <epsilon）falseを返します。

//交差点を返します
i = o + t * d
trueを返します。
The Möller–Trumbore intersection algorithm is the fastest known ray triangle intersection algorithm and is useful for raytracer implementation.

Pseudocode for Möller–Trumbore algorithm:

// Given a ray R and a triangle T, find intersection point I

// Get triangle vertices
V1 = T.v1
V2 = T.v2
V3 = T.v3

// Get ray origin and direction
O = R.origin
D = R.direction

// Compute vectors for triangle edges
E1 = V2 - V1
E2 = V3 - V1

// Compute triangle normal
P = D x E2
det = E1 • P

// If triangle and ray are parallel, return no intersection
if (det < epsilon) return false;

// Compute vector from ray origin to vertex1
T = O - V1

// Compute barycentric coordinates
U = (T • P) / det
V = (D • T2) / det

// Check if point is inside triangle
if (U < 0 || U > 1) return false;
if (V < 0 || U + V > 1) return false;

// Compute distance to intersection point
t = (E2 • T2) / det

// If intersection occurs behind ray origin, return no intersection
if (t < epsilon) return false;

// Return intersection point
I = O + t * D
return true;