<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Quantum Gateway (QG-1) - 3D WebGL</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.128/examples/js/controls/OrbitControls.js"></script>
<style>
body { margin: 0; background: black; }
canvas { display: block; }
</style>
</head>
<body>
<script>
// Initialize scene, camera, renderer
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Add orbit controls for interaction
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
// Add glowing cube (Quantum Gateway Core)
const cubeGeometry = new THREE.BoxGeometry(3, 3, 3);
const cubeMaterial = new THREE.MeshStandardMaterial({
color: 0x00ffff,
emissive: 0x00ffff,
emissiveIntensity: 0.5,
transparent: true,
opacity: 0.7,
wireframe: true
});
const cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
scene.add(cube);
// Quantum Particle System (energy stream)
const particleGeometry = new THREE.BufferGeometry();
const particleCount = 500;
const positions = new Float32Array(particleCount * 3);
for (let i = 0; i < particleCount * 3; i++) {
positions[i] = (Math.random() - 0.5) * 10;
}
particleGeometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
const particleMaterial = new THREE.PointsMaterial({
color: 0xff00ff,
size: 0.05,
transparent: true
});
const particles = new THREE.Points(particleGeometry, particleMaterial);
scene.add(particles);
// Quantum Gateway Hologram
const hologramGeometry = new THREE.TorusGeometry(2, 0.1, 16, 100);
const hologramMaterial = new THREE.MeshStandardMaterial({
color: 0x9900ff,
emissive: 0x9900ff,
emissiveIntensity: 1.5,
transparent: true,
opacity: 0.6
});
const hologram = new THREE.Mesh(hologramGeometry, hologramMaterial);
hologram.rotation.x = Math.PI / 2;
scene.add(hologram);
// Lighting
const ambientLight = new THREE.AmbientLight(0xffffff, 0.2);
scene.add(ambientLight);
const pointLight = new THREE.PointLight(0x00ffff, 1.5, 50);
pointLight.position.set(5, 5, 5);
scene.add(pointLight);
// Camera Position
camera.position.z = 8;
// Animation loop
function animate() {
requestAnimationFrame(animate);
// Rotate cube and hologram
cube.rotation.y += 0.01;
hologram.rotation.z += 0.005;
// Animate energy particles
const positions = particleGeometry.attributes.position.array;
for (let i = 0; i < particleCount; i++) {
positions[i * 3 + 1] += 0.02; // Move particles up
if (positions[i * 3 + 1] > 5) positions[i * 3 + 1] = -5; // Reset position
}
particleGeometry.attributes.position.needsUpdate = true;
controls.update();
renderer.render(scene, camera);
}
animate();
// Responsive resizing
window.addEventListener('resize', () => {
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
});
</script>
</body>
</html>