预设天气

This commit is contained in:
2026-03-26 16:44:33 +08:00
parent 77664bce52
commit 6b44ebf599
3 changed files with 47 additions and 22 deletions

View File

@@ -877,13 +877,14 @@ export class OceanScene {
waterNormals: waterNormals, waterNormals: waterNormals,
sunDirection: new THREE.Vector3(), sunDirection: new THREE.Vector3(),
sunColor: 0xffffff, sunColor: 0xffffff,
waterColor: 0x001e0f, waterColor: this.params.waterColor,
distortionScale: 3.7, distortionScale: 3.7,
fog: true fog: true
}); });
this.water.rotation.x = -Math.PI / 2; this.water.rotation.x = -Math.PI / 2;
this.water.position.y = -0.15; this.water.position.y = -0.15;
this.setWaterColor(this.params.waterColor);
this.scene.add(this.water); this.scene.add(this.water);
} }
@@ -1101,6 +1102,13 @@ export class OceanScene {
} }
} }
setWaterColor(value) {
this.params.waterColor = value;
if (this.water?.material?.uniforms?.waterColor?.value) {
this.water.material.uniforms.waterColor.value.set(value);
}
}
setCloudCoverage(value) { setCloudCoverage(value) {
this.params.cloudCoverage = value; this.params.cloudCoverage = value;
this.updateClouds(); this.updateClouds();
@@ -1303,6 +1311,7 @@ export class OceanScene {
this.setRayleigh(mergedParams.rayleigh); this.setRayleigh(mergedParams.rayleigh);
this.setBloomStrength(mergedParams.bloomStrength); this.setBloomStrength(mergedParams.bloomStrength);
this.setBloomRadius(mergedParams.bloomRadius); this.setBloomRadius(mergedParams.bloomRadius);
this.setWaterColor(mergedParams.waterColor);
this.setCloudCoverage(mergedParams.cloudCoverage); this.setCloudCoverage(mergedParams.cloudCoverage);
this.setCloudDensity(mergedParams.cloudDensity); this.setCloudDensity(mergedParams.cloudDensity);
this.setCloudElevation(mergedParams.cloudElevation); this.setCloudElevation(mergedParams.cloudElevation);

View File

@@ -51,6 +51,7 @@ function setupControls(oceanScene) {
'rayleigh', 'rayleigh',
'bloomStrength', 'bloomStrength',
'bloomRadius', 'bloomRadius',
'waterColor',
'cloudCoverage', 'cloudCoverage',
'cloudDensity', 'cloudDensity',
'cloudElevation', 'cloudElevation',
@@ -78,6 +79,7 @@ function setupControls(oceanScene) {
rayleigh: '瑞利散射强度', rayleigh: '瑞利散射强度',
bloomStrength: '泛光强度', bloomStrength: '泛光强度',
bloomRadius: '泛光扩散范围', bloomRadius: '泛光扩散范围',
waterColor: '海水颜色',
cloudCoverage: '云层覆盖度', cloudCoverage: '云层覆盖度',
cloudDensity: '云层密度', cloudDensity: '云层密度',
cloudElevation: '云层高度', cloudElevation: '云层高度',
@@ -162,6 +164,9 @@ function setupControls(oceanScene) {
bindController(bloomFolder.add(params, 'bloomStrength', 0, 1, 0.01).name('强度'), (value) => oceanScene.setBloomStrength(value)); bindController(bloomFolder.add(params, 'bloomStrength', 0, 1, 0.01).name('强度'), (value) => oceanScene.setBloomStrength(value));
bindController(bloomFolder.add(params, 'bloomRadius', 0, 3, 0.01).name('扩散'), (value) => oceanScene.setBloomRadius(value)); bindController(bloomFolder.add(params, 'bloomRadius', 0, 3, 0.01).name('扩散'), (value) => oceanScene.setBloomRadius(value));
const waterFolder = gui.addFolder('海水');
bindController(waterFolder.addColor(params, 'waterColor').name('颜色'), (value) => oceanScene.setWaterColor(value));
const cloudFolder = gui.addFolder('云层'); const cloudFolder = gui.addFolder('云层');
bindController(cloudFolder.add(params, 'cloudCoverage', 0, 1, 0.01).name('覆盖度'), (value) => oceanScene.setCloudCoverage(value)); bindController(cloudFolder.add(params, 'cloudCoverage', 0, 1, 0.01).name('覆盖度'), (value) => oceanScene.setCloudCoverage(value));
bindController(cloudFolder.add(params, 'cloudDensity', 0, 1, 0.01).name('密度'), (value) => oceanScene.setCloudDensity(value)); bindController(cloudFolder.add(params, 'cloudDensity', 0, 1, 0.01).name('密度'), (value) => oceanScene.setCloudDensity(value));

View File

@@ -7,7 +7,8 @@ export const DEFAULT_SCENE_PARAMS = {
bloomStrength: 0.1, bloomStrength: 0.1,
bloomRadius: 0, bloomRadius: 0,
bloomThreshold: 0, bloomThreshold: 0,
cloudCoverage: 0.4, waterColor: '#001e0f',
cloudCoverage: 0.1,
cloudDensity: 0.5, cloudDensity: 0.5,
cloudElevation: 0.5, cloudElevation: 0.5,
fogDensity: 0.42, fogDensity: 0.42,
@@ -47,6 +48,7 @@ export const WEATHER_PRESETS = {
"rayleigh": 3.21, "rayleigh": 3.21,
"bloomStrength": 0.24, "bloomStrength": 0.24,
"bloomRadius": 0.42, "bloomRadius": 0.42,
"waterColor": "#0b3f36",
"cloudCoverage": 0.4, "cloudCoverage": 0.4,
"cloudDensity": 0.18, "cloudDensity": 0.18,
"cloudElevation": 0.98, "cloudElevation": 0.98,
@@ -75,6 +77,7 @@ export const WEATHER_PRESETS = {
exposure: 0.08, exposure: 0.08,
bloomStrength: 0.16, bloomStrength: 0.16,
bloomRadius: 0.24, bloomRadius: 0.24,
waterColor: '#0a2a24',
cloudCoverage: 0.78, cloudCoverage: 0.78,
cloudDensity: 0.82, cloudDensity: 0.82,
cloudElevation: 0.42, cloudElevation: 0.42,
@@ -94,28 +97,35 @@ export const WEATHER_PRESETS = {
} }
}, },
storm: { storm: {
label: '暴雨雷暴', label: '正午',
params: { params: {
...DEFAULT_SCENE_PARAMS, ...DEFAULT_SCENE_PARAMS,
exposure: 0.065, "elevation": 90,
bloomStrength: 0.22, "azimuth": 180,
bloomRadius: 0.35, "exposure": 0.24,
cloudCoverage: 0.92, "turbidity": 18.6,
cloudDensity: 0.94, "rayleigh": 4,
cloudElevation: 0.36, "bloomStrength": 0.18,
fogDensity: 0.7, "bloomRadius": 0,
fogHeight: 0.42, "waterColor": "#3378a3",
fogRange: 0.82, "cloudCoverage": 0.4,
rainEnabled: true, "cloudDensity": 0.5,
rainScreenIntensity: 0.72, "cloudElevation": 0.5,
rainVeilIntensity: 1.35, "fogDensity": 0.41,
rainDropSize: 1.14, "fogHeight": 0.4,
rainSpeed: 1.34, "fogRange": 0.31,
rainAudioEnabled: true, "rainEnabled": false,
rainAudioVolume: 0.42, "rainScreenIntensity": 0.41,
lightningEnabled: true, "rainVeilIntensity": 1.15,
lightningIntensity: 1.0, "rainDropSize": 1,
snowEnabled: false "rainSpeed": 1,
"rainAudioEnabled": true,
"rainAudioVolume": 0.35,
"snowEnabled": false,
"snowIntensity": 0.65,
"snowSpeed": 0.85,
"lightningEnabled": true,
"lightningIntensity": 0.75
} }
}, },
snow: { snow: {
@@ -124,6 +134,7 @@ export const WEATHER_PRESETS = {
...DEFAULT_SCENE_PARAMS, ...DEFAULT_SCENE_PARAMS,
exposure: 0.11, exposure: 0.11,
bloomStrength: 0.08, bloomStrength: 0.08,
waterColor: '#17343e',
cloudCoverage: 0.72, cloudCoverage: 0.72,
cloudDensity: 0.7, cloudDensity: 0.7,
fogDensity: 0.52, fogDensity: 0.52,