Types d'uniformes

Chaque uniforme doit avoir une propriété `value`. Le type de la valeur doit correspondre au type de la variable uniforme dans le code GLSL tel que spécifié pour les types GLSL primitifs dans le tableau ci-dessous. Les structures et tableaux d'uniformes sont également pris en charge. Les tableaux GLSL de type primitif doivent être spécifiés soit comme un tableau des objets THREE correspondants, soit comme un tableau plat contenant les données de tous les objets. En d'autres termes, les primitives GLSL dans les tableaux ne doivent pas être représentées par des tableaux. Cette règle ne s'applique pas de manière transitive. Un tableau de tableaux `vec2`, chacun d'une longueur de cinq vecteurs, doit être un tableau de tableaux, soit de cinq objets `Vector2`, soit de dix `number`s.

GLSL type JavaScript type
int Number
uint Number
float Number
bool Boolean
bool Number
vec2 Vector2
vec2 Float32Array (*)
vec2 Array (*)
vec3 Vector3
vec3 Color
vec3 Float32Array (*)
vec3 Array (*)
vec4 Vector4
vec4 Quaternion
vec4 Float32Array (*)
vec4 Array (*)
mat2 Float32Array (*)
mat2 Array (*)
mat3 Matrix3
mat3 Float32Array (*)
mat3 Array (*)
mat4 Matrix4
mat4 Float32Array (*)
mat4 Array (*)
ivec2, bvec2 Float32Array (*)
ivec2, bvec2 Array (*)
ivec3, bvec3 Int32Array (*)
ivec3, bvec3 Array (*)
ivec4, bvec4 Int32Array (*)
ivec4, bvec4 Array (*)
sampler2D Texture
samplerCube CubeTexture

(*) De même pour un tableau (le plus interne) (dimension) du même type GLSL, contenant les composants de tous les vecteurs ou matrices du tableau.

Uniforms structurés

Parfois, vous voulez organiser les uniformes en tant que `structs` dans votre code de shader. Le style suivant doit être utilisé pour que `three.js` puisse traiter les données d'uniformes structurées.

uniforms = {
  data: { 
    value: {
      position: new Vector3(), 
      direction: new Vector3( 0, 0, 1 ) 
    } 
  } 
};
Cette définition peut être mappée sur le code GLSL suivant :
struct Data { 
  vec3 position;
  vec3 direction;
};
uniform Data data;

Uniforms structurés avec tableaux

Il est également possible de gérer des `structs` dans des tableaux. La syntaxe pour ce cas d'utilisation est la suivante :

const entry1 = {
  position: new Vector3(),
  direction: new Vector3( 0, 0, 1 )
};
const entry2 = {
  position: new Vector3( 1, 1, 1 ),
  direction: new Vector3( 0, 1, 0 )
};

uniforms = {
  data: {
    value: [ entry1, entry2 ]
  }
};
Cette définition peut être mappée sur le code GLSL suivant :
struct Data { 
  vec3 position; 
  vec3 direction; 
};
uniform Data data[ 2 ];