|
52 | 52 |
|
53 | 53 | if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
|
54 | 54 |
|
| 55 | + var params = { opacity: 0.25 }; |
| 56 | + |
55 | 57 | var container, stats;
|
56 |
| - var params = { |
57 |
| - roughness: 1.0, |
58 |
| - opacity: 0.5 |
59 |
| - }; |
60 |
| - var camera, scene, renderer, controls, objects = []; |
61 |
| - var composer; |
62 |
| - var standardMaterial, standardMaterialPremultiplied; |
| 58 | + var camera, scene, renderer, controls; |
63 | 59 |
|
64 | 60 | init();
|
65 | 61 | animate();
|
|
74 | 70 |
|
75 | 71 | scene = new THREE.Scene();
|
76 | 72 |
|
77 |
| - renderer = new THREE.WebGLRenderer( { antialias: false } ); |
| 73 | + renderer = new THREE.WebGLRenderer(); |
| 74 | + |
| 75 | + // |
| 76 | + |
| 77 | + var geometry = new THREE.SphereGeometry( 18, 30, 30 ); |
78 | 78 |
|
79 |
| - standardMaterial = new THREE.MeshStandardMaterial( { |
80 |
| - map: null, |
81 |
| - metalness: 0.9, |
82 |
| - roughness: 1.0, |
83 |
| - shading: THREE.SmoothShading, |
84 |
| - blending: THREE.NormalBlending, |
| 79 | + var material1 = new THREE.MeshStandardMaterial( { |
| 80 | + roughness: params.roughness, |
| 81 | + opacity: params.opacity, |
85 | 82 | transparent: true
|
86 | 83 | } );
|
87 |
| - var geometry = new THREE.SphereGeometry( 18, 30, 30 ); |
88 |
| - var torusMesh1 = new THREE.Mesh( geometry, standardMaterial ); |
89 |
| - torusMesh1.position.x = - 20.0; |
90 |
| - torusMesh1.castShadow = true; |
91 |
| - scene.add( torusMesh1 ); |
92 |
| - objects.push( torusMesh1 ); |
93 |
| - |
94 |
| - standardMaterialPremultiplied = new THREE.MeshStandardMaterial( { |
95 |
| - map: null, |
96 |
| - metalness: 0.9, |
97 |
| - roughness: 1.0, |
98 |
| - shading: THREE.SmoothShading, |
| 84 | + |
| 85 | + var material2 = new THREE.MeshStandardMaterial( { |
| 86 | + roughness: params.roughness, |
| 87 | + opacity: params.opacity, |
99 | 88 | premultipliedAlpha: true,
|
100 | 89 | transparent: true
|
101 | 90 | } );
|
102 | 91 |
|
103 | 92 | var textureLoader = new THREE.TextureLoader();
|
104 |
| - textureLoader.load( "../examples/textures/roughness_map.jpg", function ( map ) { |
105 |
| - |
106 |
| - map.wrapS = THREE.RepeatWrapping; |
107 |
| - map.wrapT = THREE.RepeatWrapping; |
108 |
| - map.anisotropy = 4; |
109 |
| - map.repeat.set( 2, 2 ); |
110 |
| - standardMaterial.map = map; |
111 |
| - standardMaterial.roughnessMap = map; |
112 |
| - standardMaterial.needsUpdate = true; |
113 |
| - standardMaterialPremultiplied.map = map; |
114 |
| - standardMaterialPremultiplied.roughnessMap = map; |
115 |
| - standardMaterialPremultiplied.needsUpdate = true; |
| 93 | + textureLoader.load( "textures/hardwood2_diffuse.jpg", function ( map ) { |
| 94 | + |
| 95 | + map.anisotropy = 8; |
| 96 | + |
| 97 | + material1.map = map; |
| 98 | + material1.needsUpdate = true; |
| 99 | + material2.map = map; |
| 100 | + material2.needsUpdate = true; |
116 | 101 |
|
117 | 102 | } );
|
118 | 103 |
|
119 |
| - var torusMesh2 = new THREE.Mesh( geometry, standardMaterialPremultiplied ); |
120 |
| - torusMesh2.position.x = 20.0; |
121 |
| - torusMesh2.castShadow = true; |
122 |
| - scene.add( torusMesh2 ); |
123 |
| - objects.push( torusMesh2 ); |
| 104 | + var textureLoader = new THREE.TextureLoader(); |
| 105 | + textureLoader.load( "textures/hardwood2_roughness.jpg", function ( map ) { |
| 106 | + |
| 107 | + map.anisotropy = 8; |
| 108 | + |
| 109 | + material1.roughnessMap = map; |
| 110 | + material1.needsUpdate = true; |
| 111 | + material2.roughnessMap = map; |
| 112 | + material2.needsUpdate = true; |
| 113 | + |
| 114 | + } ); |
| 115 | + |
| 116 | + var mesh = new THREE.Mesh( geometry, material1 ); |
| 117 | + mesh.position.x = - 25.0; |
| 118 | + scene.add( mesh ); |
| 119 | + |
| 120 | + var mesh = new THREE.Mesh( geometry, material2 ); |
| 121 | + mesh.position.x = 25.0; |
| 122 | + scene.add( mesh ); |
| 123 | + |
| 124 | + // |
124 | 125 |
|
125 | 126 | var floorMaterial = new THREE.MeshStandardMaterial( {
|
126 |
| - map: null, |
127 |
| - roughnessMap: null, |
128 |
| - color: 0xffffff, |
| 127 | + color: 0x333333, |
129 | 128 | metalness: 0.0,
|
130 |
| - roughness: 0.0, |
131 |
| - shading: THREE.SmoothShading |
| 129 | + roughness: 0.0 |
132 | 130 | } );
|
133 | 131 |
|
134 |
| - var planeGeometry = new THREE.PlaneBufferGeometry( 200, 200 ); |
| 132 | + var planeGeometry = new THREE.PlaneBufferGeometry( 800, 800 ); |
135 | 133 | var planeMesh1 = new THREE.Mesh( planeGeometry, floorMaterial );
|
136 | 134 | planeMesh1.position.y = - 50;
|
137 | 135 | planeMesh1.rotation.x = - Math.PI * 0.5;
|
138 |
| - planeMesh1.receiveShadow = true; |
139 | 136 | scene.add( planeMesh1 );
|
140 | 137 |
|
141 | 138 | // Lights
|
142 | 139 |
|
143 |
| - scene.add( new THREE.AmbientLight( 0x222222 ) ); |
| 140 | + var spotLight = new THREE.SpotLight( 0xff8888 ); |
| 141 | + spotLight.position.set( 100, 200, 100 ); |
| 142 | + spotLight.angle = Math.PI / 5; |
| 143 | + spotLight.penumbra = 0.9; |
| 144 | + scene.add( spotLight ); |
144 | 145 |
|
145 |
| - var spotLight = new THREE.SpotLight( 0xffffff ); |
146 |
| - spotLight.position.set( 50, 100, 50 ); |
147 |
| - spotLight.angle = Math.PI / 7; |
148 |
| - spotLight.penumbra = 0.8; |
149 |
| - spotLight.intensity = 5; |
150 |
| - spotLight.castShadow = true; |
| 146 | + var spotLight = new THREE.SpotLight( 0x8888ff ); |
| 147 | + spotLight.position.set( - 100, - 200, - 100 ); |
| 148 | + spotLight.angle = Math.PI / 5; |
| 149 | + spotLight.penumbra = 0.9; |
151 | 150 | scene.add( spotLight );
|
152 | 151 |
|
| 152 | + |
153 | 153 | renderer.setPixelRatio( window.devicePixelRatio );
|
154 | 154 | renderer.setSize( window.innerWidth, window.innerHeight );
|
155 | 155 | renderer.shadowMap.enabled = true;
|
|
158 | 158 | renderer.gammaInput = true;
|
159 | 159 | renderer.gammaOutput = true;
|
160 | 160 |
|
161 |
| - composer = new THREE.EffectComposer( renderer ); |
162 |
| - composer.setSize( window.innerWidth, window.innerHeight ); |
163 |
| - |
164 |
| - var renderScene = new THREE.RenderPass( scene, camera ); |
165 |
| - composer.addPass( renderScene ); |
166 |
| - |
167 |
| - var copyPass = new THREE.ShaderPass( THREE.CopyShader ); |
168 |
| - copyPass.renderToScreen = true; |
169 |
| - composer.addPass( copyPass ); |
170 |
| - |
171 | 161 | stats = new Stats();
|
172 | 162 | stats.domElement.style.position = 'absolute';
|
173 | 163 | stats.domElement.style.top = '0px';
|
|
181 | 171 | window.addEventListener( 'resize', onWindowResize, false );
|
182 | 172 |
|
183 | 173 | var gui = new dat.GUI();
|
| 174 | + gui.add( params, 'opacity', 0, 1 ).onChange( function () { |
| 175 | + |
| 176 | + material1.opacity = params.opacity; |
| 177 | + material2.opacity = params.opacity; |
184 | 178 |
|
185 |
| - gui.add( params, 'roughness', 0, 1 ); |
186 |
| - gui.add( params, 'opacity', 0, 1 ); |
| 179 | + } ); |
187 | 180 | gui.open();
|
188 | 181 |
|
189 | 182 | }
|
|
197 | 190 | camera.updateProjectionMatrix();
|
198 | 191 |
|
199 | 192 | renderer.setSize( width, height );
|
200 |
| - composer.setSize( width, height ); |
201 | 193 |
|
202 | 194 | }
|
203 | 195 |
|
|
215 | 207 |
|
216 | 208 | function render() {
|
217 | 209 |
|
218 |
| - if ( standardMaterial !== undefined ) { |
219 |
| - |
| 210 | + for ( var i = 0, l = scene.children.length; i < l; i ++ ) { |
220 | 211 |
|
221 |
| - standardMaterial.roughness = params.roughness; |
222 |
| - standardMaterialPremultiplied.roughness = params.roughness; |
| 212 | + var object = scene.children[ i ]; |
223 | 213 |
|
224 |
| - standardMaterial.opacity = params.opacity; |
225 |
| - standardMaterialPremultiplied.opacity = params.opacity; |
226 |
| - |
227 |
| - } |
| 214 | + if ( object.geometry instanceof THREE.SphereGeometry ) { |
228 | 215 |
|
229 |
| - var timer = Date.now() * 0.00025; |
| 216 | + object.rotation.x = performance.now() * 0.0002; |
| 217 | + object.rotation.y = - performance.now() * 0.0002; |
230 | 218 |
|
231 |
| - camera.lookAt( scene.position ); |
232 |
| - |
233 |
| - for ( var i = 0, l = objects.length; i < l; i ++ ) { |
234 |
| - |
235 |
| - var object = objects[ i ]; |
236 |
| - object.rotation.y += 0.005; |
| 219 | + } |
237 | 220 |
|
238 | 221 | }
|
239 | 222 |
|
240 |
| - composer.render(); |
| 223 | + renderer.render( scene, camera ); |
241 | 224 |
|
242 | 225 | }
|
243 | 226 |
|
244 | 227 | </script>
|
245 |
| - |
246 | 228 | </body>
|
247 | 229 | </html>
|
0 commit comments