| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- export class space_scene {
- #renderer;
- #canvas;
- #camera;
- #scene;
- #working;
- #framerate;
- constructor(canvas, context) {
- this.#framerate = 30;
- this.#canvas = canvas;
- this.#renderer = new THREE.WebGLRenderer({canvas, context: context});
- this.#camera = new THREE.PerspectiveCamera(75, 1);
- this.#scene = new THREE.Scene();
-
- this.update_size();
- }
- update_size(width, height) {
- this.#canvas.width = width;
- this.#canvas.height = height;
- this.#camera.aspect = width / height;
- this.#camera.updateProjectionMatrix();
- this.#renderer.setSize(width, height);
- }
- get scene() {
- return this.#scene;
- }
- start() {
- this.#working = true;
- setTimeout(() => { this.#rendering(); }, 1);
- }
- stop() {
- this.#working = false;
- }
- #rendering() {
- const before = performance.now();
- this.#renderer.render(this.#scene, this.#camera);
-
- if (!this.#working) {
- return;
- }
- const after = performance.now();
- const delta = after - before;
- const next = 1000 / 30 - ((delta >= 0) ? delta : 0);
- setTimeout(() => {
- requestAnimationFrame(() => { this.#rendering(); });
- }, (next > 0) ? next : 1);
- }
- }
|