2017-01-23 3 views
1

Ich versuche, eine erweiterte Raycaster zu erstellen. Wie würde ich eine Funktion schreiben, die zwei grids (image here) basierend auf 3 Punkten erstellen würde? Ich möchte, dass die Ausgabe zwei Arrays ist, die mit {x: 0, y: 0, z: 0} -Objekten für jeden im Bild gezeigten Schnittpunkt gefüllt sind. Hoffentlich ist das nicht zu schwer zu verstehen. Der Grund, warum ich das möchte, ist, dass ich aus jedem Pixel auf dem Bildschirm einen Raycast machen kann.Erstellen Sie eine zwei parallele Ebenen mit drei Punkten (Javascript)

+0

dotproduct und Kreuzprodukt sind deine Freunde. – CascadeCoder

Antwort

0

Lassen Sie uns Vektor c = CB, Vektor a = AB. Sie können die zweite Basisvektor für Flugzeuge als

d = c X a (cross product) 

get Einheit Basisvektoren

ua = Normalized(a) = a/Length(a) 
ud = Normalized(d) 

und bauen erhalten Gitter (Zellgrße ist Asize x DSIZE) Punkte

P[i,j] = B + ua * i * ASize + ud * j * DSize 
    for the first plane 

Q[i,j] = C + ua * i * ASize + ud * j * DSize 
    for the second plane 
+0

Können Sie den letzten Codeblock genauer erklären? In JavaScript ist P (i, j) zwei Schleifen ineinander? –

+0

Ja, 2d Array mit Gitterscheitelpunkten könnte in zwei Schleifen gefüllt sein ('für i ... für j .... P [i, j] = ...') – MBo

+0

Wenn ich wollte, dass die Ausgabe ein Array von {x: 0, y: 0, z: 0}, was würde ich anstelle von 'B + ua * i * ASize + ud * j * DSize' setzen –

Verwandte Themen