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));