Einzelnen Beitrag anzeigen
Alt 24.10.09, 11:39   #18 (permalink)
friday0D
Guest
 
Likes:
Standard

@BasicAvid: good luck!
Ich habe mich sogar mal mit xna beschäftigt, bis zu einer fertigen engine ist allerdings der weg lang und steinig, nix für alleine! Ich wollte nur etwas im 3d Raum anklicken und schon bricht man sich einen ab

Nurmal so ein Eindruck für Interessierte:
Eine kleine Minifunktion: Sie macht nicht mehr als zu überprüfen, ob ein Strahl ein Dreieck durchstößt. Ist jetzt vom Level nicht nennenswert im Vergleich zu den Erfordernissen von so einer Sache wie Britonia.

Zitat:

public static int intersect_triangle(Vector3 orig, Vector3 dir,
Vector3 vert0, Vector3 vert1, Vector3 vert2,out float u,out float v,out Vector3 edge1,out Vector3 edge2,out float t)
{
// Aproximalwert (bisher nicht erforderlich gewesen)
float EPSILON = 0.000001f;

float det, inv_det;
Vector3 tvec, pvec, qvec;
// Erstellen der Dreieckspunktverbindungsvektoren
edge1 = Vector3.Subtract(vert1, vert0);
edge2 = Vector3.Subtract(vert2, vert0);

// Erstellen einer Normalen auf dem Strahl und einer Ecke
pvec = Vector3.Cross(dir, edge2);
// Determinante festlegen
det = Vector3.Dot(edge1, pvec);
// Erstellung des Verbindungsvektors zwishen dem Ortsvektor der Geraden und dem initialen Dreickspunkt
tvec = Vector3.Subtract(orig, vert0);
// Erstellen des Punktprodukts für Stützvektor u
u = Vector3.Dot(tvec, pvec);
qvec = Vector3.Cross(tvec, edge1);
//Bestimmung des Stützvektors v und t
v = Vector3.Dot(dir, qvec);
t = Vector3.Dot(edge2, qvec);

// Produkt der Stützvektoren und t mit der invertierten Determinante ergibt die Skalarfaktoren der Ebenen-
// Stützvektoren
inv_det = 1.0f / det;
t *= inv_det; u *= inv_det; v *= inv_det;

// u/v auf Gültigkeit prüfen
if (float.IsInfinity(u) | float.IsInfinity(v) | float.IsNaN(u) | float.IsNaN(v))
return 0;


if (u < 0.0 | v < 0.0)
return 0;

if (u + v > 1.0)
return 0;

return 1;
}

  Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61