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.
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;
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 ];