Skip to content

Commit 1822cb5

Browse files
leyileyi
authored andcommitted
update
1 parent f0c0b71 commit 1822cb5

1 file changed

Lines changed: 80 additions & 5 deletions

File tree

demogorgon.html

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,37 @@
4343
margin-top: 10px;
4444
display: inline-block;
4545
}
46+
47+
#settings-panel {
48+
position: absolute;
49+
right: 20px;
50+
top: 20px;
51+
background: rgba(0, 0, 0, 0.8);
52+
border: 1px solid #ff0000;
53+
padding: 15px;
54+
color: #ff0000;
55+
font-family: 'Courier New', monospace;
56+
z-index: 100;
57+
pointer-events: auto;
58+
width: 220px;
59+
font-size: 12px;
60+
box-shadow: 0 0 15px rgba(255, 0, 0, 0.2);
61+
}
62+
63+
.control-group {
64+
margin-bottom: 15px;
65+
}
66+
67+
.control-group label {
68+
display: block;
69+
margin-bottom: 5px;
70+
}
71+
72+
.control-group input {
73+
width: 100%;
74+
cursor: pointer;
75+
accent-color: #ff0000;
76+
}
4677
</style>
4778
</head>
4879

@@ -52,6 +83,28 @@ <h1>WARNING: GATE OPEN</h1>
5283
<p>LOCATION: HAWKINS NATIONAL LABORATORY</p>
5384
<a href="index.html">RUN BACK HOME</a>
5485
</div>
86+
87+
<div id="settings-panel">
88+
<div style="border-bottom: 1px solid #ff0000; margin-bottom: 10px; padding-bottom: 5px; font-weight: bold;">RENDER
89+
CONSOLE</div>
90+
<div class="control-group">
91+
<label>EXPOSURE (曝光度)</label>
92+
<input type="range" id="exposure-slider" min="0" max="5" step="0.1" value="1.5">
93+
</div>
94+
<div class="control-group">
95+
<label>AMBIENT (环境光)</label>
96+
<input type="range" id="ambient-slider" min="0" max="5" step="0.1" value="1.2">
97+
</div>
98+
<div class="control-group">
99+
<label>MAIN LIGHT (主灯)</label>
100+
<input type="range" id="main-light-slider" min="0" max="10" step="0.1" value="2.0">
101+
</div>
102+
<div class="control-group">
103+
<label>FLICKER BASE (闪烁基准)</label>
104+
<input type="range" id="flicker-slider" min="0" max="500" step="10" value="50">
105+
</div>
106+
</div>
107+
55108
<div id="loading" class="loading">Locating Demogorgon...</div>
56109

57110
<script type="importmap">
@@ -68,8 +121,8 @@ <h1>WARNING: GATE OPEN</h1>
68121
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
69122
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
70123

71-
let scene, camera, renderer, controls, model;
72-
let flashLight;
124+
let scene, camera, renderer, controls, model, ambientLight, mainLight, flashLight;
125+
let flickerBase = 50;
73126

74127
function init() {
75128
scene = new THREE.Scene();
@@ -83,16 +136,24 @@ <h1>WARNING: GATE OPEN</h1>
83136
renderer.setSize(window.innerWidth, window.innerHeight);
84137
renderer.setPixelRatio(window.devicePixelRatio);
85138
renderer.shadowMap.enabled = true;
139+
// 开启色调映射,让模型亮度更自然
140+
renderer.toneMapping = THREE.ACESFilmicToneMapping;
141+
renderer.toneMappingExposure = 1.5;
86142
document.body.appendChild(renderer.domElement);
87143

88144
controls = new OrbitControls(camera, renderer.domElement);
89145
controls.enableDamping = true;
90146

91147
// 灯光设置
92-
const ambientLight = new THREE.AmbientLight(0x404040, 0.5); // 极弱的环境光
148+
ambientLight = new THREE.AmbientLight(0xffffff, 1.2);
93149
scene.add(ambientLight);
94150

95-
flashLight = new THREE.PointLight(0xff0000, 100, 10);
151+
// 增加一个强力的主方向光,从斜上方照亮模型
152+
mainLight = new THREE.DirectionalLight(0xffffff, 2.0);
153+
mainLight.position.set(5, 10, 7.5);
154+
scene.add(mainLight);
155+
156+
flashLight = new THREE.PointLight(0xff0000, 150, 15);
96157
flashLight.position.set(2, 3, 2);
97158
flashLight.castShadow = true;
98159
scene.add(flashLight);
@@ -134,6 +195,20 @@ <h1>WARNING: GATE OPEN</h1>
134195
// 添加 Upside Down 的灰烬粒子
135196
createParticles();
136197

198+
// 绑定控制台事件
199+
document.getElementById('exposure-slider').addEventListener('input', (e) => {
200+
renderer.toneMappingExposure = parseFloat(e.target.value);
201+
});
202+
document.getElementById('ambient-slider').addEventListener('input', (e) => {
203+
ambientLight.intensity = parseFloat(e.target.value);
204+
});
205+
document.getElementById('main-light-slider').addEventListener('input', (e) => {
206+
mainLight.intensity = parseFloat(e.target.value);
207+
});
208+
document.getElementById('flicker-slider').addEventListener('input', (e) => {
209+
flickerBase = parseFloat(e.target.value);
210+
});
211+
137212
window.addEventListener('resize', onWindowResize);
138213
animate();
139214
}
@@ -163,7 +238,7 @@ <h1>WARNING: GATE OPEN</h1>
163238
if (Math.random() > 0.9) {
164239
flashLight.intensity = Math.random() * 150;
165240
} else {
166-
flashLight.intensity = 50;
241+
flashLight.intensity = flickerBase;
167242
}
168243

169244
if (model) model.rotation.y += 0.005;

0 commit comments

Comments
 (0)