UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

63 lines 2.97 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { AViewerPluginSync } from '../../viewer'; import { uiFolderContainer, uiToggle } from 'uiconfig.js'; let VirtualCamerasPlugin = class VirtualCamerasPlugin extends AViewerPluginSync { constructor(enabled = true) { super(); this.enabled = true; this.toJSON = undefined; // disable serialization this.cameras = []; this._viewerListeners = { preRender: () => { if (this.isDisabled() || !this._viewer) return; const viewer = this._viewer; for (const v of this.cameras) { if (!v.enabled) continue; const camera = v.camera; try { this.dispatchEvent({ type: 'preRenderCamera', camera: v }); viewer.scene.renderCamera = camera; viewer.renderManager.render(viewer.scene, false); const source = viewer.renderManager.composer.readBuffer.texture; this.dispatchEvent({ type: 'preBlitCamera', camera: v, readBuffer: source }); viewer.renderManager.blit(v.target, { source }); this.dispatchEvent({ type: 'postRenderCamera', camera: v }); } catch (e) { viewer.console.error(e); v.enabled = false; if (viewer.debug) throw e; } } }, }; this.enabled = enabled; } addCamera(camera) { if (!this._viewer) throw 'Plugin not added to viewer'; const target = this._viewer.renderManager.composerTarget.clone(true); target.name = camera.name + '_virtualCamTarget'; const vCam = { camera, target, enabled: true }; this.cameras.push(vCam); // todo: track for jitter in progressive or something else for jittering return vCam; } }; VirtualCamerasPlugin.PluginType = 'VirtualCamerasPlugin'; __decorate([ uiToggle() ], VirtualCamerasPlugin.prototype, "enabled", void 0); VirtualCamerasPlugin = __decorate([ uiFolderContainer('Virtual Cameras') ], VirtualCamerasPlugin); export { VirtualCamerasPlugin }; //# sourceMappingURL=VirtualCamerasPlugin.js.map