Public
Edited
Nov 11, 2023
Insert cell
Insert cell
Insert cell
renderer.domElement
Insert cell
// Continuously updates
{
while (true) {
renderer.render(scene, camera);

const elapsedTime = clock.getElapsedTime();

// Update material
material.uniforms.uTime.value = elapsedTime;

yield null;
}
}
Insert cell
clock = new THREE.Clock();
Insert cell
Insert cell
Insert cell
Insert cell
material = new THREE.ShaderMaterial({
vertexShader: vertextShaderTxt,
fragmentShader: fragmentShaderTxt,
// wireframe: true
side: THREE.DoubleSide,
transparent: true,
uniforms: {
uFrequency: { value: new THREE.Vector2(10, 5) },
uTime: { value: 0 },
uColor: { value: new THREE.Color("orange") },
uTexture: { value: flagTexture }
}
})
Insert cell
Insert cell
Insert cell
img = await FileAttachment("flag-french.jpg").url()
Insert cell
flagTexture = new THREE.TextureLoader().load(img)
Insert cell
Insert cell
camera = {
const fov = 75;
const aspect = width / height;
const near = 0.1;
const far = 100;
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
camera.position.set(0.25, -0.25, 1);
camera.lookAt(new THREE.Vector3(0, 0, 0));
return camera;
}
Insert cell
Insert cell
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