UNPKG

@jscad/regl-renderer

Version:

Renderer for JSCAD Geometries

59 lines (49 loc) 1.58 kB
const mat4 = require('gl-mat4') const vec3 = require('gl-vec3') const cameraState = { view: mat4.identity(new Float32Array(16)), projection: mat4.identity(new Float32Array(16)), matrix: mat4.identity(new Float32Array(16)), // not sure if needed near: 1, // 0.01, far: 18000, up: [0, 0, 1], // distance: 10.0, // not sure if needed eye: new Float32Array(3), // same as position position: [450, 550, 700], target: [0, 0, 0], fov: Math.PI / 4, aspect: 1, viewport: [0, 0, 0, 0], projectionType: 'perspective' } const cameraProps = {} const defaults = Object.assign({}, cameraState, cameraProps) const setProjection = (output, camera, input) => { // context.viewportWidth / context.viewportHeight, const aspect = input.width / input.height const projection = mat4.perspective(mat4.identity([]), camera.fov, aspect, camera.near, camera.far) const viewport = [0, 0, input.width, input.height] // optional mutation const out = output || {} out.projection = projection out.aspect = aspect out.viewport = viewport return out } const update = (output, camera) => { if (!camera) { camera = output } const { position, target, up } = camera const offset = vec3.subtract([], position, target) const newPosition = vec3.add(vec3.create(), target, offset) const newView = mat4.lookAt(mat4.create(), newPosition, target, up) // optional mutation const out = output || {} out.position = newPosition out.view = newView return out } module.exports = { cameraState, cameraProps, defaults, setProjection, update }