Public
Edited
Nov 9, 2023
Insert cell
Insert cell
Insert cell
{
const controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.addEventListener("change", () => renderer.render(scene, camera));
renderer.render(scene, camera);
return renderer.domElement;
}
Insert cell
Insert cell
renderer = {
const renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(width, height);
renderer.setPixelRatio(devicePixelRatio);
renderer.setClearColor(0xffffff);
return renderer;
}
Insert cell
scene = {
// scene
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x222222);

// // axes helper
// const axesHelper = new THREE.AxesHelper(1);
// scene.add(axesHelper);

// font loader
const textGeometry = new THREE.TextGeometry("Hello Donuts", {
font: font,
size: 0.5,
height: 0.2,
curveSegments: 5,
bevelEnabled: true,
bevelThickness: 0.03,
bevelSize: 0.02,
bevelOffset: 0,
bevelSegments: 4,
});

textGeometry.center();
const text = new THREE.Mesh(textGeometry, material);
scene.add(text);

// donuts
for (let i = 0; i < 300; i++) {
const donut = new THREE.Mesh(donutGeometry, material);

donut.position.x = (Math.random() - 0.5) * 10;
donut.position.y = (Math.random() - 0.5) * 10;
donut.position.z = (Math.random() - 0.5) * 10;

donut.rotation.x = Math.random() * Math.PI;
donut.rotation.y = Math.random() * Math.PI;

const scale = Math.random() * 0.5;
donut.scale.set(scale, scale, scale);
scene.add(donut);
}
return scene;
}
Insert cell
// fov, aspect, near, far
camera = {
const camera = new THREE.PerspectiveCamera(
75,
width / height,
0.1,
120
);
camera.position.set(1, 1, 2)
return camera
}
Insert cell
Insert cell
font = await new THREE.FontLoader().parse(thisFont);
Insert cell
thisFont = await FileAttachment("helvetiker_regular.typeface.json").json()
Insert cell
Insert cell
material = new THREE.MeshMatcapMaterial({matcap: matcapTexture});
Insert cell
matcapTexture = {
const matcapTexture = new THREE.Texture(await FileAttachment("8.png").image());
matcapTexture.needsUpdate = true;
return matcapTexture;
}
Insert cell
donutGeometry = new THREE.TorusBufferGeometry(0.3, 0.2, 20, 45);
Insert cell
Insert cell
Insert cell
THREE = {
// const THREE = window.THREE = await require('three');
// await require('three/examples/js/controls/OrbitControls.js').catch(() => {});
// await require('three/examples/js/loaders/GLTFLoader.js').catch(() => {});
// return 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(() => {});
await require('three@0.130.0/examples/jsm/loaders/FontLoader.js').catch(() => {});
await require('three@0.130.0/examples/jsm/geometries/TextGeometry.js').catch(() => {});
return THREE;
}
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