Ich versuche, den Algorithmus zu implementieren erklärte auf diesem Papier verwendet, um Gitterzellen, um nach einer geraden Linie durchquert, die für Raytracing nützlich ist:Wie initialisiere ich die T-Variablen in "Ein schneller Voxel Traversal Algorithmus für Ray Tracing"?
http://www.cse.yorku.ca/~amana/research/grid.pdf
Das Papier beschreibt den Algorithmus als zwei Teile : Initialisierung und iteratives Traversieren. Ich kann den iterativen Traversal-Teil unterschreiben, aber ich habe Probleme zu verstehen, wie einige der Variablen im Initialisierungsteil berechnet werden.
Ich brauche Hilfe Initialisierung tMaxX
, tMaxY
, tDeltaX
& tDeltaY
. Ihre Initialisierungsprozedur wird wie folgt erläutert:
Als nächst wir den Wert von t bestimmen, an dem der Strahl durchquert den ersten vertikale Voxel Grenze und speichert sie in Variable tMaxX. Wir führen eine ähnliche Berechnung in y durch und speichern das Ergebnis in tMaxY. Das Minimum von Diese beiden Werte zeigen an, wie viel wir entlang des Strahls fahren können und immer noch im aktuellen Voxel bleiben.
Schließlich berechnen wir tDeltaX und tDeltaY. TDeltaX gibt an, wie weit entlang des Strahls wir (in Einheiten von t) für die horizontale Komponente einer solchen Bewegung bewegen müssen, um der Breite eines Voxels zu entsprechen. Ähnlich speichert in tDeltaY die Menge der Bewegung entlang des Strahls, die eine vertikale Komponente von hat, die der Höhe eines Voxels entspricht.
Ich bin nicht in der Lage, den Code abzuleiten, den ich benötige, bilden Sie die englische Beschreibung, die oben gegeben wird. Kann jemand es für mich in einen Mathe/Pseudocode-Ausdruck übersetzen?
Was ist x1 und x2? – subb
@subb Koordinaten von Start- und Endpunkten – MBo
Es ist zu beachten, dass diese Frac() - Funktion einen * positiven * Bruch für negative Zahlen zurückgeben muss, im Gegensatz zu dem, was in einigen Standardbibliotheken implementiert ist (die einen negativen Bruch für negative Zahlen liefern)). – josch