123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /**
- * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
- import { Vec3 } from 'mol-math/linear-algebra'
- import InputObserver from 'mol-util/input/input-observer'
- import Renderer from 'mol-gl/renderer'
- import { RenderObject } from 'mol-gl/scene'
- import TrackballControls from './controls/trackball'
- import { Viewport } from './camera/util'
- import { PerspectiveCamera } from './camera/perspective'
- import { resizeCanvas } from './util';
- interface Viewer {
- add: (o: RenderObject) => void
- remove: (o: RenderObject) => void
- clear: () => void
- draw: () => void
- requestDraw: () => void
- animate: () => void
- handleResize: () => void
- dispose: () => void
- }
- namespace Viewer {
- export function create(canvas: HTMLCanvasElement, container: Element): Viewer {
- const input = InputObserver.create(canvas)
- input.resize.subscribe(handleResize)
- const camera = PerspectiveCamera.create({
- near: 0.01,
- far: 10000,
- position: Vec3.create(0, 0, 50)
- })
- const controls = TrackballControls.create(input, camera, {
- })
- const renderer = Renderer.create(canvas, camera)
- let drawPending = false
- function draw () {
- controls.update()
- camera.update()
- renderer.draw()
- }
- function requestDraw () {
- if (drawPending) return
- drawPending = true
- window.requestAnimationFrame(draw)
- }
- function animate () {
- draw()
- window.requestAnimationFrame(animate)
- }
- handleResize()
- return {
- add: (o: RenderObject) => {
- renderer.add(o)
- },
- remove: (o: RenderObject) => {
- renderer.remove(o)
- },
- clear: () => {
- renderer.clear()
- },
- draw,
- requestDraw,
- animate,
- handleResize,
- dispose: () => {
- input.dispose()
- controls.dispose()
- renderer.dispose()
- }
- }
- function handleResize() {
- resizeCanvas(canvas, container)
- const viewport = { x: 0, y: 0, width: canvas.width, height: canvas.height }
- renderer.setViewport(viewport)
- Viewport.copy(camera.viewport, viewport)
- Viewport.copy(controls.viewport, viewport)
- }
- }
- }
- export default Viewer
|