الموحدات هي متغيرات GLSL عالمية. يتم تمريرها إلى برامج الشادر.
عند إعلان موحد من [page:ShaderMaterial]، يتم إعلانه بواسطة القيمة أو بالكائن.
uniforms: {
time: { value: 1.0 },
resolution: new Uniform( new Vector2() )
};
يجب أن يكون لكل موحد خاصية `value`. يجب أن يتوافق نوع القيمة مع نوع المتغير الموحد في كود GLSL كما محدد لأنواع GLSL البدائية في الجدول أدناه. موحد الهياكل والمصفوفات مدعومة أيضًا. يجب تحديد مصفوفات GLSL من نوع بدائي إما كمصفوفة من كائنات THREE المقابلة أو كمصفوفة مسطحة تحتوي على بيانات جميع الكائنات. بعبارة أخرى؛ يجب عدم تمثيل المتغيرات البدائية في GLSL في المصفوفات بواسطة المصفوفات. هذه القاعدة لا تطبق ترانزيتيفًا. يجب أن تكون مصفوفة من مصفوفات `vec2`، كل منها بطول خمسة متجهات، يجب أن تكون مصفوفة من المصفوفات، من خمسة [page:Vector2] كائنات أو عشرة `number`s.
GLSL type | JavaScript type |
---|---|
int | [page:Number] |
uint | [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] |
(*) نفس الشيء بالنسبة لمصفوفة (الأبعاد الداخلية) من نفس نوع GLSL، تحتوي على مكونات جميع المتجهات أو المصفوفات في المصفوفة.
في بعض الأحيان ترغب في تنظيم الزي كـ `structs` في كود الشيدر الخاص بك. يجب استخدام النمط التالي حتى يتمكن `three.js` من معالجة بيانات الزي المنظمة.
uniforms = {
data: {
value: {
position: new Vector3(),
direction: new Vector3( 0, 0, 1 )
}
}
};
يمكن تعيين هذا التعريف على كود GLSL التالي:
struct Data {
vec3 position;
vec3 direction;
};
uniform Data data;
من الممكن أيضًا إدارة `structs` في المصفوفات. تبدو صياغة هذه الحالة الاستخدام كما يلي:
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 ]
}
};
يمكن تعيين هذا التعريف على كود GLSL التالي:
struct Data {
vec3 position;
vec3 direction;
};
uniform Data data[ 2 ];
value -- كائن يحتوي على القيمة لإعداد الزى. يجب أن يكون نوعه واحدًا من أنواع الزى المذكورة أعلاه.
القيمة الحالية للزى.
يعود بنسخة من هذا الزى.
إذا كانت خاصية قيمة الزى هى [page:Object] مع طريقة clone()،
يتم استخدام هذا، وإلا يتم نسخ القيمة عن طريق التعيين. تتشارك قيم المصفوفات بين [page:Uniform]s المنسوخة.
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]