defined
defined
一个 JavaScript 工具函数,用于在初始化时从原始值(如 0.5)或封装对象(如 Uniform)中安全地提取其核心值,以简化 API 设计。
核心优势
核心优势在于提升了 JavaScript 端 API 的灵活性,允许同一个属性或函数参数既能接收静态的原始值,也能接收动态的封装对象(如 Uniform),从而简化了从静态到动态值的开发过渡。
常见用途
在设置节点属性时,统一处理静态值和 Uniform 输入
在设计可配置组件(如 React 组件)时,使其 props 能同时接受数值和 Uniform 对象
编写通用辅助函数时,预处理参数以支持多种输入形态
如何调整
该函数本身无视觉效果,但其使用方式决定了 TSL 属性的性质。传入原始值(如 `0.8`)会创建一个静态节点。根据所提供的实现,传入一个 Uniform 对象也只会提取其初始值来创建一个静态节点,从而切断与 Uniform 的动态链接。因此,后续在 JS 中修改 Uniform 的值不会产生任何视觉变化。
代码示例
1// 假设一个材质的 setter 内部使用了 defined()
2const roughnessUniform = new THREE.Uniform( 0.1 );
3
4// 赋值时,defined() 会提取出 0.1 这个快照值
5myMaterial.roughness = roughnessUniform;
6
7// 后续修改 Uniform 不会影响材质,因为动态链接已断开
8roughnessUniform.value = 1.0; // 无视觉变化