# [name]

Le uniform sono delle variabili GLSL globali. Vengono passate ai programmi shader.

## Codice di Esempio

Quando si dichiara una uniform di uno [page:ShaderMaterial], viene dichiarata per valore o per oggetto.

`uniforms: { time: { value: 1.0 }, resolution: new Uniform( new Vector2() ) };`

## Tipi Uniform

Ogni uniform deve avere una proprietà `value`. Il tipo di value deve corrispondere al tipo della variabile uniform nel codice GLSL come specificato per i tipi primitivi GLSL nella tabella sotto. Anche le strutture uniform e gli array sono supportati. Gli array GLSL di tipo primitivo devono essere specificati come un array del corrispondente oggetto THREE o come un array flat contenente i dati di tutti gli oggetti. In altre parole; le primitive GLSL negli array non devono essere rappresentate dagli array. Questa regola non si applica in modo transitivo. Un array di array `vec2`, ciascuno con una lunghezza di cinque vettori, deve essere un array di array, di cinque oggetti [page:Vector2] o di dieci `numeri`.

Tipi Uniform
GLSL type | JavaScript type
--- | ---
int | [page:Number]
uint (WebGL 2) | [page:Number]
float | [page:Number]
bool | [page:Boolean]
bool | [page:Number]
vec2 | [page:Vector2 THREE.Vector2]
vec2 | [page:Float32Array Float32Array] (*)
vec2 | [page:Array Array] (*)
vec3 | [page:Vector3 THREE.Vector3]
vec3 | [page:Color THREE.Color]
vec3 | [page:Float32Array Float32Array] (*)
vec3 | [page:Array Array] (*)
vec4 | [page:Vector4 THREE.Vector4]
vec4 | [page:Quaternion THREE.Quaternion]
vec4 | [page:Float32Array Float32Array] (*)
vec4 | [page:Array Array] (*)
mat2 | [page:Float32Array Float32Array] (*)
mat2 | [page:Array Array] (*)
mat3 | [page:Matrix3 THREE.Matrix3]
mat3 | [page:Float32Array Float32Array] (*)
mat3 | [page:Array Array] (*)
mat4 | [page:Matrix4 THREE.Matrix4]
mat4 | [page:Float32Array Float32Array] (*)
mat4 | [page:Array Array] (*)
ivec2, bvec2 | [page:Float32Array Float32Array] (*)
ivec2, bvec2 | [page:Array Array] (*)
ivec3, bvec3 | [page:Int32Array Int32Array] (*)
ivec3, bvec3 | [page:Array Array] (*)
ivec4, bvec4 | [page:Int32Array Int32Array] (*)
ivec4, bvec4 | [page:Array Array] (*)
sampler2D | [page:Texture THREE.Texture]
samplerCube | [page:CubeTexture THREE.CubeTexture]

(*) Lo stesso per un array (dimensione) (più interno) dello stesso tipo GLSL, contenente i componenti di tutti i vettori o le matrici nell'array.

## Uniform Strutturate

A volte vuoi organizzare le uniform come `structs` nel tuo codice shader. È necessario utilizzare lo stile seguente in modo che three.js sia in grado di elaborare dati strutturati uniform.

`uniforms = { data: { value: { position: new Vector3(), direction: new Vector3( 0, 0, 1 ) } } };` Questa definizione può essere mappata con il seguente codice GLSL: `struct Data { vec3 position; vec3 direction; }; uniform Data data;`

## Uniforms Strutturate con Array

È anche possibile gestire `structs` negli array. La sintassi per questo caso d'uso appare così:

`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 ] } };` Questa definizione può essere mappata con il seguente codice GLSL: `struct Data { vec3 position; vec3 direction; }; uniform Data data[ 2 ];`

## Costruttore

### [name]( [param:Object value] )

value -- Un oggetto contenente il valore per impostare la uniform. Il suo tipo deve essere uno dei tipi uniform descritti sopra.

## Proprietà

### [property:Object value]

Il valore corrente della uniform.

## Metodi

### [method:Uniform clone]()

Restituisce un clone della uniform.
Se il valore della proprietà uniform è un [page:Object] con un metodo clone(), viene utilizzato, altrimenti il valore è copiato per assegnazione. I valori dell'array sono condivisi tra le [page:Uniform] clonate.

## Source

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]