10 3D-Liniengraphik: "line3d.ss"
Note: This is documentation for the "line3d.rkt" teachpack that goes
with the German textbook
Die Macht der
Abstraktion.
Dieses teachpack definiert Prozeduren für lineare Algebra und 3D-Rendering:
10.1 Szenen erzeugen
Der Aufruf
(render-scene width height scene camera-matrix)erzeugt die Szene
in ein Bild mit Breite
width und Höhe
height. Position,
Orientierung und Projektion werden durch die
camera-matrix festgelegt.
Der Aufruf
(create-camera-matrix position lookat vertical-fov width height)
erzeugt eine 4x4 Matrix. Diese kodiert eine Kamera an der Position
position, die
auf die Position
lookat schaut.
vertical-fov bezeichnet das
vertikale Feld der Szene.
Zum Beispiel:
10.2 3D-Vektoren
Ein
3D-Vektor (Name:
vec3) ist ein Record, der durch den Aufruf
make-vec3 erstellt wird.
(make-vec3 x y z) erstellt einen Vektor (x,y,z).
(add-vec3 a b) gibt die Summe von
a und
b zurück.
(sub-vec3 a b) gibt die Differenz zwischen
a und
b zurück.
(mult-vec3 a s) gibt den das Produkt von
a und
s zurück.
(div-vec3 a s) gibt den das Produkt von
a und dem Kehrwert von
s zurück.
normQuad-vec3 : (vec3 -> number) |
(normQuad-vec3 a) gibt die quadrierte Norm/Länge |a|² eines Vektors a zurück (Quadrat der Euklidischen Norm.)
(norm-vec3 a) gibt die Norm/Länge |
a| eines Vektors a zurück (Euklidische Norm.)
(crossproduct-vec3 a b) gibt das Kreuzprodukt von
a
und
b zurück (einen Vektor der senkrecht auf
a und
b steht).
10.3 4D-Vektoren
Ein
4D-Vektor vec4 ist ein 4D-Vektor. Folgende Prozeduren werden bereitgestellt:
(make-vec4 a b c d) erzeugt einen Vektor aus
a,
b,
c und
d.
(add-vec4 a b) gibt die Summe von
a und
b zurück.
(sub-vec4 a b) gibt die Differenz zwischen
a und
b zurück.
(mult-vec4 a s) gibt den das Produkt von
a und
s zurück.
(div-vec4 a s) gibt den das Produkt von
a und dem Kehrwert von
s zurück.
(dotproduct-vec4 a b) gibt die quadrierte Norm/Länge |
a|² eines Vektors
a zurück (Quadrat der Euklidischen Norm.)
normQuad-vec4 : (vec4 -> number) |
(normQuad-vec4 a) gibt die quadrierte Norm/Länge |a|² eines Vektors a zurück (Quadrat der Euklidischen Norm.)
(norm-vec4 a) gibt die Norm/Länge |a| eines Vektors a zurück (Euklidische Norm)
(expand-vec3 a s) gibt den 4D-Vektor mit
s als letze Komponente zurück (erweitert
a mit
s).
10.4 4x4 Matrizen
Eine
Matrix matrix4x4 ist ein Record, der durch den Aufruf
make-matrix4x4 erstellt wird.
(create-matrix4x4 a b c d) erweitert jeden Vektor in einen 4D-Vektor und kombiniert diese zu
einer Matrix
a,
b,
c und
d, wobei
a,
b,
c mit 0 und
d mit 1 erweitert wird, um eine homogene Matrix zu erzeugen.
(transform-vec3 m v) erweitert
v mit 1, multipliziert
m mit
v und dividiert das Ergebnis mit
w.
(create-lookat-matrix pos lookat up) gibt eine Kameramatrix. Ursprungspunkt ist
pos, die Z-Achse zeigt auf
lookat.
(create-projection-matrix vertical-fov/2) erzeugt eine Projektions-Matrix.
vertical-fov/2 gibt den vertikalen Winkel der Ansicht dividiert durch 2 an.
10.5 3d-Linien
Eine
3d-Linie line3d ist ein Record, der durch den Aufruf
make-line3d erstellt wird und eine farbige Linie zwischen zwei Punkten
im 3-dimensionalen Raum darstellt.
(make-line3d a b col) erstellt eine 3D-Linie zwischen Punkt
a und Punkt
b mit der Farbe
col.
extrahiert den Anfangspunkt einer 3D-Linie.
extrahiert den Endpunkt einer 3D-Linie.
extrahiert die Farbe einer 3D-Linie.
create-box : (number number number color -> (list-of line3d)) |
(create-box width height depth color) erstellt eine Box am Punkt (0,0,0) in den angebenen Ausmaßen.
(transform-primitive-list scene transformationr) wendet
transformation auf alle Punkte der Linien in
scene an und gibt
diese zurück.