import { _testFinish, BoxGeometry, FrameFadePlugin, LoadingScreenPlugin, Mesh, PhysicalMaterial, ThreeViewer, } from 'threepipe' import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js' async function init() { const viewer = new ThreeViewer({ canvas: document.getElementById('mcanvas') as HTMLCanvasElement, renderScale: 'auto', plugins: [LoadingScreenPlugin], }) viewer.addPluginSync(FrameFadePlugin) await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr') const cube = viewer.scene.addObject(new Mesh( new BoxGeometry(1, 1, 1), new PhysicalMaterial({color: 0xff0000}) )) createSimpleButtons({ ['Change Color']: ()=>{ cube.material.color.setHSL(Math.random(), 1, 0.5) cube.material.setDirty() // this will trigger frame fade }, ['Change Size']: ()=>{ cube.scale.setScalar(Math.random() * 1.5 + 0.5) cube.setDirty({fadeDuration: 1000}) // duration can be controlled by an option like this. }, ['Change Color (no fade)']: ()=>{ cube.material.color.setHSL(Math.random(), 1, 0.5) cube.material.setDirty({frameFade: false}) // disable frame fade for this update but re-render the scene. }, }) } init().finally(_testFinish)