UNPKG

@playcanvas/blocks

Version:

High level abstract 3D primitives for React

49 lines 1.58 kB
import { BoundingBox, Vec3 } from 'playcanvas'; import { lerp, MyQuat } from './math'; const v = new Vec3(); // stores a camera pose class Pose { position = new Vec3(); rotation = new MyQuat(); distance = 1; constructor(other = null) { if (other) { this.copy(other); } } copy(pose) { this.position.copy(pose.position); this.rotation.copy(pose.rotation); this.distance = pose.distance; return this; } lerp(a, b, t) { this.position.lerp(a.position, b.position, t); this.rotation.lerp(a.rotation, b.rotation, t); this.distance = lerp(a.distance, b.distance, t); return this; } fromLookAt(position, target) { this.position.copy(position); this.rotation.fromLookAt(position, target); this.distance = position.distance(target); return this; } calcTarget(target) { this.rotation.transformVector(Vec3.FORWARD, v); target.copy(v).mulScalar(this.distance).add(this.position); } } const computeStartingPose = (gsplat, fov) => { const bbox = gsplat?.instance?.meshInstance?.aabb ?? new BoundingBox(); const sceneSize = bbox.halfExtents.length() * 1.5; const distance = sceneSize / Math.sin(fov / 180 * Math.PI * 0.5); const position = new Vec3(2, 1, 2).normalize().mulScalar(distance).add(bbox.center).toArray(); const target = bbox.center.toArray(); return { position, target }; }; export { Pose, computeStartingPose }; //# sourceMappingURL=pose.js.map