黑夜场景未完成
This commit is contained in:
32
src/main.js
32
src/main.js
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user