81 lines
2.2 KiB
HTML
81 lines
2.2 KiB
HTML
|
<script>
|
||
|
function loop(inFunc, inDelay)
|
||
|
{
|
||
|
var output;
|
||
|
output = {
|
||
|
timeOld:0,
|
||
|
timeNew:0,
|
||
|
run:false,
|
||
|
delay:inDelay,
|
||
|
func:inFunc,
|
||
|
loop: () =>
|
||
|
{
|
||
|
if(!output.run){ return; }
|
||
|
output.timeOld = output.timeNew;
|
||
|
output.timeNew = new Date();
|
||
|
output.func(output.timeOld, output.timeNew);
|
||
|
setTimeout(output.loop, output.delay);
|
||
|
},
|
||
|
start: () =>
|
||
|
{
|
||
|
if(output.run){ return; }
|
||
|
output.run = true;
|
||
|
output.timeOld = output.timeNew = new Date();
|
||
|
output.loop();
|
||
|
},
|
||
|
stop: () => output.run = false,
|
||
|
toggle: () => output.run ? output.stop() : output.start()
|
||
|
};
|
||
|
return output;
|
||
|
}
|
||
|
</script>
|
||
|
<script type="module">
|
||
|
|
||
|
import * as THREE from 'https://unpkg.com/three@0.127.0/build/three.module.js';
|
||
|
|
||
|
const scene = new THREE.Scene();
|
||
|
const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
|
||
|
const geometry = new THREE.BoxGeometry();
|
||
|
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
|
||
|
const cube = new THREE.Mesh( geometry, material );
|
||
|
const renderer = new THREE.WebGLRenderer();
|
||
|
|
||
|
renderer.domElement.style.width = "100%";
|
||
|
renderer.domElement.style.height = "100%";
|
||
|
renderer.domElement.style.display = "block";
|
||
|
document.body.appendChild( renderer.domElement );
|
||
|
|
||
|
scene.add( cube );
|
||
|
camera.position.z = 5;
|
||
|
|
||
|
|
||
|
let render = inTime =>
|
||
|
{
|
||
|
renderer.render( scene, camera );
|
||
|
};
|
||
|
|
||
|
let update = (inTimeOld, inTimeNew) =>
|
||
|
{
|
||
|
let delta = (inTimeNew - inTimeOld)*0.001;
|
||
|
cube.rotation.x += delta;
|
||
|
};
|
||
|
|
||
|
let resize = () =>
|
||
|
{
|
||
|
let w = renderer.domElement.clientWidth, h = renderer.domElement.clientHeight
|
||
|
camera.aspect = w/h ;
|
||
|
camera.updateProjectionMatrix();
|
||
|
renderer.setSize(w, h, false);
|
||
|
};
|
||
|
|
||
|
window.addEventListener("resize", resize);
|
||
|
resize();
|
||
|
|
||
|
let updateLoop = loop(update, 10);
|
||
|
let renderLoop = loop(render, 50);
|
||
|
|
||
|
updateLoop.start();
|
||
|
renderLoop.start();
|
||
|
|
||
|
|
||
|
</script>
|