1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
<h1>[name]</h1>
<p class="desc">Uniforms 是 [link:https://www.opengl.org/documentation/glsl/ GLSL] 着色器中的全局变量。
</p>
<h3>示例</h3>
<p>
在声明一个 [page:ShaderMaterial] 的 Uniform 变量时,该变量被值或对象声明。
When declaring a uniform of a [page:ShaderMaterial], it is declared by value or by object.
</p>
<code>
uniforms: {
time: { value: 1.0 },
resolution: new THREE.Uniform(new THREE.Vector2())
}
</code>
<h3>Uniform 种类</h3>
<p>
每个 Uniform 必须包括一个 *value* 属性。value 的类型必须和下表中 GLSL 的基本类型相对应。同样,Uniform 的结构体和队列
也是支持的。 GLSL基本类型队列必须要么被显示声明为一个 THREE 对象的队列,要么被声明为一个包含所有对象数据的队列。这就是说,
队列中的 GLSL 基础类型不能再是一个队列。举例,一个有 5 个 *vec2* 元素的队列,必须是一个包含 5 个 [page:Vector2] 的队列数组,
或包含 10 个 *number* 的队列。
</p>
<table>
<caption><a id="uniform-types">Uniform 类型</a></caption>
<thead>
<tr>
<th>GLSL 类型</th>
<th>JavaScript 类型</th>
</tr>
</thead>
<tbody>
<tr>
<td>int</td>
<td>[page:Number]</td>
</tr>
<tr>
<td>float</td>
<td>[page:Number]</td>
</tr>
<tr>
<td>bool</td>
<td>[page:Boolean]</td>
</tr>
<tr>
<td>bool</td>
<td>[page:Number]</td>
</tr>
<tr>
<td>vec2</td>
<td>[page:Vector2 THREE.Vector2]</td>
</tr>
<tr>
<td>vec2</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>vec2</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>vec3</td>
<td>[page:Vector3 THREE.Vector3]</td>
</tr>
<tr>
<td>vec3</td>
<td>[page:Color THREE.Color]</td>
</tr>
<tr>
<td>vec3</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>vec3</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>vec4</td>
<td>[page:Vector4 THREE.Vector4]</td>
</tr>
<tr>
<td>vec4</td>
<td>[page:Quaternion THREE.Quaternion]</td>
</tr>
<tr>
<td>vec4</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>vec4</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>mat2</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>mat2</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>mat3</td>
<td>[page:Matrix3 THREE.Matrix3]</td>
</tr>
<tr>
<td>mat3</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>mat3</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>mat4</td>
<td>[page:Matrix3 THREE.Matrix4]</td>
</tr>
<tr>
<td>mat4</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>mat4</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>ivec2, bvec2</td>
<td>[page:Float32Array Float32Array] (*)</td>
</tr>
<tr>
<td>ivec2, bvec2</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>ivec3, bvec3</td>
<td>[page:Int32Array Int32Array] (*)</td>
</tr>
<tr>
<td>ivec3, bvec3</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>ivec4, bvec4</td>
<td>[page:Int32Array Int32Array] (*)</td>
</tr>
<tr>
<td>ivec4, bvec4</td>
<td>[page:Array Array] (*)</td>
</tr>
<tr>
<td>sampler2D</td>
<td>[page:Texture THREE.Texture]</td>
</tr>
<tr>
<td>samplerCube</td>
<td>[page:CubeTexture THREE.CubeTexture]</td>
</tr>
</tbody>
</table>
<p>
(*) 与最内层队列中 GSLS 的类型保持一致。包含队列中所有矢量的元素或矩阵中的元素。
</p>
<h2>构造函数</h2>
<h3>[name]( [param:Object value] )</h3>
<p>
value -- 包含需要设置 Uniform 数据的对象。 数据类型必须是上述类型中的一种。
</p>
<h2>属性</h2>
<h3>[property:Object value]</h3>
<p>
当前 uniform 的值。
</p>
<h2>方法</h2>
<h3>[method:Uniform clone]()</h3>
<p>
返回该 Uniform 的克隆。<br />
如果 Uniform 的 value 属性是一个带 clone() 方法的 [page:Object],则克隆该对象时,value 的 clone() 方法也会被调用,否则克隆时只会使用赋值语句。
队列中的值会在该 Uniform 和 被克隆对象间共享。<br /><br />
该方法的使用示例详见 [example:webgldeferred_animation WebGL deferred animation]。
</p>
<h2>源代码</h2>
<p>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</p>
</body>
</html>
|