Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 1x 1x 1x 1x | /*!
* Copyright 2020 Cognite AS
*/
import { vec3 } from 'gl-matrix';
import { Box3 } from './Box3';
import { SectorMetadata } from '../models/cad/types';
import { traverseDepthFirst } from './traversal';
export interface SuggestedCameraConfig {
position: vec3;
target: vec3;
near: number;
far: number;
}
export function suggestCameraConfig(rootSector: SectorMetadata): SuggestedCameraConfig {
const averageMin = vec3.create();
const averageMax = vec3.create();
let count = 0;
traverseDepthFirst(rootSector, node => {
vec3.add(averageMin, averageMin, node.bounds.min);
vec3.add(averageMax, averageMax, node.bounds.max);
count += 1;
return true;
});
vec3.scale(averageMin, averageMin, 1.0 / count);
vec3.scale(averageMax, averageMax, 1.0 / count);
const bounds = new Box3([averageMin, averageMax]);
const target = bounds.center;
const extent = vec3.subtract(vec3.create(), bounds.max, bounds.min);
const position = vec3.add(
vec3.create(),
target,
vec3.fromValues(-2.0 * extent[0], -2.0 * extent[1], 2.0 * extent[2])
);
return {
position,
target,
near: 0.1,
far: vec3.distance(position, target) * 12
};
}
|