| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>AI Agentic Demo - Dynamic Fractals & 3D Control</title> |
| | <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> |
| | <style> |
| | body { |
| | margin: 0; |
| | padding: 0; |
| | background: linear-gradient(135deg, #0c0c0c 0%, #1a1a2e 50%, #16213e 100%); |
| | font-family: 'Courier New', monospace; |
| | color: #00ff88; |
| | overflow: hidden; |
| | } |
| | |
| | .dashboard { |
| | position: absolute; |
| | top: 0; |
| | left: 0; |
| | width: 100%; |
| | height: 100%; |
| | display: grid; |
| | grid-template-columns: 300px 1fr 300px; |
| | grid-template-rows: 60px 1fr 200px; |
| | gap: 10px; |
| | padding: 10px; |
| | box-sizing: border-box; |
| | } |
| | |
| | .header { |
| | grid-column: 1 / -1; |
| | background: rgba(0, 255, 136, 0.1); |
| | border: 1px solid #00ff88; |
| | border-radius: 8px; |
| | display: flex; |
| | align-items: center; |
| | justify-content: space-between; |
| | padding: 0 20px; |
| | backdrop-filter: blur(10px); |
| | } |
| | |
| | .ai-panel { |
| | background: rgba(0, 255, 136, 0.05); |
| | border: 1px solid #00ff88; |
| | border-radius: 8px; |
| | padding: 15px; |
| | backdrop-filter: blur(10px); |
| | overflow-y: auto; |
| | } |
| | |
| | .viz-container { |
| | position: relative; |
| | border: 1px solid #00ff88; |
| | border-radius: 8px; |
| | overflow: hidden; |
| | background: rgba(0, 0, 0, 0.3); |
| | } |
| | |
| | .control-panel { |
| | grid-column: 1 / -1; |
| | background: rgba(0, 255, 136, 0.05); |
| | border: 1px solid #00ff88; |
| | border-radius: 8px; |
| | padding: 15px; |
| | backdrop-filter: blur(10px); |
| | display: grid; |
| | grid-template-columns: repeat(4, 1fr); |
| | gap: 15px; |
| | } |
| | |
| | .agent-card { |
| | background: rgba(0, 255, 136, 0.1); |
| | border: 1px solid #00ff88; |
| | border-radius: 4px; |
| | padding: 10px; |
| | margin-bottom: 10px; |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .agent-card:hover { |
| | background: rgba(0, 255, 136, 0.2); |
| | transform: translateX(5px); |
| | } |
| | |
| | .agent-status { |
| | display: inline-block; |
| | width: 8px; |
| | height: 8px; |
| | border-radius: 50%; |
| | margin-right: 8px; |
| | } |
| | |
| | .active { background: #00ff88; } |
| | .idle { background: #ffaa00; } |
| | .error { background: #ff4444; } |
| | |
| | button { |
| | background: linear-gradient(45deg, #00ff88, #00cc66); |
| | border: none; |
| | border-radius: 4px; |
| | color: #000; |
| | padding: 8px 16px; |
| | font-weight: bold; |
| | cursor: pointer; |
| | transition: all 0.3s ease; |
| | font-family: inherit; |
| | } |
| | |
| | button:hover { |
| | transform: translateY(-2px); |
| | box-shadow: 0 4px 12px rgba(0, 255, 136, 0.3); |
| | } |
| | |
| | .code-block { |
| | background: rgba(0, 0, 0, 0.6); |
| | border: 1px solid #333; |
| | border-radius: 4px; |
| | padding: 10px; |
| | font-family: 'Courier New', monospace; |
| | font-size: 12px; |
| | margin: 10px 0; |
| | overflow-x: auto; |
| | } |
| | |
| | .log-entry { |
| | background: rgba(0, 255, 136, 0.1); |
| | border-left: 3px solid #00ff88; |
| | padding: 8px; |
| | margin: 5px 0; |
| | border-radius: 0 4px 4px 0; |
| | font-size: 12px; |
| | } |
| | |
| | input[type="range"] { |
| | width: 100%; |
| | margin: 10px 0; |
| | } |
| | |
| | .fractal-params { |
| | display: grid; |
| | grid-template-columns: 1fr 1fr; |
| | gap: 10px; |
| | margin-top: 10px; |
| | } |
| | |
| | .param-group { |
| | display: flex; |
| | flex-direction: column; |
| | gap: 5px; |
| | } |
| | |
| | label { |
| | font-size: 12px; |
| | color: #00ff88; |
| | } |
| | </style> |
| | </head> |
| | <body> |
| | <div class="dashboard"> |
| | <div class="header"> |
| | <h1>🤖 AI Agentic Control System</h1> |
| | <div> |
| | <span id="status">🟢 System Active</span> |
| | <span style="margin-left: 20px;">FPS: <span id="fps">60</span></span> |
| | </div> |
| | </div> |
| | |
| | <div class="ai-panel"> |
| | <h3>🧠 AI Agents</h3> |
| | <div id="agents-container"> |
| | |
| | </div> |
| | |
| | <h4>📊 System Logs</h4> |
| | <div id="logs-container"> |
| | |
| | </div> |
| | </div> |
| | |
| | <div class="viz-container"> |
| | <canvas id="three-canvas"></canvas> |
| | </div> |
| | |
| | <div class="ai-panel"> |
| | <h3>🔧 Dynamic Code Engine</h3> |
| | <button onclick="updateFractalCode()">🔄 Evolve Fractal</button> |
| | <button onclick="generateNewSurface()">🌊 New Surface</button> |
| | |
| | <div class="code-block" id="current-code"> |
| | // Current fractal function |
| | z = z² + c |
| | </div> |
| | |
| | <h4>🎯 Active Targets</h4> |
| | <div id="targets-list"> |
| | <div class="log-entry">Target: Web App Control</div> |
| | <div class="log-entry">Target: Fractal Evolution</div> |
| | <div class="log-entry">Target: 3D Animation</div> |
| | </div> |
| | </div> |
| | |
| | <div class="control-panel"> |
| | <div> |
| | <h4>🌀 Fractal Controls</h4> |
| | <div class="fractal-params"> |
| | <div class="param-group"> |
| | <label>Iterations:</label> |
| | <input type="range" id="iterations" min="10" max="200" value="50"> |
| | </div> |
| | <div class="param-group"> |
| | <label>Zoom:</label> |
| | <input type="range" id="zoom" min="0.1" max="5" step="0.1" value="1"> |
| | </div> |
| | <div class="param-group"> |
| | <label>C Real:</label> |
| | <input type="range" id="c-real" min="-2" max="2" step="0.01" value="-0.7"> |
| | </div> |
| | <div class="param-group"> |
| | <label>C Imag:</label> |
| | <input type="range" id="c-imag" min="-2" max="2" step="0.01" value="0.27"> |
| | </div> |
| | </div> |
| | </div> |
| | |
| | <div> |
| | <h4>🏙️ City Controls</h4> |
| | <button onclick="addPerson()">🚶 Add Person</button> |
| | <button onclick="addVehicle()">🚗 Add Vehicle</button> |
| | <button onclick="addAnimal()">🐕 Add Animal</button> |
| | <button onclick="toggleTimeSpeed()">⏰ Time Speed</button> |
| | </div> |
| | |
| | <div> |
| | <h4>☀️ Day/Night</h4> |
| | <button onclick="forceDayTime()">☀️ Force Day</button> |
| | <button onclick="forceNightTime()">🌙 Force Night</button> |
| | <button onclick="randomizeColors()">🎨 Colors</button> |
| | <button onclick="addControlPoint()">✨ Add Orb</button> |
| | </div> |
| | |
| | <div> |
| | <h4>🚀 Agent Actions</h4> |
| | <button onclick="deployAgent('fractal')">🌀 Fractal Agent</button> |
| | <button onclick="deployAgent('visual')">👁️ Visual Agent</button> |
| | <button onclick="deployAgent('control')">🎮 Control Agent</button> |
| | <button onclick="deployAgent('browser')">🌐 Browser Agent</button> |
| | </div> |
| | |
| | <div> |
| | <h4>📡 System Status</h4> |
| | <div style="font-size: 12px;"> |
| | <div>People: <span id="people-count">8</span></div> |
| | <div>Vehicles: <span id="vehicle-count">9</span></div> |
| | <div>Animals: <span id="animal-count">11</span></div> |
| | <div>Time: <span id="time-cycle">Day</span></div> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | <script> |
| | |
| | class AIAgent { |
| | constructor(name, type, color) { |
| | this.name = name; |
| | this.type = type; |
| | this.color = color; |
| | this.status = 'idle'; |
| | this.tasks = []; |
| | this.lastUpdate = Date.now(); |
| | } |
| | |
| | execute(task) { |
| | this.status = 'active'; |
| | this.tasks.push(task); |
| | addLog(`${this.name}: Executing ${task}`); |
| | |
| | |
| | setTimeout(() => { |
| | this.status = 'idle'; |
| | addLog(`${this.name}: Completed ${task}`); |
| | }, Math.random() * 2000 + 1000); |
| | } |
| | } |
| | |
| | |
| | const agents = [ |
| | new AIAgent('Fractal-AI', 'computation', '#00ff88'), |
| | new AIAgent('Visual-AI', 'graphics', '#ff6b6b'), |
| | new AIAgent('Control-AI', 'interface', '#4ecdc4'), |
| | new AIAgent('Browser-AI', 'automation', '#45b7d1') |
| | ]; |
| | |
| | |
| | let scene, camera, renderer, fractalMesh, controlPoints = []; |
| | let animationId; |
| | let isAnimating = true; |
| | |
| | |
| | let buildings = []; |
| | let people = []; |
| | let vehicles = []; |
| | let animals = []; |
| | let dayNightCycle = { time: 0, sunLight: null, moonLight: null, ambientLight: null }; |
| | |
| | function initThreeJS() { |
| | const container = document.getElementById('three-canvas'); |
| | const rect = container.parentElement.getBoundingClientRect(); |
| | |
| | scene = new THREE.Scene(); |
| | camera = new THREE.PerspectiveCamera(75, rect.width / rect.height, 0.1, 1000); |
| | renderer = new THREE.WebGLRenderer({ canvas: container, alpha: true }); |
| | renderer.setSize(rect.width, rect.height); |
| | renderer.setClearColor(0x87CEEB, 1.0); |
| | renderer.shadowMap.enabled = true; |
| | renderer.shadowMap.type = THREE.PCFSoftShadowMap; |
| | |
| | |
| | setupLighting(); |
| | |
| | |
| | createCity(); |
| | createPeople(); |
| | createVehicles(); |
| | createAnimals(); |
| | |
| | |
| | createFractalSurface(); |
| | |
| | camera.position.set(0, 8, 12); |
| | camera.lookAt(0, 0, 0); |
| | |
| | animate(); |
| | } |
| | |
| | function setupLighting() { |
| | |
| | dayNightCycle.ambientLight = new THREE.AmbientLight(0x404040, 0.3); |
| | scene.add(dayNightCycle.ambientLight); |
| | |
| | |
| | dayNightCycle.sunLight = new THREE.DirectionalLight(0xffffff, 1.0); |
| | dayNightCycle.sunLight.position.set(10, 10, 5); |
| | dayNightCycle.sunLight.castShadow = true; |
| | dayNightCycle.sunLight.shadow.mapSize.width = 2048; |
| | dayNightCycle.sunLight.shadow.mapSize.height = 2048; |
| | scene.add(dayNightCycle.sunLight); |
| | |
| | |
| | dayNightCycle.moonLight = new THREE.DirectionalLight(0x6666ff, 0.3); |
| | dayNightCycle.moonLight.position.set(-10, 8, -5); |
| | dayNightCycle.moonLight.castShadow = true; |
| | dayNightCycle.moonLight.visible = false; |
| | scene.add(dayNightCycle.moonLight); |
| | } |
| | |
| | function createCity() { |
| | |
| | const groundGeometry = new THREE.PlaneGeometry(20, 20); |
| | const groundMaterial = new THREE.MeshLambertMaterial({ color: 0x444444 }); |
| | const ground = new THREE.Mesh(groundGeometry, groundMaterial); |
| | ground.rotation.x = -Math.PI / 2; |
| | ground.receiveShadow = true; |
| | scene.add(ground); |
| | |
| | |
| | for (let i = 0; i < 12; i++) { |
| | createBuilding( |
| | (Math.random() - 0.5) * 15, |
| | 0, |
| | (Math.random() - 0.5) * 15 |
| | ); |
| | } |
| | |
| | |
| | createStreets(); |
| | } |
| | |
| | function createBuilding(x, y, z) { |
| | const height = Math.random() * 4 + 2; |
| | const width = Math.random() * 1.5 + 1; |
| | const depth = Math.random() * 1.5 + 1; |
| | |
| | |
| | const buildingGeometry = new THREE.BoxGeometry(width, height, depth); |
| | const buildingMaterial = new THREE.MeshLambertMaterial({ |
| | color: new THREE.Color().setHSL(Math.random() * 0.1 + 0.15, 0.3, 0.4) |
| | }); |
| | const building = new THREE.Mesh(buildingGeometry, buildingMaterial); |
| | building.position.set(x, height / 2, z); |
| | building.castShadow = true; |
| | building.receiveShadow = true; |
| | scene.add(building); |
| | |
| | |
| | const windows = []; |
| | const windowsX = Math.floor(width * 4); |
| | const windowsY = Math.floor(height * 3); |
| | |
| | for (let wx = 0; wx < windowsX; wx++) { |
| | for (let wy = 0; wy < windowsY; wy++) { |
| | const windowGeometry = new THREE.PlaneGeometry(0.15, 0.15); |
| | const windowMaterial = new THREE.MeshBasicMaterial({ |
| | color: 0x444444, |
| | transparent: true, |
| | opacity: 0.8 |
| | }); |
| | const window = new THREE.Mesh(windowGeometry, windowMaterial); |
| | |
| | window.position.set( |
| | x + (wx - windowsX/2) * 0.2, |
| | y + (wy - windowsY/2) * 0.3 + height/2, |
| | z + width/2 + 0.01 |
| | ); |
| | |
| | window.userData = { |
| | isOn: Math.random() > 0.5, |
| | flickerTimer: Math.random() * 1000 |
| | }; |
| | |
| | windows.push(window); |
| | scene.add(window); |
| | } |
| | } |
| | |
| | buildings.push({ structure: building, windows: windows }); |
| | } |
| | |
| | function createStreets() { |
| | |
| | const streetMaterial = new THREE.MeshLambertMaterial({ color: 0x333333 }); |
| | |
| | |
| | const hStreetGeometry = new THREE.PlaneGeometry(20, 1); |
| | const hStreet = new THREE.Mesh(hStreetGeometry, streetMaterial); |
| | hStreet.rotation.x = -Math.PI / 2; |
| | hStreet.position.y = 0.01; |
| | scene.add(hStreet); |
| | |
| | |
| | const vStreetGeometry = new THREE.PlaneGeometry(1, 20); |
| | const vStreet = new THREE.Mesh(vStreetGeometry, streetMaterial); |
| | vStreet.rotation.x = -Math.PI / 2; |
| | vStreet.position.y = 0.01; |
| | scene.add(vStreet); |
| | } |
| | |
| | function createPeople() { |
| | for (let i = 0; i < 8; i++) { |
| | const person = createPerson(); |
| | people.push(person); |
| | scene.add(person.group); |
| | } |
| | } |
| | |
| | function createPerson() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.CylinderGeometry(0.1, 0.15, 0.4); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ |
| | color: new THREE.Color().setHSL(Math.random(), 0.6, 0.5) |
| | }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | body.position.y = 0.4; |
| | group.add(body); |
| | |
| | |
| | const headGeometry = new THREE.SphereGeometry(0.08); |
| | const headMaterial = new THREE.MeshLambertMaterial({ color: 0xffdbac }); |
| | const head = new THREE.Mesh(headGeometry, headMaterial); |
| | head.position.y = 0.7; |
| | group.add(head); |
| | |
| | |
| | const path = createRandomPath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.02 + 0.01, |
| | walkCycle: 0 |
| | }; |
| | } |
| | |
| | function createVehicles() { |
| | |
| | for (let i = 0; i < 4; i++) { |
| | const car = createCar(); |
| | vehicles.push(car); |
| | scene.add(car.group); |
| | } |
| | |
| | |
| | for (let i = 0; i < 2; i++) { |
| | const truck = createTruck(); |
| | vehicles.push(truck); |
| | scene.add(truck.group); |
| | } |
| | |
| | |
| | for (let i = 0; i < 3; i++) { |
| | const bicycle = createBicycle(); |
| | vehicles.push(bicycle); |
| | scene.add(bicycle.group); |
| | } |
| | } |
| | |
| | function createCar() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.BoxGeometry(0.8, 0.3, 0.4); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ |
| | color: new THREE.Color().setHSL(Math.random(), 0.8, 0.5) |
| | }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | body.position.y = 0.2; |
| | group.add(body); |
| | |
| | |
| | const wheelGeometry = new THREE.CylinderGeometry(0.08, 0.08, 0.05); |
| | const wheelMaterial = new THREE.MeshLambertMaterial({ color: 0x222222 }); |
| | |
| | const wheels = []; |
| | const wheelPositions = [ |
| | [-0.3, 0.08, -0.15], [0.3, 0.08, -0.15], |
| | [-0.3, 0.08, 0.15], [0.3, 0.08, 0.15] |
| | ]; |
| | |
| | wheelPositions.forEach(pos => { |
| | const wheel = new THREE.Mesh(wheelGeometry, wheelMaterial); |
| | wheel.position.set(...pos); |
| | wheel.rotation.z = Math.PI / 2; |
| | wheels.push(wheel); |
| | group.add(wheel); |
| | }); |
| | |
| | const path = createVehiclePath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | wheels: wheels, |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.05 + 0.03, |
| | type: 'car' |
| | }; |
| | } |
| | |
| | function createTruck() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.BoxGeometry(1.2, 0.5, 0.6); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ color: 0x8B4513 }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | body.position.y = 0.3; |
| | group.add(body); |
| | |
| | |
| | const cabGeometry = new THREE.BoxGeometry(0.4, 0.4, 0.6); |
| | const cabMaterial = new THREE.MeshLambertMaterial({ color: 0x654321 }); |
| | const cab = new THREE.Mesh(cabGeometry, cabMaterial); |
| | cab.position.set(-0.5, 0.4, 0); |
| | group.add(cab); |
| | |
| | const path = createVehiclePath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.03 + 0.02, |
| | type: 'truck' |
| | }; |
| | } |
| | |
| | function createBicycle() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const frameGeometry = new THREE.CylinderGeometry(0.02, 0.02, 0.6); |
| | const frameMaterial = new THREE.MeshLambertMaterial({ color: 0x0066cc }); |
| | const frame = new THREE.Mesh(frameGeometry, frameMaterial); |
| | frame.position.y = 0.15; |
| | frame.rotation.z = Math.PI / 6; |
| | group.add(frame); |
| | |
| | |
| | const wheelGeometry = new THREE.TorusGeometry(0.12, 0.02, 8, 16); |
| | const wheelMaterial = new THREE.MeshLambertMaterial({ color: 0x333333 }); |
| | |
| | const frontWheel = new THREE.Mesh(wheelGeometry, wheelMaterial); |
| | frontWheel.position.set(0.3, 0.12, 0); |
| | group.add(frontWheel); |
| | |
| | const backWheel = new THREE.Mesh(wheelGeometry, wheelMaterial); |
| | backWheel.position.set(-0.3, 0.12, 0); |
| | group.add(backWheel); |
| | |
| | const path = createRandomPath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | wheels: [frontWheel, backWheel], |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.04 + 0.02, |
| | type: 'bicycle' |
| | }; |
| | } |
| | |
| | function createAnimals() { |
| | |
| | for (let i = 0; i < 3; i++) { |
| | const dog = createDog(); |
| | animals.push(dog); |
| | scene.add(dog.group); |
| | } |
| | |
| | |
| | for (let i = 0; i < 2; i++) { |
| | const cat = createCat(); |
| | animals.push(cat); |
| | scene.add(cat.group); |
| | } |
| | |
| | |
| | for (let i = 0; i < 6; i++) { |
| | const bird = createBird(); |
| | animals.push(bird); |
| | scene.add(bird.group); |
| | } |
| | } |
| | |
| | function createDog() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.BoxGeometry(0.3, 0.15, 0.15); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ color: 0x8B4513 }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | body.position.y = 0.1; |
| | group.add(body); |
| | |
| | |
| | const headGeometry = new THREE.BoxGeometry(0.12, 0.1, 0.1); |
| | const head = new THREE.Mesh(headGeometry, bodyMaterial); |
| | head.position.set(0.2, 0.12, 0); |
| | group.add(head); |
| | |
| | |
| | const tailGeometry = new THREE.CylinderGeometry(0.02, 0.02, 0.1); |
| | const tail = new THREE.Mesh(tailGeometry, bodyMaterial); |
| | tail.position.set(-0.15, 0.15, 0); |
| | tail.rotation.z = Math.PI / 4; |
| | group.add(tail); |
| | |
| | const path = createRandomPath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | tail: tail, |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.03 + 0.02, |
| | type: 'dog', |
| | tailWag: 0 |
| | }; |
| | } |
| | |
| | function createCat() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.BoxGeometry(0.25, 0.1, 0.1); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ color: 0x696969 }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | body.position.y = 0.08; |
| | group.add(body); |
| | |
| | |
| | const headGeometry = new THREE.SphereGeometry(0.05); |
| | const head = new THREE.Mesh(headGeometry, bodyMaterial); |
| | head.position.set(0.15, 0.1, 0); |
| | group.add(head); |
| | |
| | const path = createRandomPath(); |
| | group.position.copy(path[0]); |
| | group.castShadow = true; |
| | |
| | return { |
| | group: group, |
| | path: path, |
| | pathIndex: 0, |
| | speed: Math.random() * 0.025 + 0.015, |
| | type: 'cat' |
| | }; |
| | } |
| | |
| | function createBird() { |
| | const group = new THREE.Group(); |
| | |
| | |
| | const bodyGeometry = new THREE.SphereGeometry(0.04); |
| | const bodyMaterial = new THREE.MeshLambertMaterial({ |
| | color: new THREE.Color().setHSL(Math.random(), 0.7, 0.6) |
| | }); |
| | const body = new THREE.Mesh(bodyGeometry, bodyMaterial); |
| | group.add(body); |
| | |
| | |
| | const wingGeometry = new THREE.PlaneGeometry(0.08, 0.03); |
| | const wingMaterial = new THREE.MeshLambertMaterial({ |
| | color: bodyMaterial.color, |
| | transparent: true, |
| | opacity: 0.8 |
| | }); |
| | |
| | const leftWing = new THREE.Mesh(wingGeometry, wingMaterial); |
| | leftWing.position.set(-0.05, 0, 0); |
| | leftWing.rotation.z = Math.PI / 6; |
| | group.add(leftWing); |
| | |
| | const rightWing = new THREE.Mesh(wingGeometry, wingMaterial); |
| | rightWing.position.set(0.05, 0, 0); |
| | rightWing.rotation.z = -Math.PI / 6; |
| | group.add(rightWing); |
| | |
| | group.position.set( |
| | (Math.random() - 0.5) * 15, |
| | Math.random() * 3 + 2, |
| | (Math.random() - 0.5) * 15 |
| | ); |
| | |
| | return { |
| | group: group, |
| | wings: [leftWing, rightWing], |
| | flightPath: Math.random() * Math.PI * 2, |
| | flightRadius: Math.random() * 5 + 2, |
| | height: group.position.y, |
| | speed: Math.random() * 0.02 + 0.01, |
| | wingFlap: 0, |
| | type: 'bird' |
| | }; |
| | } |
| | |
| | function createRandomPath() { |
| | const path = []; |
| | for (let i = 0; i < 6; i++) { |
| | path.push(new THREE.Vector3( |
| | (Math.random() - 0.5) * 15, |
| | 0, |
| | (Math.random() - 0.5) * 15 |
| | )); |
| | } |
| | return path; |
| | } |
| | |
| | function createVehiclePath() { |
| | |
| | const paths = [ |
| | |
| | [ |
| | new THREE.Vector3(-10, 0, 0), |
| | new THREE.Vector3(10, 0, 0) |
| | ], |
| | |
| | [ |
| | new THREE.Vector3(0, 0, -10), |
| | new THREE.Vector3(0, 0, 10) |
| | ] |
| | ]; |
| | return paths[Math.floor(Math.random() * paths.length)]; |
| | } |
| | |
| | function createFractalSurface() { |
| | const geometry = new THREE.PlaneGeometry(2, 2, 32, 32); |
| | const vertices = geometry.attributes.position.array; |
| | |
| | |
| | for (let i = 0; i < vertices.length; i += 3) { |
| | const x = vertices[i]; |
| | const y = vertices[i + 1]; |
| | |
| | |
| | const c_real = parseFloat(document.getElementById('c-real')?.value || -0.7); |
| | const c_imag = parseFloat(document.getElementById('c-imag')?.value || 0.27); |
| | const zoom = parseFloat(document.getElementById('zoom')?.value || 1); |
| | |
| | let z_real = x * zoom; |
| | let z_imag = y * zoom; |
| | let iterations = 0; |
| | const maxIter = parseInt(document.getElementById('iterations')?.value || 50); |
| | |
| | while (z_real * z_real + z_imag * z_imag < 4 && iterations < maxIter) { |
| | const temp = z_real * z_real - z_imag * z_imag + c_real; |
| | z_imag = 2 * z_real * z_imag + c_imag; |
| | z_real = temp; |
| | iterations++; |
| | } |
| | |
| | vertices[i + 2] = (iterations / maxIter) * 0.3 * Math.sin(Date.now() * 0.001 + x + y); |
| | } |
| | |
| | geometry.attributes.position.needsUpdate = true; |
| | geometry.computeVertexNormals(); |
| | |
| | |
| | const material = new THREE.MeshPhongMaterial({ |
| | color: new THREE.Color().setHSL((Date.now() * 0.0001) % 1, 0.7, 0.6), |
| | wireframe: false, |
| | transparent: true, |
| | opacity: 0.6 |
| | }); |
| | |
| | if (fractalMesh) { |
| | scene.remove(fractalMesh); |
| | } |
| | |
| | fractalMesh = new THREE.Mesh(geometry, material); |
| | fractalMesh.position.set(5, 0.5, 5); |
| | fractalMesh.rotation.x = -Math.PI / 2; |
| | scene.add(fractalMesh); |
| | } |
| | |
| | function updateDayNightCycle() { |
| | dayNightCycle.time += 0.001; |
| | const cycle = (Math.sin(dayNightCycle.time) + 1) / 2; |
| | |
| | |
| | const sunAngle = dayNightCycle.time; |
| | const sunRadius = 15; |
| | dayNightCycle.sunLight.position.set( |
| | Math.cos(sunAngle) * sunRadius, |
| | Math.sin(sunAngle) * sunRadius, |
| | 5 |
| | ); |
| | |
| | |
| | const moonAngle = sunAngle + Math.PI; |
| | dayNightCycle.moonLight.position.set( |
| | Math.cos(moonAngle) * sunRadius, |
| | Math.sin(moonAngle) * sunRadius, |
| | -5 |
| | ); |
| | |
| | |
| | if (cycle > 0.5) { |
| | |
| | dayNightCycle.sunLight.visible = true; |
| | dayNightCycle.moonLight.visible = false; |
| | dayNightCycle.sunLight.intensity = cycle; |
| | dayNightCycle.ambientLight.intensity = cycle * 0.5; |
| | |
| | |
| | const skyHue = 0.55; |
| | const skySaturation = 0.6; |
| | const skyLightness = 0.4 + cycle * 0.4; |
| | renderer.setClearColor(new THREE.Color().setHSL(skyHue, skySaturation, skyLightness)); |
| | } else { |
| | |
| | dayNightCycle.sunLight.visible = false; |
| | dayNightCycle.moonLight.visible = true; |
| | dayNightCycle.moonLight.intensity = (1 - cycle) * 0.3; |
| | dayNightCycle.ambientLight.intensity = (1 - cycle) * 0.2; |
| | |
| | |
| | const skyHue = 0.65; |
| | const skySaturation = 0.8; |
| | const skyLightness = 0.1 + (1 - cycle) * 0.1; |
| | renderer.setClearColor(new THREE.Color().setHSL(skyHue, skySaturation, skyLightness)); |
| | } |
| | } |
| | |
| | function updateBuildingWindows() { |
| | const isNight = (Math.sin(dayNightCycle.time) + 1) / 2 < 0.5; |
| | |
| | buildings.forEach(building => { |
| | building.windows.forEach(window => { |
| | window.userData.flickerTimer += 16; |
| | |
| | |
| | const lightProbability = isNight ? 0.7 : 0.2; |
| | |
| | if (window.userData.flickerTimer > 1000 + Math.random() * 2000) { |
| | window.userData.isOn = Math.random() < lightProbability; |
| | window.userData.flickerTimer = 0; |
| | } |
| | |
| | if (window.userData.isOn) { |
| | const warmth = Math.random() * 0.1 + 0.1; |
| | window.material.color.setHSL(warmth, 0.8, 0.6); |
| | window.material.opacity = 0.9; |
| | } else { |
| | window.material.color.setRGB(0.2, 0.2, 0.3); |
| | window.material.opacity = 0.3; |
| | } |
| | }); |
| | }); |
| | } |
| | |
| | function updatePeople() { |
| | people.forEach(person => { |
| | const path = person.path; |
| | const currentPos = path[person.pathIndex]; |
| | const nextPos = path[(person.pathIndex + 1) % path.length]; |
| | |
| | |
| | const direction = new THREE.Vector3().subVectors(nextPos, currentPos).normalize(); |
| | person.group.position.add(direction.multiplyScalar(person.speed)); |
| | |
| | |
| | person.group.lookAt(person.group.position.clone().add(direction)); |
| | |
| | |
| | person.walkCycle += 0.3; |
| | person.group.children[0].rotation.z = Math.sin(person.walkCycle) * 0.1; |
| | |
| | |
| | if (person.group.position.distanceTo(nextPos) < 0.2) { |
| | person.pathIndex = (person.pathIndex + 1) % path.length; |
| | } |
| | }); |
| | } |
| | |
| | function updateVehicles() { |
| | vehicles.forEach(vehicle => { |
| | const path = vehicle.path; |
| | const currentPos = path[vehicle.pathIndex]; |
| | const nextPos = path[(vehicle.pathIndex + 1) % path.length]; |
| | |
| | |
| | const direction = new THREE.Vector3().subVectors(nextPos, currentPos).normalize(); |
| | vehicle.group.position.add(direction.multiplyScalar(vehicle.speed)); |
| | |
| | |
| | vehicle.group.lookAt(vehicle.group.position.clone().add(direction)); |
| | |
| | |
| | if (vehicle.wheels) { |
| | vehicle.wheels.forEach(wheel => { |
| | wheel.rotation.x += vehicle.speed * 2; |
| | }); |
| | } |
| | |
| | |
| | if (vehicle.group.position.distanceTo(nextPos) < 0.2) { |
| | vehicle.pathIndex = (vehicle.pathIndex + 1) % path.length; |
| | } |
| | }); |
| | } |
| | |
| | function updateAnimals() { |
| | animals.forEach(animal => { |
| | if (animal.type === 'bird') { |
| | |
| | animal.flightPath += animal.speed; |
| | animal.group.position.x = Math.cos(animal.flightPath) * animal.flightRadius; |
| | animal.group.position.z = Math.sin(animal.flightPath) * animal.flightRadius; |
| | animal.group.position.y = animal.height + Math.sin(animal.flightPath * 3) * 0.5; |
| | |
| | |
| | animal.wingFlap += 0.5; |
| | const flapAngle = Math.sin(animal.wingFlap) * 0.5; |
| | animal.wings[0].rotation.z = Math.PI / 6 + flapAngle; |
| | animal.wings[1].rotation.z = -Math.PI / 6 - flapAngle; |
| | |
| | |
| | const flightDirection = new THREE.Vector3( |
| | -Math.sin(animal.flightPath), |
| | 0, |
| | Math.cos(animal.flightPath) |
| | ); |
| | animal.group.lookAt(animal.group.position.clone().add(flightDirection)); |
| | |
| | } else { |
| | |
| | const path = animal.path; |
| | const currentPos = path[animal.pathIndex]; |
| | const nextPos = path[(animal.pathIndex + 1) % path.length]; |
| | |
| | const direction = new THREE.Vector3().subVectors(nextPos, currentPos).normalize(); |
| | animal.group.position.add(direction.multiplyScalar(animal.speed)); |
| | animal.group.lookAt(animal.group.position.clone().add(direction)); |
| | |
| | |
| | if (animal.type === 'dog' && animal.tail) { |
| | animal.tailWag += 0.4; |
| | animal.tail.rotation.y = Math.sin(animal.tailWag) * 0.5; |
| | } |
| | |
| | if (animal.group.position.distanceTo(nextPos) < 0.1) { |
| | animal.pathIndex = (animal.pathIndex + 1) % path.length; |
| | } |
| | } |
| | }); |
| | } |
| | |
| | function addControlPoint() { |
| | const geometry = new THREE.SphereGeometry(0.1, 16, 16); |
| | const material = new THREE.MeshPhongMaterial({ |
| | color: new THREE.Color().setHSL(Math.random(), 0.8, 0.6), |
| | emissive: new THREE.Color().setHSL(Math.random(), 0.3, 0.1) |
| | }); |
| | |
| | const sphere = new THREE.Mesh(geometry, material); |
| | sphere.position.set( |
| | (Math.random() - 0.5) * 16, |
| | Math.random() * 4 + 2, |
| | (Math.random() - 0.5) * 16 |
| | ); |
| | |
| | sphere.userData = { |
| | velocity: new THREE.Vector3( |
| | (Math.random() - 0.5) * 0.03, |
| | (Math.random() - 0.5) * 0.02, |
| | (Math.random() - 0.5) * 0.03 |
| | ) |
| | }; |
| | |
| | sphere.castShadow = true; |
| | controlPoints.push(sphere); |
| | scene.add(sphere); |
| | |
| | addLog(`Control point added at (${sphere.position.x.toFixed(2)}, ${sphere.position.y.toFixed(2)})`); |
| | } |
| | |
| | function addPerson() { |
| | const person = createPerson(); |
| | people.push(person); |
| | scene.add(person.group); |
| | addLog(`New person added to city`); |
| | } |
| | |
| | function addVehicle() { |
| | const vehicleType = ['car', 'truck', 'bicycle'][Math.floor(Math.random() * 3)]; |
| | let vehicle; |
| | |
| | if (vehicleType === 'car') vehicle = createCar(); |
| | else if (vehicleType === 'truck') vehicle = createTruck(); |
| | else vehicle = createBicycle(); |
| | |
| | vehicles.push(vehicle); |
| | scene.add(vehicle.group); |
| | addLog(`New ${vehicleType} added to streets`); |
| | } |
| | |
| | function addAnimal() { |
| | const animalType = ['dog', 'cat', 'bird'][Math.floor(Math.random() * 3)]; |
| | let animal; |
| | |
| | if (animalType === 'dog') animal = createDog(); |
| | else if (animalType === 'cat') animal = createCat(); |
| | else animal = createBird(); |
| | |
| | animals.push(animal); |
| | scene.add(animal.group); |
| | addLog(`New ${animalType} spotted in city`); |
| | } |
| | |
| | function toggleTimeSpeed() { |
| | const currentSpeed = 0.001; |
| | dayNightCycle.timeSpeed = dayNightCycle.timeSpeed === currentSpeed ? currentSpeed * 5 : currentSpeed; |
| | addLog(`Time speed: ${dayNightCycle.timeSpeed === currentSpeed ? 'Normal' : '5x Fast'}`); |
| | } |
| | |
| | function forceDayTime() { |
| | dayNightCycle.time = Math.PI / 2; |
| | addLog('Forced to day time'); |
| | } |
| | |
| | function forceNightTime() { |
| | dayNightCycle.time = -Math.PI / 2; |
| | addLog('Forced to night time'); |
| | } |
| | |
| | function clearControlPoints() { |
| | controlPoints.forEach(point => scene.remove(point)); |
| | controlPoints = []; |
| | addLog('All control points cleared'); |
| | } |
| | |
| | function animate() { |
| | if (!isAnimating) return; |
| | |
| | animationId = requestAnimationFrame(animate); |
| | |
| | |
| | updateDayNightCycle(); |
| | |
| | |
| | updateBuildingWindows(); |
| | |
| | |
| | updatePeople(); |
| | updateVehicles(); |
| | updateAnimals(); |
| | |
| | |
| | if (fractalMesh) { |
| | fractalMesh.rotation.z += 0.002; |
| | fractalMesh.material.color.setHSL((Date.now() * 0.0001) % 1, 0.7, 0.6); |
| | } |
| | |
| | |
| | controlPoints.forEach(point => { |
| | point.position.add(point.userData.velocity); |
| | |
| | |
| | if (Math.abs(point.position.x) > 8) point.userData.velocity.x *= -1; |
| | if (Math.abs(point.position.y - 2) > 4) point.userData.velocity.y *= -1; |
| | if (Math.abs(point.position.z) > 8) point.userData.velocity.z *= -1; |
| | |
| | |
| | point.rotation.x += 0.02; |
| | point.rotation.y += 0.03; |
| | }); |
| | |
| | renderer.render(scene, camera); |
| | |
| | |
| | updateFPS(); |
| | } |
| | |
| | let lastTime = Date.now(); |
| | let frameCount = 0; |
| | |
| | function updateFPS() { |
| | frameCount++; |
| | const now = Date.now(); |
| | if (now - lastTime >= 1000) { |
| | document.getElementById('fps').textContent = frameCount; |
| | frameCount = 0; |
| | lastTime = now; |
| | } |
| | } |
| | |
| | |
| | const fractalFunctions = [ |
| | "z = z² + c", |
| | "z = z³ + c", |
| | "z = sin(z) + c", |
| | "z = |z|² + c", |
| | "z = z² + c + sin(t)", |
| | "z = z*cos(z) + c", |
| | "z = exp(z) + c" |
| | ]; |
| | |
| | function updateFractalCode() { |
| | const newFunction = fractalFunctions[Math.floor(Math.random() * fractalFunctions.length)]; |
| | document.getElementById('current-code').innerHTML = `// Current fractal function<br/>${newFunction}`; |
| | |
| | createFractalSurface(); |
| | agents[0].execute('fractal code evolution'); |
| | addLog(`Fractal function updated: ${newFunction}`); |
| | } |
| | |
| | function generateNewSurface() { |
| | |
| | document.getElementById('c-real').value = (Math.random() - 0.5) * 4; |
| | document.getElementById('c-imag').value = (Math.random() - 0.5) * 4; |
| | document.getElementById('zoom').value = Math.random() * 3 + 0.5; |
| | |
| | createFractalSurface(); |
| | agents[1].execute('surface generation'); |
| | } |
| | |
| | function toggleAnimation() { |
| | isAnimating = !isAnimating; |
| | if (isAnimating) { |
| | animate(); |
| | addLog('Animation resumed'); |
| | } else { |
| | cancelAnimationFrame(animationId); |
| | addLog('Animation paused'); |
| | } |
| | } |
| | |
| | function randomizeColors() { |
| | if (fractalMesh) { |
| | fractalMesh.material.color.setHSL(Math.random(), 0.7, 0.6); |
| | } |
| | controlPoints.forEach(point => { |
| | point.material.color.setHSL(Math.random(), 0.8, 0.6); |
| | point.material.emissive.setHSL(Math.random(), 0.3, 0.1); |
| | }); |
| | agents[1].execute('color randomization'); |
| | } |
| | |
| | function deployAgent(type) { |
| | const agent = agents.find(a => a.type === type || a.name.toLowerCase().includes(type)); |
| | if (agent) { |
| | const tasks = { |
| | fractal: 'fractal computation optimization', |
| | visual: 'visual enhancement protocol', |
| | control: 'interface adaptation', |
| | browser: 'web application orchestration' |
| | }; |
| | agent.execute(tasks[type] || 'general task execution'); |
| | } |
| | } |
| | |
| | |
| | function renderAgents() { |
| | const container = document.getElementById('agents-container'); |
| | container.innerHTML = ''; |
| | |
| | agents.forEach(agent => { |
| | const card = document.createElement('div'); |
| | card.className = 'agent-card'; |
| | card.innerHTML = ` |
| | <div> |
| | <span class="agent-status ${agent.status}"></span> |
| | <strong>${agent.name}</strong> |
| | </div> |
| | <div style="font-size: 12px; color: ${agent.color};"> |
| | ${agent.type.toUpperCase()} • ${agent.tasks.length} tasks |
| | </div> |
| | `; |
| | container.appendChild(card); |
| | }); |
| | } |
| | |
| | function addLog(message) { |
| | const container = document.getElementById('logs-container'); |
| | const entry = document.createElement('div'); |
| | entry.className = 'log-entry'; |
| | entry.innerHTML = `<small>${new Date().toLocaleTimeString()}</small><br/>${message}`; |
| | container.appendChild(entry); |
| | |
| | |
| | while (container.children.length > 10) { |
| | container.removeChild(container.firstChild); |
| | } |
| | |
| | container.scrollTop = container.scrollHeight; |
| | } |
| | |
| | function updateSystemStats() { |
| | document.getElementById('memory-usage').textContent = `${Math.floor(Math.random() * 30 + 40)}%`; |
| | document.getElementById('cpu-usage').textContent = `${Math.floor(Math.random() * 40 + 20)}%`; |
| | document.getElementById('agent-count').textContent = agents.length; |
| | document.getElementById('target-count').textContent = document.querySelectorAll('#targets-list .log-entry').length; |
| | } |
| | |
| | |
| | document.getElementById('iterations')?.addEventListener('input', createFractalSurface); |
| | document.getElementById('zoom')?.addEventListener('input', createFractalSurface); |
| | document.getElementById('c-real')?.addEventListener('input', createFractalSurface); |
| | document.getElementById('c-imag')?.addEventListener('input', createFractalSurface); |
| | |
| | |
| | window.addEventListener('load', () => { |
| | initThreeJS(); |
| | renderAgents(); |
| | |
| | |
| | for (let i = 0; i < 3; i++) { |
| | setTimeout(() => addControlPoint(), i * 500); |
| | } |
| | |
| | |
| | setInterval(updateSystemStats, 2000); |
| | setInterval(renderAgents, 1000); |
| | |
| | |
| | setInterval(() => { |
| | if (Math.random() < 0.1) { |
| | updateFractalCode(); |
| | } |
| | }, 5000); |
| | |
| | addLog('AI Agentic System initialized'); |
| | addLog('3D visualization engine active'); |
| | addLog('Dynamic fractal computation online'); |
| | addLog('Browser automation ready'); |
| | }); |
| | |
| | |
| | window.addEventListener('resize', () => { |
| | const container = document.getElementById('three-canvas'); |
| | const rect = container.parentElement.getBoundingClientRect(); |
| | camera.aspect = rect.width / rect.height; |
| | camera.updateProjectionMatrix(); |
| | renderer.setSize(rect.width, rect.height); |
| | }); |
| | |
| | |
| | function simulateBrowserAutomation() { |
| | const actions = [ |
| | 'Opening new browser window', |
| | 'Navigating to target application', |
| | 'Injecting control scripts', |
| | 'Establishing WebSocket connection', |
| | 'Monitoring DOM changes', |
| | 'Executing automated interactions' |
| | ]; |
| | |
| | let index = 0; |
| | const interval = setInterval(() => { |
| | if (index < actions.length) { |
| | addLog(`Browser Agent: ${actions[index]}`); |
| | index++; |
| | } else { |
| | clearInterval(interval); |
| | addLog('Browser automation sequence complete'); |
| | } |
| | }, 1500); |
| | } |
| | |
| | |
| | function simulateAIInference() { |
| | const models = ['text-classification', 'object-detection', 'sentiment-analysis', 'code-generation']; |
| | const model = models[Math.floor(Math.random() * models.length)]; |
| | |
| | addLog(`Running ${model} inference...`); |
| | setTimeout(() => { |
| | addLog(`${model} inference complete: confidence 0.${Math.floor(Math.random() * 30 + 70)}`); |
| | }, Math.random() * 2000 + 500); |
| | } |
| | |
| | |
| | setInterval(simulateAIInference, 8000); |
| | setTimeout(simulateBrowserAutomation, 3000); |
| | </script> |
| | </body> |
| | </html> |