GLSL Konstruktoren Selektoren Swizzles
← GLSL Datentypen | ● | GLSL Funktionen →
GLSL Konstruktoren
Konstanten werden mit Konstruktoren erstellt:
erstellt einen Vektor, der als Vertex mit den homogenen Koordinaten $(1 ~ 1 ~ 0)^T$ oder als (opaque) Farbe Gelb interpretiert werden kann.
Konstruktoren können benutzt werden, um aus niederdimensionalen Vektoren höherdimensionale zu machen; es müssen genügend Komponenten vorhanden sein. In GLM bzw. dem Framework im Hauptprogramm werden die 2. und 3. Komponente mit 0 aufgefüllt (y, z bzw. g, b); die 4. Komponente (w bzw. a/alpha) wird mit 1 aufgefüllt.
vec4 x = vec4 (a); // Geht im Shader nicht
vec4 y = vec4 (b, b); // Ergibt 4, 5, 4, 5
vec4 z = vec4 (c, 0); // Ergibt 6, 7, 8, 0
Ebenfalls funktioniert nicht:
Konstruktoren können auch benutzt werden, um bei höherdimensionalen Vektoren Komponenten abzuschneiden:
vec3 x = vec3 (a); // ergibt 4, 5, 6
vec2 y = vec2 (a); // ergibt 4, 5
Gleiches funktioniert bei Matrizen:
mat3x3 mv3 = mat3x3 (mv); // ergibt linke obere Teilmatrix
GLSL Selektoren
Auf Komponenten eines Vektors (oder einer Matrix) kann mit Selektoren zugegriffen werden:
- [0] bis [3]
- .x .y .z .w
- .r .g .b .a
- .s .t .p .q
Die Zugriffe sind gleichwertig, und man sollte die der Semantik entsprechende Version wählen (.rgba für Farben, .xyzw für Vertices, .stpq für Texturkoordinaten).
Es gilt:
o[0] == o.r == o.x == o.s;
o[1] == o.g == o.y == o.t;
o[2] == o.b == o.z == o.p;
o[3] == o.a == o.w == o.q;
Bei Matrizen wie mat4x4 m;
greift man i.d.R. über m[spalte][zeile]
auf Elemente zu. Mit m[1]
selektiert man eine Spalte der Matrix und erhält einen Vektor.
GLSL Swizzling
Mit der .rgba etc. Schreibweise können mehrere Komponenten auf einmal ausgewählt werden, um einen neuen Vektor zu erhalten; einzelne Komponenten können mehrfach auftreten. Der resultierende Vektor kann weniger oder mehr Komponenten haben!
Beispiele für ein vec4 o = vec4 (4, 5, 6, 7);
:
o.xyz // Ergibt vec3 (4,5,6); Entspricht vec3(o)
o.zyx // Ergibt vec3 (6,5,4) - Reihenfolge!
o.ggga // Ergibt vec4 (5,5,5,7)
← GLSL Datentypen | ● | GLSL Funktionen →