{"id":26035,"date":"2025-05-24T22:25:43","date_gmt":"2025-05-24T13:25:43","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26035"},"modified":"2025-05-24T22:25:45","modified_gmt":"2025-05-24T13:25:45","slug":"neurolink-vr","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26035","title":{"rendered":"NeuroLink VR"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"ja\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    &lt;title>\u30d5\u30eb\u30c0\u30a4\u30d6VR - \u4eee\u60f3\u4e16\u754c\u4f53\u9a13&lt;\/title>\n    &lt;style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: 'Arial', sans-serif;\n            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n            min-height: 100vh;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            overflow: hidden;\n        }\n\n        .vr-container {\n            width: 95vw;\n            height: 95vh;\n            background: #000;\n            border-radius: 20px;\n            position: relative;\n            overflow: hidden;\n            box-shadow: 0 20px 50px rgba(0,0,0,0.3);\n        }\n\n        .boot-screen {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: linear-gradient(45deg, #0f0f23, #1a1a2e);\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            align-items: center;\n            z-index: 100;\n            transition: opacity 1s ease-out;\n        }\n\n        .boot-screen.hidden {\n            opacity: 0;\n            pointer-events: none;\n        }\n\n        .logo {\n            font-size: 3rem;\n            color: #00d4ff;\n            margin-bottom: 30px;\n            text-shadow: 0 0 20px #00d4ff;\n            animation: pulse 2s infinite;\n        }\n\n        @keyframes pulse {\n            0%, 100% { opacity: 1; }\n            50% { opacity: 0.7; }\n        }\n\n        .loading-bar {\n            width: 300px;\n            height: 4px;\n            background: #333;\n            border-radius: 2px;\n            overflow: hidden;\n            margin-bottom: 20px;\n        }\n\n        .loading-progress {\n            height: 100%;\n            background: linear-gradient(90deg, #00d4ff, #ff006e);\n            width: 0%;\n            animation: loading 3s ease-out forwards;\n        }\n\n        @keyframes loading {\n            to { width: 100%; }\n        }\n\n        .boot-text {\n            color: #00d4ff;\n            font-size: 1.2rem;\n            margin-top: 20px;\n        }\n\n        #canvas {\n            width: 100%;\n            height: 100%;\n            display: block;\n        }\n\n        .hud {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            pointer-events: none;\n            z-index: 10;\n        }\n\n        .status-panel {\n            position: absolute;\n            top: 20px;\n            left: 20px;\n            background: rgba(0, 212, 255, 0.1);\n            border: 1px solid #00d4ff;\n            border-radius: 10px;\n            padding: 15px;\n            color: #00d4ff;\n            font-family: 'Courier New', monospace;\n            backdrop-filter: blur(10px);\n        }\n\n        .controls {\n            position: absolute;\n            bottom: 20px;\n            left: 50%;\n            transform: translateX(-50%);\n            display: flex;\n            gap: 15px;\n            pointer-events: all;\n        }\n\n        .control-btn {\n            background: rgba(0, 212, 255, 0.2);\n            border: 2px solid #00d4ff;\n            color: #00d4ff;\n            padding: 12px 20px;\n            border-radius: 25px;\n            cursor: pointer;\n            font-size: 14px;\n            font-weight: bold;\n            transition: all 0.3s ease;\n            backdrop-filter: blur(10px);\n        }\n\n        .control-btn:hover {\n            background: rgba(0, 212, 255, 0.4);\n            box-shadow: 0 0 20px rgba(0, 212, 255, 0.5);\n            transform: translateY(-2px);\n        }\n\n        .neural-overlay {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: radial-gradient(circle at center, transparent 30%, rgba(0, 212, 255, 0.05) 100%);\n            pointer-events: none;\n            z-index: 5;\n        }\n\n        .dive-complete {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            color: #00d4ff;\n            font-size: 2rem;\n            text-align: center;\n            opacity: 0;\n            animation: fadeInOut 4s ease-in-out;\n            z-index: 50;\n            text-shadow: 0 0 20px #00d4ff;\n        }\n\n        @keyframes fadeInOut {\n            0%, 100% { opacity: 0; }\n            20%, 80% { opacity: 1; }\n        }\n    &lt;\/style>\n&lt;\/head>\n&lt;body>\n    &lt;div class=\"vr-container\">\n        &lt;div class=\"boot-screen\" id=\"bootScreen\">\n            &lt;div class=\"logo\">NeuroLink VR&lt;\/div>\n            &lt;div class=\"loading-bar\">\n                &lt;div class=\"loading-progress\">&lt;\/div>\n            &lt;\/div>\n            &lt;div class=\"boot-text\">Neural Interface Initializing...&lt;\/div>\n        &lt;\/div>\n\n        &lt;canvas id=\"canvas\">&lt;\/canvas>\n        \n        &lt;div class=\"neural-overlay\">&lt;\/div>\n        \n        &lt;div class=\"hud\">\n            &lt;div class=\"status-panel\">\n                &lt;div>Neural Sync: &lt;span id=\"sync\">98.7%&lt;\/span>&lt;\/div>\n                &lt;div>Reality Index: &lt;span id=\"reality\">VIRTUAL&lt;\/span>&lt;\/div>\n                &lt;div>Immersion Level: &lt;span id=\"immersion\">MAXIMUM&lt;\/span>&lt;\/div>\n                &lt;div>Connected Users: &lt;span id=\"users\">1,247&lt;\/span>&lt;\/div>\n            &lt;\/div>\n        &lt;\/div>\n\n        &lt;div class=\"controls\">\n            &lt;button class=\"control-btn\" onclick=\"changeWorld('cyber')\">\u30b5\u30a4\u30d0\u30fc\u90fd\u5e02&lt;\/button>\n            &lt;button class=\"control-btn\" onclick=\"changeWorld('forest')\">\u68ee\u6797\u4e16\u754c&lt;\/button>\n            &lt;button class=\"control-btn\" onclick=\"changeWorld('space')\">\u5b87\u5b99\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3&lt;\/button>\n            &lt;button class=\"control-btn\" onclick=\"disconnect()\">\u30ed\u30b0\u30a2\u30a6\u30c8&lt;\/button>\n        &lt;\/div>\n\n        &lt;div class=\"dive-complete\" id=\"diveComplete\">\n            \u30d5\u30eb\u30c0\u30a4\u30d6\u5b8c\u4e86&lt;br>\n            &lt;small>\u4eee\u60f3\u4e16\u754c\u3078\u3088\u3046\u3053\u305d&lt;\/small>\n        &lt;\/div>\n    &lt;\/div>\n\n    &lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\">&lt;\/script>\n    &lt;script>\n        let scene, camera, renderer, world = 'cyber';\n        let particles = &#91;];\n        let buildings = &#91;];\n        let stars = &#91;];\n        let trees = &#91;];\n        \n        \/\/ \u8d77\u52d5\u30b7\u30fc\u30b1\u30f3\u30b9\n        setTimeout(() => {\n            document.getElementById('bootScreen').classList.add('hidden');\n            initVR();\n            setTimeout(() => {\n                document.getElementById('diveComplete').style.display = 'block';\n            }, 1000);\n        }, 3500);\n\n        function initVR() {\n            \/\/ Three.js \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n            scene = new THREE.Scene();\n            camera = new THREE.PerspectiveCamera(75, window.innerWidth \/ window.innerHeight, 0.1, 1000);\n            renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('canvas'), antialias: true });\n            renderer.setSize(window.innerWidth, window.innerHeight);\n            renderer.setClearColor(0x000011);\n\n            \/\/ \u521d\u671f\u4e16\u754c\u3092\u69cb\u7bc9\n            buildCyberWorld();\n            \n            \/\/ \u30ab\u30e1\u30e9\u4f4d\u7f6e\n            camera.position.set(0, 5, 10);\n            \n            \/\/ \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30d7\n            animate();\n            \n            \/\/ HUD\u66f4\u65b0\n            updateHUD();\n        }\n\n        function buildCyberWorld() {\n            \/\/ \u30af\u30ea\u30a2\n            clearWorld();\n            scene.fog = new THREE.Fog(0x000033, 10, 100);\n            \n            \/\/ \u30cd\u30aa\u30f3\u30d3\u30eb\u7fa4\n            for (let i = 0; i &lt; 50; i++) {\n                const height = Math.random() * 20 + 5;\n                const geometry = new THREE.BoxGeometry(\n                    Math.random() * 3 + 1, \n                    height, \n                    Math.random() * 3 + 1\n                );\n                \n                const material = new THREE.MeshBasicMaterial({ \n                    color: Math.random() > 0.5 ? 0x00ffff : 0xff00ff,\n                    transparent: true,\n                    opacity: 0.8\n                });\n                \n                const building = new THREE.Mesh(geometry, material);\n                building.position.set(\n                    (Math.random() - 0.5) * 100,\n                    height \/ 2,\n                    (Math.random() - 0.5) * 100\n                );\n                \n                scene.add(building);\n                buildings.push(building);\n            }\n            \n            \/\/ \u30d1\u30fc\u30c6\u30a3\u30af\u30eb\u52b9\u679c\n            createParticles(0x00ffff);\n            \n            \/\/ \u5730\u9762\n            const floorGeometry = new THREE.PlaneGeometry(200, 200);\n            const floorMaterial = new THREE.MeshBasicMaterial({ \n                color: 0x001122, \n                transparent: true, \n                opacity: 0.5 \n            });\n            const floor = new THREE.Mesh(floorGeometry, floorMaterial);\n            floor.rotation.x = -Math.PI \/ 2;\n            scene.add(floor);\n        }\n\n        function buildForestWorld() {\n            clearWorld();\n            scene.fog = new THREE.Fog(0x228B22, 5, 50);\n            \n            \/\/ \u6728\u3005\n            for (let i = 0; i &lt; 100; i++) {\n                \/\/ \u5e79\n                const trunkGeometry = new THREE.CylinderGeometry(0.3, 0.5, 8);\n                const trunkMaterial = new THREE.MeshBasicMaterial({ color: 0x8B4513 });\n                const trunk = new THREE.Mesh(trunkGeometry, trunkMaterial);\n                \n                \/\/ \u8449\n                const leavesGeometry = new THREE.SphereGeometry(3);\n                const leavesMaterial = new THREE.MeshBasicMaterial({ color: 0x228B22 });\n                const leaves = new THREE.Mesh(leavesGeometry, leavesMaterial);\n                leaves.position.y = 6;\n                \n                const tree = new THREE.Group();\n                tree.add(trunk);\n                tree.add(leaves);\n                \n                tree.position.set(\n                    (Math.random() - 0.5) * 80,\n                    4,\n                    (Math.random() - 0.5) * 80\n                );\n                \n                scene.add(tree);\n                trees.push(tree);\n            }\n            \n            createParticles(0x90EE90);\n            \n            \/\/ \u5730\u9762\n            const floorGeometry = new THREE.PlaneGeometry(200, 200);\n            const floorMaterial = new THREE.MeshBasicMaterial({ color: 0x2F4F2F });\n            const floor = new THREE.Mesh(floorGeometry, floorMaterial);\n            floor.rotation.x = -Math.PI \/ 2;\n            scene.add(floor);\n        }\n\n        function buildSpaceWorld() {\n            clearWorld();\n            scene.fog = null;\n            renderer.setClearColor(0x000000);\n            \n            \/\/ \u661f\u3005\n            for (let i = 0; i &lt; 1000; i++) {\n                const starGeometry = new THREE.SphereGeometry(0.1);\n                const starMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff });\n                const star = new THREE.Mesh(starGeometry, starMaterial);\n                \n                star.position.set(\n                    (Math.random() - 0.5) * 200,\n                    (Math.random() - 0.5) * 200,\n                    (Math.random() - 0.5) * 200\n                );\n                \n                scene.add(star);\n                stars.push(star);\n            }\n            \n            \/\/ \u5b87\u5b99\u30b9\u30c6\u30fc\u30b7\u30e7\u30f3\n            const stationGeometry = new THREE.TorusGeometry(10, 3, 8, 20);\n            const stationMaterial = new THREE.MeshBasicMaterial({ \n                color: 0x888888, \n                wireframe: true \n            });\n            const station = new THREE.Mesh(stationGeometry, stationMaterial);\n            station.position.set(0, 0, -20);\n            scene.add(station);\n            \n            createParticles(0xffffff);\n        }\n\n        function createParticles(color) {\n            for (let i = 0; i &lt; 200; i++) {\n                const particleGeometry = new THREE.SphereGeometry(0.05);\n                const particleMaterial = new THREE.MeshBasicMaterial({ \n                    color: color,\n                    transparent: true,\n                    opacity: 0.6\n                });\n                const particle = new THREE.Mesh(particleGeometry, particleMaterial);\n                \n                particle.position.set(\n                    (Math.random() - 0.5) * 50,\n                    Math.random() * 20,\n                    (Math.random() - 0.5) * 50\n                );\n                \n                particle.velocity = {\n                    x: (Math.random() - 0.5) * 0.02,\n                    y: Math.random() * 0.01,\n                    z: (Math.random() - 0.5) * 0.02\n                };\n                \n                scene.add(particle);\n                particles.push(particle);\n            }\n        }\n\n        function clearWorld() {\n            buildings.forEach(b => scene.remove(b));\n            trees.forEach(t => scene.remove(t));\n            stars.forEach(s => scene.remove(s));\n            particles.forEach(p => scene.remove(p));\n            \n            buildings = &#91;];\n            trees = &#91;];\n            stars = &#91;];\n            particles = &#91;];\n            \n            \/\/ \u30b7\u30fc\u30f3\u5168\u4f53\u3092\u30af\u30ea\u30a2\n            while(scene.children.length > 0) {\n                scene.remove(scene.children&#91;0]);\n            }\n        }\n\n        function animate() {\n            requestAnimationFrame(animate);\n            \n            \/\/ \u30ab\u30e1\u30e9\u306e\u81ea\u52d5\u56de\u8ee2\n            const time = Date.now() * 0.0005;\n            camera.position.x = Math.cos(time) * 20;\n            camera.position.z = Math.sin(time) * 20;\n            camera.lookAt(scene.position);\n            \n            \/\/ \u30d1\u30fc\u30c6\u30a3\u30af\u30eb\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\n            particles.forEach(particle => {\n                particle.position.add(particle.velocity);\n                \n                if (particle.position.y > 25) {\n                    particle.position.y = -5;\n                }\n                if (particle.position.x > 25) particle.position.x = -25;\n                if (particle.position.x &lt; -25) particle.position.x = 25;\n                if (particle.position.z > 25) particle.position.z = -25;\n                if (particle.position.z &lt; -25) particle.position.z = 25;\n            });\n            \n            \/\/ \u30d3\u30eb\u306e\u5149\u308b\u52b9\u679c\n            buildings.forEach(building => {\n                if (Math.random() > 0.98) {\n                    building.material.opacity = Math.random() * 0.5 + 0.5;\n                }\n            });\n            \n            renderer.render(scene, camera);\n        }\n\n        function changeWorld(newWorld) {\n            world = newWorld;\n            \n            switch(world) {\n                case 'cyber':\n                    buildCyberWorld();\n                    break;\n                case 'forest':\n                    buildForestWorld();\n                    break;\n                case 'space':\n                    buildSpaceWorld();\n                    break;\n            }\n        }\n\n        function updateHUD() {\n            setInterval(() => {\n                document.getElementById('sync').textContent = (98 + Math.random() * 2).toFixed(1) + '%';\n                document.getElementById('users').textContent = (1200 + Math.floor(Math.random() * 100)).toLocaleString();\n            }, 2000);\n        }\n\n        function disconnect() {\n            document.querySelector('.vr-container').style.opacity = '0';\n            setTimeout(() => {\n                document.body.innerHTML = `\n                    &lt;div style=\"display: flex; justify-content: center; align-items: center; height: 100vh; color: #00d4ff; font-size: 2rem; text-align: center;\">\n                        &lt;div>\n                            &lt;div>Neural Link Disconnected&lt;\/div>\n                            &lt;div style=\"font-size: 1rem; margin-top: 20px; opacity: 0.7;\">\u73fe\u5b9f\u4e16\u754c\u3078\u623b\u308a\u307e\u3057\u305f&lt;\/div>\n                        &lt;\/div>\n                    &lt;\/div>\n                `;\n            }, 1000);\n        }\n\n        \/\/ \u30ea\u30b5\u30a4\u30ba\u5bfe\u5fdc\n        window.addEventListener('resize', () => {\n            if (camera &amp;&amp; renderer) {\n                camera.aspect = window.innerWidth \/ window.innerHeight;\n                camera.updateProjectionMatrix();\n                renderer.setSize(window.innerWidth, window.innerHeight);\n            }\n        });\n    &lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[80],"tags":[],"class_list":["post-26035","post","type-post","status-publish","format-standard","hentry","category-html"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26035"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26035\/revisions"}],"predecessor-version":[{"id":26036,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26035\/revisions\/26036"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26035"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}