Ich nehme einen Kurs in WebGL bei NTNU. Ich untersuche gerade, was die Shader machen und wie ich sie nutzen kann.Ist es möglich, Code einmal pro Zeichenaufruf in WebGL auszuführen?
Ein Beispiel, das wir haben, zeigt uns, dass wir eine Projektionsmatrix berechnen, setzen Sie es dann in den Vertex-Shader, dann machen Sie einen Zeichnungsaufruf. Ich wollte versuchen, diese Matrixberechnung in einem Shader durchzuführen.
Das bedeutet, ich muss den Code irgendwo anders als die main()
Funktion in den Vertex-Shader setzen, da dieser mehrmals pro Zeichenaufruf aufgerufen wird.
Vertex-Shader:
uniform vec3 camRotation;
attribute vec3 position;
void main() {
// I want this code to run only once per draw call
float rX = camRotation[0];
float rY = camRotation[1];
float rZ = camRotation[2];
mat4 camMatrix = mat4(
cos(rY) * cos(rZ), cos(rZ) * sin(rX) * sin(rY) - cos(rX) * sin(rZ), sin(rX) * sin(rZ) + cos(rX) * cos(rZ) * sin(rY), 0, //
cos(rY) * sin(rZ), cos(rX) * cos(rZ) + sin(rX) * sin(rY) * sin(rZ), cos(rX) * sin(rY) * sin(rZ) - cos(rZ) * sin(rX), 0, //
-sin(rY), cos(rY) * sin(rX), cos(rX) * cos(rY), 0, //
0, 0, 0, 1
);
// End of code in question
gl_Position = camMatrix * vec4(position, 1);
gl_PointSize = 5.0;
}
Ist es möglich? Bin ich ein Idiot, wenn ich es versuche?
Sie finden [diese Artikel nützlich] (http://webglfundamentals.org) – gman