Public
Edited
Jun 9, 2023
Fork of Three.js
Insert cell
Insert cell
renderer.domElement
Insert cell
viewof rotation = Inputs.range([-Math.PI, Math.PI], { label: "rotation" })
Insert cell
viewof offset = Inputs.radio([-1, 0, 1], { label: "offset", value: 0 })
Insert cell
// Continuously updates
{
const delta = Math.abs(offset - offset_old);
mutable offset_old = offset;
// if big change, then animate
if (delta > 0.5) {
console.log(`whoa ${offset} ${offset_old}`);
}

while (true) {
const rotation_new = offset + rotation;

cube.rotation.z = rotation_new;
renderer.render(scene, camera);

yield null;
}
}
Insert cell
mutable offset_old = 0
Insert cell
height = 600
Insert cell
cube = {
const material = new THREE.MeshNormalMaterial();
const geometry = new THREE.BoxGeometry(1, 1, 1);
const cube = new THREE.Mesh(geometry, material);
return cube;
}
Insert cell
scene = {
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x001b42);
scene.add(cube);
return scene;
}
Insert cell
camera = {
const fov = 45;
const aspect = width / height;
const near = 1;
const far = 1000;
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.set(2, 2, -2)
camera.lookAt(new THREE.Vector3(0, 0, 0));
return camera;
}
Insert cell
renderer = {
const renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(width, height);
renderer.setPixelRatio(devicePixelRatio);
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.addEventListener("change", () => renderer.render(scene, camera));
invalidation.then(() => (controls.dispose(), renderer.dispose()));
return renderer;
}
Insert cell
THREE = {
const THREE = window.THREE = await require("three@0.130.0/build/three.min.js");
await require("three@0.130.0/examples/js/controls/OrbitControls.js").catch(() => {});
return THREE;
}
Insert cell
width
Insert cell
geometry = new THREE.BoxGeometry(1, 1, 1)
Insert cell
geometry.getAttribute("position")
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more