|
33 | 33 |
|
34 | 34 | import * as THREE from 'three'; |
35 | 35 |
|
| 36 | + import { GUI } from 'three/addons/libs/lil-gui.module.min.js'; |
| 37 | + |
36 | 38 | import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; |
37 | 39 | import { Reflector } from 'three/addons/objects/Reflector.js'; |
38 | 40 |
|
|
44 | 46 |
|
45 | 47 | let groundMirror, verticalMirror; |
46 | 48 |
|
| 49 | + let resolutionScale = 1; // render target scale factor in [ 0, 1 ] |
| 50 | + |
| 51 | + const size = new THREE.Vector2(); |
| 52 | + |
47 | 53 | init(); |
48 | 54 |
|
49 | 55 | function init() { |
|
78 | 84 |
|
79 | 85 | let geometry, material; |
80 | 86 |
|
| 87 | + renderer.getDrawingBufferSize( size ); |
| 88 | + size.multiplyScalar( resolutionScale ).round(); |
| 89 | + |
81 | 90 | geometry = new THREE.CircleGeometry( 40, 64 ); |
82 | 91 | groundMirror = new Reflector( geometry, { |
83 | 92 | clipBias: 0.003, |
84 | | - textureWidth: window.innerWidth * window.devicePixelRatio, |
85 | | - textureHeight: window.innerHeight * window.devicePixelRatio, |
| 93 | + textureWidth: size.width, |
| 94 | + textureHeight: size.heignt, |
86 | 95 | color: 0xb5b5b5 |
87 | 96 | } ); |
88 | 97 | groundMirror.position.y = 0.5; |
|
92 | 101 | geometry = new THREE.PlaneGeometry( 100, 100 ); |
93 | 102 | verticalMirror = new Reflector( geometry, { |
94 | 103 | clipBias: 0.003, |
95 | | - textureWidth: window.innerWidth * window.devicePixelRatio, |
96 | | - textureHeight: window.innerHeight * window.devicePixelRatio, |
| 104 | + textureWidth: size.width, |
| 105 | + textureHeight: size.heignt, |
97 | 106 | color: 0xc1cbcb |
98 | 107 | } ); |
99 | 108 | verticalMirror.position.y = 50; |
|
169 | 178 | blueLight.position.set( 0, 50, 550 ); |
170 | 179 | scene.add( blueLight ); |
171 | 180 |
|
| 181 | + // GUI |
| 182 | + |
| 183 | + const params = { |
| 184 | + resolution: resolutionScale, |
| 185 | + }; |
| 186 | + |
| 187 | + const gui = new GUI(); |
| 188 | + |
| 189 | + const folder = gui.addFolder( 'Mirrors' ); |
| 190 | + |
| 191 | + folder.add( params, 'resolution', 0.2, 1, 0.1 ) |
| 192 | + .onChange( function ( val ) { |
| 193 | + |
| 194 | + resolutionScale = val; |
| 195 | + onWindowResize(); |
| 196 | + |
| 197 | + } ); |
| 198 | + |
| 199 | + folder.open(); |
| 200 | + |
172 | 201 | window.addEventListener( 'resize', onWindowResize ); |
173 | 202 |
|
174 | 203 | } |
|
180 | 209 |
|
181 | 210 | renderer.setSize( window.innerWidth, window.innerHeight ); |
182 | 211 |
|
183 | | - groundMirror.getRenderTarget().setSize( |
184 | | - window.innerWidth * window.devicePixelRatio, |
185 | | - window.innerHeight * window.devicePixelRatio |
186 | | - ); |
187 | | - verticalMirror.getRenderTarget().setSize( |
188 | | - window.innerWidth * window.devicePixelRatio, |
189 | | - window.innerHeight * window.devicePixelRatio |
190 | | - ); |
| 212 | + renderer.getDrawingBufferSize( size ); |
| 213 | + size.multiplyScalar( resolutionScale ).round(); |
| 214 | + |
| 215 | + groundMirror.getRenderTarget().setSize( size.width, size.height ); |
| 216 | + verticalMirror.getRenderTarget().setSize( size.width, size.height ); |
191 | 217 |
|
192 | 218 | } |
193 | 219 |
|
|
0 commit comments