黑夜场景未完成

This commit is contained in:
2026-03-26 19:14:24 +08:00
parent 562d031171
commit 36965a7dc3
4 changed files with 373 additions and 10 deletions

View File

@@ -68,6 +68,8 @@ function setupControls(oceanScene) {
'snowEnabled',
'snowIntensity',
'snowSpeed',
'starEnabled',
'starIntensity',
'lightningEnabled',
'lightningIntensity'
];
@@ -96,6 +98,8 @@ function setupControls(oceanScene) {
snowEnabled: '是否启用降雪',
snowIntensity: '雪量',
snowSpeed: '降雪速度',
starEnabled: '是否启用星空',
starIntensity: '星空强度',
lightningEnabled: '是否启用雷闪',
lightningIntensity: '雷闪强度'
};
@@ -135,12 +139,25 @@ function setupControls(oceanScene) {
};
const refreshControllers = () => {
controllers.forEach((controller) => controller.updateDisplay());
updateStarControllerState();
};
const setControllerEnabled = (controller, enabled) => {
controller.domElement.style.opacity = enabled ? '1' : '0.45';
controller.domElement.style.pointerEvents = enabled ? 'auto' : 'none';
controller.enable?.();
if (!enabled) {
controller.disable?.();
}
controller.domElement.querySelectorAll('input, select, button').forEach((element) => {
element.disabled = !enabled;
});
};
const bindController = (controller, applyValue) => {
controllers.push(controller);
controller.onChange((value) => {
applyValue(value);
markPresetCustom();
updateStarControllerState();
});
return controller;
};
@@ -154,11 +171,23 @@ function setupControls(oceanScene) {
gui.add(exportActions, '导出预设');
const skyFolder = gui.addFolder('天空');
bindController(skyFolder.add(params, 'elevation', 0, 90, 0.1).name('太阳高度'), (value) => oceanScene.setSunElevation(value));
bindController(skyFolder.add(params, 'elevation', -12, 90, 0.1).name('太阳高度'), (value) => oceanScene.setSunElevation(value));
bindController(skyFolder.add(params, 'azimuth', -180, 180, 0.1).name('太阳方位'), (value) => oceanScene.setSunAzimuth(value));
bindController(skyFolder.add(params, 'exposure', 0, 1, 0.01).name('曝光度'), (value) => oceanScene.setExposure(value));
bindController(skyFolder.add(params, 'turbidity', 1, 20, 0.1).name('浑浊度'), (value) => oceanScene.setTurbidity(value));
bindController(skyFolder.add(params, 'rayleigh', 0, 4, 0.01).name('瑞利散射'), (value) => oceanScene.setRayleigh(value));
const starEnabledController = bindController(skyFolder.add(params, 'starEnabled').name('启用星空'), (value) => oceanScene.setStarEnabled(value));
const starIntensityController = bindController(skyFolder.add(params, 'starIntensity', 0, 1.5, 0.01).name('星空强度'), (value) => oceanScene.setStarIntensity(value));
const updateStarControllerState = () => {
const canUseStars = params.elevation < -1.0;
if (!canUseStars && params.starEnabled) {
oceanScene.setStarEnabled(false);
}
setControllerEnabled(starEnabledController, canUseStars);
setControllerEnabled(starIntensityController, canUseStars);
starEnabledController.updateDisplay();
starIntensityController.updateDisplay();
};
const bloomFolder = gui.addFolder('泛光');
bindController(bloomFolder.add(params, 'bloomStrength', 0, 1, 0.01).name('强度'), (value) => oceanScene.setBloomStrength(value));
@@ -194,6 +223,7 @@ function setupControls(oceanScene) {
bindController(snowFolder.add(params, 'snowSpeed', 0.2, 2.2, 0.01).name('速度'), (value) => oceanScene.setSnowSpeed(value));
gui.close();
updateStarControllerState();
}
main().catch(console.error);