mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-21 05:50:55 +08:00
- 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.
41 lines
2.1 KiB
JavaScript
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));
|