This commit is contained in:
2026-03-26 16:13:49 +08:00
parent e7d4267f60
commit 77664bce52
3 changed files with 226 additions and 55 deletions

View File

@@ -9,6 +9,7 @@ import { ShaderPass } from 'three/addons/postprocessing/ShaderPass.js';
import Stats from 'three/addons/libs/stats.module.js';
import { TerrainGenerator } from './TerrainGenerator.js';
import { VegetationSystem } from './VegetationSystem.js';
import { DEFAULT_SCENE_PARAMS } from './weatherPresets.js';
const RAIN_AUDIO_URL = '/audio/rain-calming.mp3';
const THUNDER_AUDIO_URL = '/audio/thunder-distant.mp3';
@@ -53,36 +54,7 @@ export class OceanScene {
this.thunderAudioIndex = 0;
this.scheduledThunder = [];
this.params = {
elevation: 2,
azimuth: 180,
exposure: 0.1,
turbidity: 10,
rayleigh: 2,
bloomStrength: 0.1,
bloomRadius: 0,
bloomThreshold: 0,
cloudCoverage: 0.4,
cloudDensity: 0.5,
cloudElevation: 0.5,
fogDensity: 0.42,
fogHeight: 0.32,
fogRange: 0.55,
rainEnabled: false,
rainScreenIntensity: 0.41,
rainVeilIntensity: 1.15,
rainDropSize: 1.0,
rainSpeed: 1.0,
rainAudioEnabled: true,
rainAudioVolume: 0.35,
snowEnabled: false,
snowIntensity: 0.65,
snowSpeed: 0.85,
lightningEnabled: true,
lightningIntensity: 0.75,
mieCoefficient: 0.005,
mieDirectionalG: 0.8
};
this.params = { ...DEFAULT_SCENE_PARAMS };
this.clock = new THREE.Clock();
this.lightningFlash = 0;
@@ -1321,6 +1293,36 @@ export class OceanScene {
this.params.lightningIntensity = value;
}
applyParams(nextParams = {}) {
const mergedParams = { ...DEFAULT_SCENE_PARAMS, ...nextParams };
this.setSunElevation(mergedParams.elevation);
this.setSunAzimuth(mergedParams.azimuth);
this.setExposure(mergedParams.exposure);
this.setTurbidity(mergedParams.turbidity);
this.setRayleigh(mergedParams.rayleigh);
this.setBloomStrength(mergedParams.bloomStrength);
this.setBloomRadius(mergedParams.bloomRadius);
this.setCloudCoverage(mergedParams.cloudCoverage);
this.setCloudDensity(mergedParams.cloudDensity);
this.setCloudElevation(mergedParams.cloudElevation);
this.setFogDensity(mergedParams.fogDensity);
this.setFogHeight(mergedParams.fogHeight);
this.setFogRange(mergedParams.fogRange);
this.setRainScreenIntensity(mergedParams.rainScreenIntensity);
this.setRainVeilIntensity(mergedParams.rainVeilIntensity);
this.setRainDropSize(mergedParams.rainDropSize);
this.setRainSpeed(mergedParams.rainSpeed);
this.setRainAudioVolume(mergedParams.rainAudioVolume);
this.setRainAudioEnabled(mergedParams.rainAudioEnabled);
this.setSnowIntensity(mergedParams.snowIntensity);
this.setSnowSpeed(mergedParams.snowSpeed);
this.setSnowEnabled(mergedParams.snowEnabled);
this.setLightningIntensity(mergedParams.lightningIntensity);
this.setLightningEnabled(mergedParams.lightningEnabled);
this.setRainEnabled(mergedParams.rainEnabled);
}
scheduleNextLightning(time) {
const rainActivity = Math.max(this.params.rainVeilIntensity, this.params.rainScreenIntensity);
const densityBias = THREE.MathUtils.clamp(rainActivity / 1.5, 0, 1);