<html><head><base href="https://543x.com/">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scalable Crypto Cube Explorer</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
<style>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
font-family: 'Arial', sans-serif;
background-color: #000;
}
#crypto-canvas {
width: 100%;
height: 100%;
display: block;
}
#controls {
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 10;
display: flex;
gap: 10px;
}
button {
padding: 10px 20px;
font-size: 16px;
background-color: rgba(255, 255, 255, 0.1);
border: 2px solid #fff;
color: #fff;
cursor: pointer;
transition: all 0.3s ease;
border-radius: 20px;
}
button:hover {
background-color: rgba(255, 255, 255, 0.3);
}
#info {
position: absolute;
top: 20px;
left: 20px;
color: #fff;
font-size: 18px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
}
#scale-controls {
position: absolute;
top: 20px;
right: 20px;
display: flex;
flex-direction: column;
gap: 10px;
}
</style>
</head>
<body>
<canvas id="crypto-canvas"></canvas>
<div id="controls">
<button id="rotate">Rotate</button>
<button id="shuffle">Shuffle</button>
<button id="explode">Explode</button>
</div>
<div id="scale-controls">
<button id="scale-up">Scale Up</button>
<button id="scale-down">Scale Down</button>
</div>
<div id="info">Use your mouse to explore the crypto cube. Click and drag to rotate. Use the buttons to scale.</div>
<script>
let scene, camera, renderer, cube;
let mouseX = 0, mouseY = 0;
let targetRotationX = 0;
let targetRotationY = 0;
let windowHalfX = window.innerWidth / 2;
let windowHalfY = window.innerHeight / 2;
let cubeSize = 3;
const cryptoSymbols = [
'BTC', 'ETH', 'ADA', 'SOL', 'DOGE', 'QQ', 'NO', 'PEPE', 'GF', 'PANDA',
'YAYA', 'SATOSHI', 'CAT', 'ORD', 'CLOWN', 'YY', 'JUMP', 'DONALD', 'A',
'MIMI', 'MIQI', 'RABBIT', 'SHEEP', 'SNAKE', 'PEACE', 'RAT', 'MONKEY',
'DRAGON', 'X', 'SEAL', 'COW', 'OTTER', 'ORD(', 'ORD{', 'ORD%', 'ORD<'
];
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('crypto-canvas'), antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
createCube();
camera.position.z = 5;
document.addEventListener('mousemove', onDocumentMouseMove, false);
document.addEventListener('mousedown', onDocumentMouseDown, false);
document.addEventListener('mouseup', onDocumentMouseUp, false);
window.addEventListener('resize', onWindowResize, false);
window.addEventListener('wheel', onMouseWheel, false);
animate();
}
function createCube() {
const geometry = new THREE.BoxGeometry(1, 1, 1, cubeSize - 1, cubeSize - 1, cubeSize - 1);
const material = new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true });
cube = new THREE.Mesh(geometry, material);
scene.add(cube);
const fontLoader = new THREE.FontLoader();
fontLoader.load('https://threejs.org/examples/fonts/helvetiker_regular.typeface.json', function(font) {
let symbolIndex = 0;
for (let x = 0; x < cubeSize; x++) {
for (let y = 0; y < cubeSize; y++) {
for (let z = 0; z < cubeSize; z++) {
if (x === 0 || x === cubeSize - 1 || y === 0 || y === cubeSize - 1 || z === 0 || z === cubeSize - 1) {
const symbol = cryptoSymbols[symbolIndex % cryptoSymbols.length];
const textGeometry = new THREE.TextGeometry(symbol, {
font: font,
size: 0.1,
height: 0.02
});
const textMaterial = new THREE.MeshBasicMaterial({ color: Math.random() * 0xffffff });
const textMesh = new THREE.Mesh(textGeometry, textMaterial);
textMesh.position.set(x / (cubeSize - 1) - 0.5, y / (cubeSize - 1) - 0.5, z / (cubeSize - 1) - 0.5);
cube.add(textMesh);
symbolIndex++;
}
}
}
}
});
}
function animate() {
requestAnimationFrame(animate);
cube.rotation.x += (targetRotationY - cube.rotation.x) * 0.1;
cube.rotation.y += (targetRotationX - cube.rotation.y) * 0.1;
renderer.render(scene, camera);
}
function onWindowResize() {
windowHalfX = window.innerWidth / 2;
windowHalfY = window.innerHeight / 2;
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function onDocumentMouseDown(event) {
document.addEventListener('mousemove', onDocumentMouseMove, false);
document.addEventListener('mouseup', onDocumentMouseUp, false);
}
function onDocumentMouseMove(event) {
mouseX = (event.clientX - windowHalfX) / 100;
mouseY = (event.clientY - windowHalfY) / 100;
targetRotationY = mouseY * 0.5;
targetRotationX = mouseX * 0.5;
}
function onDocumentMouseUp(event) {
document.removeEventListener('mousemove', onDocumentMouseMove, false);
document.removeEventListener('mouseup', onDocumentMouseUp, false);
}
function onMouseWheel(event) {
const delta = Math.sign(event.deltaY);
const scaleFactor = 1 - delta * 0.1;
scaleCube(scaleFactor);
}
function scaleCube(factor) {
cube.scale.multiplyScalar(factor);
}
document.getElementById('rotate').addEventListener('click', function() {
gsap.to(cube.rotation, { x: Math.PI * 2, y: Math.PI * 2, duration: 2, ease: "power2.inOut" });
});
document.getElementById('shuffle').addEventListener('click', function() {
const duration = 1;
cube.children.forEach(child => {
gsap.to(child.position, {
x: Math.random() - 0.5,
y: Math.random() - 0.5,
z: Math.random() - 0.5,
duration: duration,
ease: "power2.inOut"
});
gsap.to(child.rotation, {
x: Math.random() * Math.PI * 2,
y: Math.random() * Math.PI * 2,
z: Math.random() * Math.PI * 2,
duration: duration,
ease: "power2.inOut"
});
});
});
document.getElementById('explode').addEventListener('click', function() {
const duration = 1;
cube.children.forEach(child => {
const direction = new THREE.Vector3().subVectors(child.position, cube.position).normalize();
gsap.to(child.position, {
x: child.position.x + direction.x * 2,
y: child.position.y + direction.y * 2,
z: child.position.z + direction.z * 2,
duration: duration,
ease: "power2.out",
yoyo: true,
repeat: 1
});
});
});
document.getElementById('scale-up').addEventListener('click', function() {
scaleCube(1.1);
});
document.getElementById('scale-down').addEventListener('click', function() {
scaleCube(0.9);
});
init();
</script>
</body></html>