|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import {_testFinish, BoxGeometry, Color, Mesh, PhysicalMaterial, PopmotionPlugin, 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,
- })
- const popmotion = viewer.addPluginSync(PopmotionPlugin)
-
- 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})
- ))
-
- let isMovedUp = false
-
- createSimpleButtons({
- ['Move Up/Down']: async(btn) => {
- btn.disabled = true
- await popmotion.animateAsync({
- from: cube.position.y,
- to: cube.position.y + (isMovedUp ? -1 : 1),
- duration: 500, // ms
- onUpdate: (v) => {
- cube.position.setY(v)
- cube.setDirty()
- },
- onComplete: () => isMovedUp = !isMovedUp,
- })
- btn.disabled = false
- },
- ['Rotate +90deg']: async(btn) => {
- btn.disabled = true
- await popmotion.animateAsync({
- from: cube.rotation.y,
- to: cube.rotation.y + Math.PI / 2,
- duration: 500,
- onUpdate: (v) => {
- cube.rotation.y = v
- cube.setDirty()
- },
- })
- btn.disabled = false
- },
- ['Change Color']: async(btn)=>{
- btn.disabled = true
- await popmotion.animateAsync({
- from: '#' + cube.material.color.getHexString(),
- to: '#' + new Color().setHSL(Math.random(), 1, 0.5).getHexString(),
- duration: 500,
- onUpdate: (v) => {
- cube.material.color.set(v)
- cube.material.setDirty()
- },
- })
- btn.disabled = false
- },
- })
-
- }
-
- init().then(_testFinish)
|