const waterUniforms = water.material.uniforms;的uniforms属性中有哪些参数
时间: 2023-06-12 19:07:24 浏览: 74
`waterUniforms` 是 `water.material.uniforms` 的引用,其中包含 `water` 材质的 uniform 变量的对象。 `water` 材质的 uniform 变量包括:
- `uDirLightPos`:平行光源位置
- `uDirLightColor`:平行光源颜色
- `uWaterColor`:水颜色
- `uSunColor`:太阳颜色
- `uWaterLevel`:水面高度
- `uTime`:时间
- `uNormalSampler`:法线贴图采样器
- `uDisplacementSampler`:位移贴图采样器
- `uPerlinSampler`:Perlin 噪声采样器
- `uColorSampler`:颜色贴图采样器
- `uFlowDirection`:水流方向
- `uSmallWavesSpeed`:小波速度
- `uSmallWavesFrequency`:小波频率
- `uSmallWavesIterations`:小波迭代次数
- `uBigWavesSpeed`:大波速度
- `uBigWavesFrequency`:大波频率
- `uBigWavesIterations`:大波迭代次数
- `uAmbientColor`:环境光颜色
- `uFogColor`:雾颜色
- `uFogNear`:雾近端距离
- `uFogFar`:雾远端距离
这些 uniform 变量用于控制水体的外观和行为。
相关问题
const waterUniforms = water.material.uniforms;的用法
这行代码是在获取 `water` 对象的材质中的 `uniforms` 属性,并将其存储在变量 `waterUniforms` 中。`uniforms` 是 three.js 中的一个属性,表示材质所需的一些参数,例如纹理、颜色等等。通过设置 `uniforms`,可以改变材质的外观和行为。
在这个例子中, `water` 是一个 three.js 的 `Mesh` 对象,它的材质包含 `uniforms` 属性。`water.material` 是 `Mesh` 对象的材质属性,通过 `.uniforms` 访问其中的参数。
一旦我们将 `uniforms` 存储在变量中,就可以在代码的其他部分中使用它们,例如更新 `uniforms` 的值以改变材质的效果。
const processSaleOutBoundDetailArr = async (saleOutBoundArr, tokenData, accountData) => { let saleOutBoundDetailArr = [] if (saleOutBoundArr?.length > 0) { for (const item of saleOutBoundArr) { const saleOutBoundDetailRes = await getSaleOutBoundDetail( { id: item.id }, { "app-token": tokenData['app-token'], "X-GW-Router-Addr": accountData?.domain } ); if (saleOutBoundDetailRes.data.errcode === 0) { item.detailList = await processMaterial(item.id, saleOutBoundDetailRes.data.data.material_entity, tokenData, accountData) } saleOutBoundDetailArr.push(item) } } return saleOutBoundDetailArr } const processMaterial = async (orderId, materials, tokenData, accountData) => { let materialArr = [] if (materials && materials.length) { const materialIds = [...new Set(materials.map(item => item.material_id))]; const materialPromises = materialIds.map(id => { return getMaterialDetail({ id }, { "app-token": tokenData['app-token'], "X-GW-Router-Addr": accountData?.domain }); }); const materialDetails = await Promise.all(materialPromises); materialArr = materials.map(material => { const materialDetail = materialDetails.find(detail => detail.data.errcode === 0 && detail.data.data.id === material.material_id); if (materialDetail) { const meterailData = materialDetail.data.data; material.model = meterailData.model material.fetch_category_id = meterailData.fetch_category_id material.tax_rate = meterailData.tax_rate material.orderId = meterailData.orderId } return material; }); } return materialArr; }; 优化这段代码
这段代码可以优化的地方有:
1. 使用`for...of`循环代替`for`循环,可以使代码更加简洁易读。
2. 使用`Promise.allSettled`代替`Promise.all`,可以避免其中一个Promise被reject而导致整个Promise.all被reject的情况。
3. 将多次调用的相同参数的请求合并为一个请求,可以减少网络请求的次数,提高性能。
4. 使用可选链(?.)和空值合并运算符(??)可以更好地处理可能为空的变量,避免出现错误。
优化后的代码如下:
```javascript
const processSaleOutBoundDetailArr = async (saleOutBoundArr, tokenData, accountData) => {
const saleOutBoundDetailArr = [];
if (saleOutBoundArr?.length > 0) {
for (const item of saleOutBoundArr) {
const saleOutBoundDetailRes = await getSaleOutBoundDetail(
{ id: item.id },
{ "app-token": tokenData['app-token'], "X-GW-Router-Addr": accountData?.domain }
);
if (saleOutBoundDetailRes?.data?.errcode === 0) {
item.detailList = await processMaterial(item.id, saleOutBoundDetailRes.data.data.material_entity, tokenData, accountData);
}
saleOutBoundDetailArr.push(item);
}
}
return saleOutBoundDetailArr;
};
const processMaterial = async (orderId, materials, tokenData, accountData) => {
if (!materials?.length) {
return [];
}
const materialIds = [...new Set(materials.map(item => item.material_id))];
const materialPromises = materialIds.map(id => {
return getMaterialDetail({ id }, { "app-token": tokenData['app-token'], "X-GW-Router-Addr": accountData?.domain });
});
const materialDetails = await Promise.allSettled(materialPromises);
const materialArr = materials.map(material => {
const materialDetail = materialDetails.find(detail => detail.status === "fulfilled" && detail.value?.data?.errcode === 0 && detail.value?.data?.data?.id === material.material_id)?.value;
if (materialDetail) {
const meterailData = materialDetail.data.data;
material.model = meterailData.model;
material.fetch_category_id = meterailData.fetch_category_id;
material.tax_rate = meterailData.tax_rate;
material.orderId = meterailData.orderId;
}
return material;
});
return materialArr;
};
```