|
35 | 35 | enableSSR: true,
|
36 | 36 | autoRotate: true,
|
37 | 37 | isOtherMeshes: true,
|
38 |
| - isReflector: false, |
| 38 | + isGroundReflector: true, |
39 | 39 | }
|
40 | 40 | let composer
|
41 | 41 | let ssrPass
|
|
46 | 46 | let controls;
|
47 | 47 | let camera, scene, renderer;
|
48 | 48 | let otherMeshes = []
|
49 |
| - let reflector |
50 |
| - let reflectorRenderTarget |
| 49 | + let groundReflector |
51 | 50 | let selects=[]
|
52 | 51 |
|
53 | 52 | const container = document.querySelector('#container');
|
|
135 | 134 | }
|
136 | 135 | {
|
137 | 136 | const geometry = new THREE.PlaneBufferGeometry(8, 8);
|
138 |
| - reflector = new Reflector(geometry, { |
| 137 | + groundReflector = new Reflector(geometry, { |
139 | 138 | clipBias: 0.003,
|
140 | 139 | textureWidth: window.innerWidth,
|
141 | 140 | textureHeight: window.innerHeight,
|
142 | 141 | color: 0x888888,
|
143 | 142 | useDepthTexture: true,
|
144 | 143 | });
|
145 |
| - reflectorRenderTarget = reflector.getRenderTarget() |
146 |
| - reflector.position.y = plane.position.y + .0001; |
147 |
| - reflector.rotation.x = -Math.PI / 2 |
148 |
| - reflector.visible = params.isReflector |
149 |
| - scene.add(reflector); |
| 144 | + groundReflector.position.y = plane.position.y + .0001; |
| 145 | + groundReflector.rotation.x = -Math.PI / 2 |
| 146 | + groundReflector.visible = params.isGroundReflector |
| 147 | + scene.add(groundReflector); |
150 | 148 | }
|
151 | 149 |
|
152 | 150 | // renderer
|
|
182 | 180 | height: innerHeight,
|
183 | 181 | encoding: THREE.sRGBEncoding,
|
184 | 182 | isPerspectiveCamera: isPerspectiveCamera,
|
185 |
| - selects: params.isReflector ? selects : null, |
| 183 | + selects: params.isGroundReflector ? selects : null, |
186 | 184 | // morphTargets: true,
|
187 | 185 | });
|
188 | 186 | // window.ssrPass = ssrPass
|
|
198 | 196 | gui.add(ssrPass, 'isDistanceAttenuation');
|
199 | 197 | ssrPass.maxDistance = .1
|
200 | 198 | gui.add(ssrPass, 'maxDistance').min(0).max(1).step(.01);
|
201 |
| - gui.add(params, 'isReflector').onChange(() => { |
202 |
| - if (params.isReflector) { |
203 |
| - reflector.visible = true |
| 199 | + gui.add(params, 'isGroundReflector').onChange(() => { |
| 200 | + if (params.isGroundReflector) { |
| 201 | + groundReflector.visible = true |
204 | 202 | ssrPass.selects = selects
|
205 | 203 | } else {
|
206 |
| - reflector.visible = false |
| 204 | + groundReflector.visible = false |
207 | 205 | ssrPass.selects = null
|
208 | 206 | }
|
209 | 207 | })
|
|
251 | 249 |
|
252 | 250 | renderer.setSize(window.innerWidth, window.innerHeight);
|
253 | 251 | composer.setSize(window.innerWidth, window.innerHeight);
|
254 |
| - reflectorRenderTarget.setSize(window.innerWidth, window.innerHeight); |
| 252 | + groundReflector.getRenderTarget().setSize(window.innerWidth, window.innerHeight); |
255 | 253 |
|
256 | 254 | }
|
257 | 255 |
|
|
279 | 277 | }
|
280 | 278 |
|
281 | 279 | if (params.enableSSR) {
|
| 280 | + groundReflector.needsUpdate = true; // Just SSRPass's beautyRenderTarget (which rendered fisrt internally) need Reflector. |
282 | 281 | composer.render();
|
283 | 282 | } else {
|
| 283 | + groundReflector.needsUpdate = true; |
284 | 284 | renderer.render(scene, camera)
|
285 | 285 | }
|
286 | 286 |
|
|
0 commit comments