Hyperspace Screensaver
About this app
A fullscreen screensaver that simulates flying through hyperspace.
Hyperspace Screensaver
Related apps
Put this on your site
Source
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Hyperspace Screensaver</title>
<meta name="description" content="A fullscreen screensaver that simulates flying through hyperspace.">
<meta name="keywords" content="hyperspace, screensaver, three.js, simulation">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- Built-In Functions for Apps -->
<script type="text/javascript">
var localStoragePrefix = "ct-168123515822835";
var lastSave = 0;
// save to localstorage
function saveLocal(data) {
if (Date.now() - lastSave < 1000) {
return;
}
// save to cookie
let cookie = localStoragePrefix + "=" + JSON.stringify(data) + "; path=" + window.location.pathname + "'; SameSite=Strict";
cookie += "; expires=" + new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 1000).toUTCString();
document.cookie = cookie;
lastSave = Date.now();
}
// load from localstorage
function loadLocal() {
var cookiePrefix = localStoragePrefix + "=";
var cookieStart = document.cookie.indexOf(cookiePrefix);
if (cookieStart > -1) {
let cookieEnd = document.cookie.indexOf(";", cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
var cookieData = document.cookie.substring(cookieStart + cookiePrefix.length, cookieEnd);
return JSON.parse(cookieData);
}
}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/0.151.3/three.min.js"></script>
<script type="text/javascript">
var scene, camera, renderer, particles;
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
particles = new THREE.BufferGeometry();
var positions = new Float32Array(1000 * 3);
var speeds = new Float32Array(1000);
for (var i = 0; i < 1000; i++) {
positions[i * 3] = (Math.random() * 2 - 1) * 10;
positions[i * 3 + 1] = (Math.random() * 2 - 1) * 10;
positions[i * 3 + 2] = -Math.random() * 50;
speeds[i] = Math.random() * 0.05 + 0.025;
}
particles.setAttribute('position', new THREE.BufferAttribute(positions, 3));
particles.setAttribute('speed', new THREE.BufferAttribute(speeds, 1));
var material = new THREE.PointsMaterial({ color: 0xFFFFFF, size: 0.1 });
var particleSystem = new THREE.Points(particles, material);
scene.add(particleSystem);
window.addEventListener('resize', onWindowResize, false);
animate();
}
function animate() {
requestAnimationFrame(animate);
var positions = particles.attributes.position;
var speeds = particles.attributes.speed;
for (var i = 0; i < 1000; i++) {
positions.array[i * 3 + 2] += speeds.array[i];
if (positions.array[i * 3 + 2] > 5) {
positions.array[i * 3 + 2] = -50;
}
}
positions.needsUpdate = true;
renderer.render(scene, camera);
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
</script>
<style>
body {
margin: 0;
overflow: hidden;
}
</style>
</head>
<body onload="init()">
</body>
</html>
NEW APPS
These are apps made by the community!