|
57 | 57 | particularGruop.add(particular);
|
58 | 58 | }
|
59 | 59 | }
|
| 60 | +var mouse = new THREE.Vector2(), INTERSECTED; |
| 61 | +var intersected; |
| 62 | + |
| 63 | +function onMouseMove(event) { |
| 64 | + event.preventDefault(); |
| 65 | + mouse.x = (event.clientX / window.innerWidth) * 2 - 1; |
| 66 | + mouse.y = -(event.clientY / window.innerHeight) * 2 + 1; |
| 67 | +} |
| 68 | +function onMouseDown(event) { |
| 69 | + event.preventDefault(); |
| 70 | + onMouseMove(event); |
| 71 | + raycaster.setFromCamera(mouse, camera); |
| 72 | + var intersected = raycaster.intersectObjects(modularGruop.children); |
| 73 | + if (intersected.length > 0) { |
| 74 | + cameraValue = false; |
| 75 | + if (INTERSECTED != intersected[0].object) { |
| 76 | + if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex); |
| 77 | + |
| 78 | + INTERSECTED = intersected[0].object; |
| 79 | + INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex(); |
| 80 | + INTERSECTED.material.emissive.setHex(0xFFFF00); |
| 81 | + //INTERSECTED.material.map = null; |
| 82 | + //lightBack.position.set(INTERSECTED.position.x,INTERSECTED.position.y,INTERSECTED.position.z); |
| 83 | + |
| 84 | + TweenMax.to(camera.position, 1, { |
| 85 | + x:INTERSECTED.position.x, |
| 86 | + y:INTERSECTED.position.y, |
| 87 | + z:INTERSECTED.position.z+3, |
| 88 | + ease:Power2.easeInOut |
| 89 | + }); |
| 90 | + |
| 91 | + } else { |
| 92 | + if (INTERSECTED) INTERSECTED.material.emissive.setHex(INTERSECTED.currentHex); |
| 93 | + INTERSECTED = null; |
| 94 | + |
| 95 | + } |
| 96 | + } |
| 97 | + console.log(intersected.length); |
| 98 | +} |
| 99 | +function onMouseUp(event) { |
| 100 | + |
| 101 | +} |
| 102 | + |
| 103 | +window.addEventListener('mousedown', onMouseDown, false); |
| 104 | +window.addEventListener('mouseup', onMouseUp, false); |
| 105 | +window.addEventListener('mousemove', onMouseMove, false); |
60 | 106 | </script>
|
61 | 107 | <py-script>
|
62 | 108 | from pyodide import create_proxy, to_js
|
63 | 109 | from js import window
|
64 | 110 | from js import Math
|
65 | 111 | from js import THREE
|
66 |
| -from js import create_objects, generateParticle |
| 112 | +from js import create_objects, generateParticle, performance, mouse, intersected |
67 | 113 |
|
68 | 114 | renderer = THREE.WebGLRenderer.new({"antialias":True})
|
69 | 115 | renderer.setSize(1000, 1000)
|
|
134 | 180 | uSpeed = 0.1
|
135 | 181 |
|
136 | 182 | time = 0.0003;
|
137 |
| -camera.lookAt(scene.position) |
138 |
| -renderer.render( scene, camera ) |
| 183 | + |
| 184 | +while True: |
| 185 | + time = performance.now() * 0.0003; |
| 186 | + i = 0 |
| 187 | + while i < particularGruop.children.length: |
| 188 | + newObject = particularGruop.children[i]; |
| 189 | + newObject.rotation.x += newObject.speedValue/10; |
| 190 | + newObject.rotation.y += newObject.speedValue/10; |
| 191 | + newObject.rotation.z += newObject.speedValue/10; |
| 192 | + i += 1 |
| 193 | + |
| 194 | + i = 0 |
| 195 | + while i < modularGruop.children.length: |
| 196 | + newCubes = modularGruop.children[i]; |
| 197 | + newCubes.rotation.x += 0.008; |
| 198 | + newCubes.rotation.y += 0.005; |
| 199 | + newCubes.rotation.z += 0.003; |
| 200 | + |
| 201 | + newCubes.position.x = Math.sin(time * newCubes.positionZ) * newCubes.positionY; |
| 202 | + newCubes.position.y = Math.cos(time * newCubes.positionX) * newCubes.positionZ; |
| 203 | + newCubes.position.z = Math.sin(time * newCubes.positionY) * newCubes.positionX; |
| 204 | + i += 1 |
| 205 | + |
| 206 | + particularGruop.rotation.y += 0.005; |
| 207 | + |
| 208 | + modularGruop.rotation.y -= ((mouse.x * 4) + modularGruop.rotation.y) * uSpeed; |
| 209 | + modularGruop.rotation.x -= ((-mouse.y * 4) + modularGruop.rotation.x) * uSpeed; |
| 210 | + |
| 211 | + camera.lookAt(scene.position) |
| 212 | + renderer.render( scene, camera ) |
| 213 | + await asyncio.sleep(0.01) |
| 214 | + |
| 215 | + |
139 | 216 | </py-script>
|
140 | 217 | </body>
|
141 | 218 | </html>
|
0 commit comments