[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]