Files
scriptc/tests/fixtures/three/scene.mjs
Chris Tate df78e89342 Compile three.js scenes, cameras, and geometry
- Compile scene hierarchies, synchronized rotations, and perspective camera transforms.
- Support box and buffer geometry, bounds, normals, and index selection.
- Preserve JavaScript constructor and callback behavior in native LLVM and WASM builds.
2026-09-29 22:49:55 -05:00

41 lines
2.1 KiB
JavaScript

import { Scene } from 'three/src/scenes/Scene.js';
import { Object3D } from 'three/src/core/Object3D.js';
import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera.js';
import { Vector3 } from 'three/src/math/Vector3.js';
const scene = new Scene();
scene.position.set(1, 2, 3);
const parent = new Object3D(), child = new Object3D();
parent.position.set(2, 3, 4);
child.position.set(3, 4, 5);
parent.add(child);
scene.add(parent);
scene.updateMatrixWorld();
console.log('scene', scene.isScene, scene.children.length, child.parent === parent);
console.log('world', child.matrixWorld.elements[12], child.matrixWorld.elements[13], child.matrixWorld.elements[14]);
child.rotation.z = Math.PI / 2;
console.log('rotation', Number(child.quaternion.z).toFixed(4), Number(child.quaternion.w).toFixed(4));
child.quaternion.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / 4);
console.log('quaternion', Number(child.rotation.y).toFixed(4));
const descriptor = Object.getOwnPropertyDescriptor(child, 'position');
console.log('position', descriptor.value === child.position, descriptor.writable, descriptor.enumerable, descriptor.configurable);
const names = [];
scene.name = 'scene'; parent.name = 'parent'; child.name = 'child';
scene.traverse((object) => names.push(object.name));
console.log('traverse', names.join(','));
parent.remove(child);
console.log('removed', parent.children.length, child.parent === null);
scene.add(child);
scene.updateMatrixWorld();
console.log('reparent', child.matrixWorld.elements[12], child.matrixWorld.elements[13], child.matrixWorld.elements[14]);
const camera = new PerspectiveCamera(70, 1.5, 0.01, 10);
camera.position.z = 1;
scene.add(camera);
scene.updateMatrixWorld(true);
console.log('camera', camera.isPerspectiveCamera, camera.position.z, camera.projectionMatrix.elements[11]);
console.log('view', camera.matrixWorldInverse.elements[12], camera.matrixWorldInverse.elements[13], camera.matrixWorldInverse.elements[14]);
camera.aspect = 2;
camera.updateProjectionMatrix();
console.log('projection', Number(camera.projectionMatrix.elements[0]).toFixed(4));