|
35 | 35 |
|
36 | 36 | <script>
|
37 | 37 |
|
38 |
| - var camera, cubeCamera, scene, renderer; |
39 |
| - var cube, sphere, torus; |
| 38 | + var camera, scene, renderer; |
| 39 | + var cube, sphere, torus, material; |
40 | 40 |
|
41 |
| - var fov = 70, |
| 41 | + var count = 0, cubeCamera1, cubeCamera2; |
| 42 | + |
| 43 | + var fov = 60, |
42 | 44 | isUserInteracting = false,
|
43 | 45 | onMouseDownMouseX = 0, onMouseDownMouseY = 0,
|
44 | 46 | lon = 0, onMouseDownLon = 0,
|
|
62 | 64 |
|
63 | 65 | scene = new THREE.Scene();
|
64 | 66 |
|
65 |
| - var mesh = new THREE.Mesh( new THREE.SphereGeometry( 500, 60, 40 ), new THREE.MeshBasicMaterial( { map: texture } ) ); |
| 67 | + var mesh = new THREE.Mesh( new THREE.SphereGeometry( 500, 32, 16 ), new THREE.MeshBasicMaterial( { map: texture } ) ); |
66 | 68 | mesh.scale.x = -1;
|
67 | 69 | scene.add( mesh );
|
68 | 70 |
|
69 | 71 | renderer = new THREE.WebGLRenderer( { antialias: true } );
|
70 | 72 | renderer.setPixelRatio( window.devicePixelRatio );
|
71 | 73 | renderer.setSize( window.innerWidth, window.innerHeight );
|
72 | 74 |
|
73 |
| - cubeCamera = new THREE.CubeCamera( 1, 1000, 256 ); |
74 |
| - cubeCamera.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter; |
75 |
| - scene.add( cubeCamera ); |
| 75 | + cubeCamera1 = new THREE.CubeCamera( 1, 1000, 256 ); |
| 76 | + cubeCamera1.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter; |
| 77 | + scene.add( cubeCamera1 ); |
| 78 | + |
| 79 | + cubeCamera2 = new THREE.CubeCamera( 1, 1000, 256 ); |
| 80 | + cubeCamera2.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter; |
| 81 | + scene.add( cubeCamera2 ); |
76 | 82 |
|
77 | 83 | document.body.appendChild( renderer.domElement );
|
78 | 84 |
|
79 | 85 | //
|
80 | 86 |
|
81 |
| - var material = new THREE.MeshBasicMaterial( { envMap: cubeCamera.renderTarget.texture } ); |
| 87 | + material = new THREE.MeshBasicMaterial( { |
| 88 | + envMap: cubeCamera2.renderTarget.texture |
| 89 | + } ); |
82 | 90 |
|
83 |
| - sphere = new THREE.Mesh( new THREE.SphereGeometry( 20, 30, 15 ), material ); |
| 91 | + sphere = new THREE.Mesh( new THREE.IcosahedronGeometry( 20, 3 ), material ); |
84 | 92 | scene.add( sphere );
|
85 | 93 |
|
86 | 94 | cube = new THREE.Mesh( new THREE.BoxGeometry( 20, 20, 20 ), material );
|
87 | 95 | scene.add( cube );
|
88 | 96 |
|
89 |
| - torus = new THREE.Mesh( new THREE.TorusKnotGeometry( 20, 5, 100, 25 ), material ); |
| 97 | + torus = new THREE.Mesh( new THREE.TorusKnotGeometry( 10, 5, 100, 25 ), material ); |
90 | 98 | scene.add( torus );
|
91 | 99 |
|
92 | 100 | //
|
|
178 | 186 | phi = THREE.Math.degToRad( 90 - lat );
|
179 | 187 | theta = THREE.Math.degToRad( lon );
|
180 | 188 |
|
181 |
| - sphere.position.x = Math.sin( time * 0.001 ) * 30; |
182 |
| - sphere.position.y = Math.sin( time * 0.0011 ) * 30; |
183 |
| - sphere.position.z = Math.sin( time * 0.0012 ) * 30; |
184 |
| - |
185 |
| - sphere.rotation.x += 0.02; |
186 |
| - sphere.rotation.y += 0.03; |
187 |
| - |
188 |
| - cube.position.x = Math.sin( time * 0.001 + 2 ) * 30; |
189 |
| - cube.position.y = Math.sin( time * 0.0011 + 2 ) * 30; |
190 |
| - cube.position.z = Math.sin( time * 0.0012 + 2 ) * 30; |
| 189 | + cube.position.x = Math.cos( time * 0.001 ) * 30; |
| 190 | + cube.position.y = Math.sin( time * 0.001 ) * 30; |
| 191 | + cube.position.z = Math.sin( time * 0.001 ) * 30; |
191 | 192 |
|
192 | 193 | cube.rotation.x += 0.02;
|
193 | 194 | cube.rotation.y += 0.03;
|
194 | 195 |
|
195 |
| - torus.position.x = Math.sin( time * 0.001 + 4 ) * 30; |
196 |
| - torus.position.y = Math.sin( time * 0.0011 + 4 ) * 30; |
197 |
| - torus.position.z = Math.sin( time * 0.0012 + 4 ) * 30; |
| 196 | + torus.position.x = Math.cos( time * 0.001 + 10 ) * 30; |
| 197 | + torus.position.y = Math.sin( time * 0.001 + 10 ) * 30; |
| 198 | + torus.position.z = Math.sin( time * 0.001 + 10 ) * 30; |
198 | 199 |
|
199 | 200 | torus.rotation.x += 0.02;
|
200 | 201 | torus.rotation.y += 0.03;
|
|
207 | 208 |
|
208 | 209 | sphere.visible = false; // *cough*
|
209 | 210 |
|
210 |
| - cubeCamera.updateCubeMap( renderer, scene ); |
| 211 | + // pingpong |
| 212 | + |
| 213 | + if ( count % 2 === 0 ) { |
| 214 | + |
| 215 | + material.envMap = cubeCamera1.renderTarget.texture; |
| 216 | + cubeCamera2.updateCubeMap( renderer, scene ); |
| 217 | + |
| 218 | + } else { |
| 219 | + |
| 220 | + material.envMap = cubeCamera2.renderTarget.texture; |
| 221 | + cubeCamera1.updateCubeMap( renderer, scene ); |
| 222 | + |
| 223 | + } |
| 224 | + |
| 225 | + count ++; |
211 | 226 |
|
212 | 227 | sphere.visible = true; // *cough*
|
213 | 228 |
|
|
0 commit comments