Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
ressource:code:processing:shaders [2022/09/07 10:53]
gweltaz
ressource:code:processing:shaders [2023/04/25 18:13] (Version actuelle)
zemog [Variables uniform communes à tous les shaders dans Processing]
Ligne 1: Ligne 1:
 +{{tag>​processing shaders}}
 ====== Initiation aux Shaders avec Processing ====== ====== Initiation aux Shaders avec Processing ======
  
 ===== Le hello World des shaders ===== ===== Le hello World des shaders =====
 +
 +Les fichiers ''​vert.glsl''​ et ''​frag.glsl''​ sont à placer dans le dossier ''​data''​ du sketch.
  
 <​accordion><​panel title="​shader_01">​ <​accordion><​panel title="​shader_01">​
Ligne 19: Ligne 22:
 </​code>​ </​code>​
  
-<code glsl freg.glsl>+<code glsl frag.glsl>
 #ifdef GL_ES #ifdef GL_ES
 precision mediump float; precision mediump float;
Ligne 54: Ligne 57:
  
 ===== Communication entre l'​application et les shaders ===== ===== Communication entre l'​application et les shaders =====
 +{{ :​ressource:​code:​processing:​shader_comm.png?​direct |}}
 +
 L'​application (programme Processing) peut envoyer des données vers les shaders par des variable déclarées avec le mot-clé ''​uniform''​. L'​application (programme Processing) peut envoyer des données vers les shaders par des variable déclarées avec le mot-clé ''​uniform''​.
 +
 +==== Fonctions GLSL ====
 +  * step(seuil, val)
 +    Renvoi 0. si val < seuil, renvoi 1. si val > seuil
 +  * smoothstep(seuil1,​ seuil2, val)
 +  * clamp()
 +  * pow()
 +  * fract()
 +    Returns the fractional part of a number
 +  * mod(a, b)
 +    a modulo b
 +  * length()
 +  * atan(y,x)
 +  * mix(v1, v2, pct)
 +    Interpolation linéaire entre v1 et v2 en fonction de '​pct'​
 +  * sign(float val)
 +    Renvoi -1 si val est négatif, 1 si val est positif
  
 ==== Fonctions Processing pour transmettre des données ==== ==== Fonctions Processing pour transmettre des données ====
Ligne 74: Ligne 96:
 > Attention ! Lorsqu'​on transmet des nombres entiers, comme par exemple : ''​set("​u_resolution",​ 512, 512)'',​ soyez sûr d'​avoir déclaré les variables ''​uniform''​ pour des types entiers, comme : ''​ivec2'',​ ''​ivec3''​... \\ > Attention ! Lorsqu'​on transmet des nombres entiers, comme par exemple : ''​set("​u_resolution",​ 512, 512)'',​ soyez sûr d'​avoir déclaré les variables ''​uniform''​ pour des types entiers, comme : ''​ivec2'',​ ''​ivec3''​... \\
 > Une autre solution est de les convertir en nombres flottants avant de les transmettre : ''​set("​u_resolution",​ float(512), float(512))''​ > Une autre solution est de les convertir en nombres flottants avant de les transmettre : ''​set("​u_resolution",​ float(512), float(512))''​
 +
 +==== Variables uniform communes à tous les shaders dans Processing ====
 +Certaines variables ''​uniform''​ sont définies dans Processing et sont disponibles dans tous les shaders.\\
 +Elles sont déclarées dans le fichier ''​PShader.java''​ de Processing.
 +<code glsl>
 +uniform mat4 transformMatrix;​ // la matrice de model view projection pour transformer les coordonnées du vertex du model space au clip space
 +uniform mat4 projectionMatrix;​ // la matrice de projection permet de passer du camera space au clip space
 +uniform mat4 modelviewMatrix;​ // la matrice modelview permet de passer du model space au world space puis au camera space
 +uniform vec2 resolution; // contient la résolution de notre fenêtre
 +uniform vec4 viewport; // contient la position de notre fenêtre ainsi que sa résolution
 +</​code>​
  
 ===== Textures ===== ===== Textures =====
 +Pour sampler un texel en GLSL (extraire la couleur d'une texture à un point donné), on utilise la fonction:
 +''​texture2D(sampler2D image, vec2 uv)''​ \\
 +Les coordonnes UV doivent être comprises entre 0.0 et 1.0 \\
 +Elles pour origine le coin bas-gauche (0, 0) contrairement aux coordonnées d'​écran,​ qui ont pour origine le coin haut-gauche.
 +
 +===== Utilisation d'un buffer hors-écran =====
 +Pratique pour créer des effets avec retour d'​information (feedback), comme par exemple un effet de réaction-diffusion.
 +
 +<code java>
 +PGraphics buffer = createGraphics(x,​ y, P2D);
 +
 +buffer.beginDraw();​
 +buffer.shader(myShader);​
 +buffer.rect(0,​ 0, buffer.width,​ buffer.height);​
 +buffer.endDraw();​
 +
 +image(buffer,​ 0, 0);
 +</​code>​
 +
  
 ===== Fonctions utiles ===== ===== Fonctions utiles =====
  • ressource/code/processing/shaders.1662540813.txt.gz
  • Dernière modification: 2022/09/07 10:53
  • par gweltaz