Je prends un cours en WebGL chez NTNU. J'explore actuellement ce que les shaders font et comment je peux les utiliser.Est-il possible d'exécuter du code une fois par appel draw dans WebGL?
Un exemple que nous avons nous montre que nous calculons une matrice de projection, puis la positionnons dans le vertex shader, puis faisons un appel draw. Je voulais essayer de faire ce calcul matriciel dans un shader.
Cela signifie que je dois placer le code ailleurs que dans la fonction main()
dans le vertex shader, puisque celui-ci est invoqué plusieurs fois par appel draw.
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;
}
Est-il possible? Suis-je un imbécile pour essayer?
Vous pourriez trouver [ces articles utiles] (http://webglfundamentals.org) – gman