getRenderParameters()
Wo wird diese Funktion aufgerufen?
function getRenderParameters(dir) { var result = new Array(3); // initial transformation result[0] = mat4.create(); mat4.identity(result[0]); // incremental translate vector result[1] = [0, 0, 0]; // texture index range // first parameter: first texture // second paramter: increment by result[2] = [0, 0]; var dx = Math.abs(dir[0]); var dy = Math.abs(dir[1]); var dz = Math.abs(dir[2]); if (dz>=dx && dz>=dy) // z-axis { if (dir[2]<0.0) { result[1] = [0,0,1]; result[2] = [0, 1]; } else { mat4.translate(result[0], [0,0,1]); result[1] = [0,0,-1]; result[2] = [1*numberOfSlices-1, -1]; } } else if (dy>=dx && dy>=dz) // y-axis { .... } else // x-axis { ... } return(result); }
Die Funktion bekommt die normierte Richtung des Sichtstrahls übergeben. Um die verschiedenen 2D-Texturen wie eine 3D-Textur wirken zu lassen wird später das folgende Verfahren angewendet: Je nachdem welche Komponente des Sichtstrahls am größten ist, wird der jeweilige 2D-Texturstapel (siehe im OpenGL-Volume-Renderer erarbeitetes Konzept bzw. Konvertierprogramm) aktiviert und visualisiert. Hiefür gilt es zuerst die Absolutwerte in x, y und z-Richtung miteinander zu vergleichen und die notwendigen Daten zur Rekonstruktion des sichtbaren 2D-Texturstapels zu berechnen. Diese setzen sich zusammen aus den Informationen um eine Schicht jeweils rotieren und translieren zu können bis der Stapel vollständig erstellt ist.
Hierbei muss auch noch das Vorzeichen des grössten Wertes beachtet werden um den durchdringenden Sichtstrahl richtig(= vom Auge ausgesendet) nachstellen zu können.
Result[1] gibt hierbei an, in welche Richtung später die einzelnen Schichten transliert werden sollen. Durch geeingete Wahl von initialem Rotieren der Schicht ist es möglich später nur noch die jeweilige z-Komponente verschieben zu müßen.
Result[2] legt fest welche Nummer die erste, zu verwendende, Textur besitzt und um welchen Wert die Texturnummer für den die nächste Schicht inkrementiert werden soll.
Dies entspricht der Umsetzung des Konzepts des OpenGL-Volume-Renderers.
Es gilt eine Eigenheit von Javascript zu beachten:
Da jegliche Variablen als “var” und nicht direkt als integer, string etc. deklariert werden kann es zu schwer auffindbaren Fehlern kommen. Um dies zu vermeiden hat es sich als praktikabel erwiesen Variablen, welche sicher als Zahlen interpretiert werden sollen, bei der Ãœbergabe an Funktionen explizit mit 1 zu multiplizieren. Dies erklärt die Sinnfälligkeit des Abschnitts:
result[2] = [1*numberOfSlices-1, -1];
Mit diesen Daten kann nun DrawScene Teil 3 weiter betrachtet werden.
← drawScene Teil 2 | ● | drawScene Teil 3 →