diff --git a/CHANGELOG.md b/CHANGELOG.md index ef65c121041a724cf0d981d36b268fb81603cfe1..8869441480405447c0a237008e35b3b673fe49d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] - Integration of Dual depth peeling - OIT method +- Stereo camera improvements + - Fix param updates not applied + - Better param ranges and description + - Add timer.mark for left/right camera ## [v3.17.0] - 2022-09-11 diff --git a/src/mol-canvas3d/camera/stereo.ts b/src/mol-canvas3d/camera/stereo.ts index 0111427191417c5e81137c60bff2f1144b38b560..4742dd93f1bdb4d8b69e6c866af6be6e7d3e4d44 100644 --- a/src/mol-canvas3d/camera/stereo.ts +++ b/src/mol-canvas3d/camera/stereo.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2020-2022 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> @@ -13,8 +13,8 @@ import { Camera, ICamera } from '../camera'; import { Viewport } from './util'; export const StereoCameraParams = { - eyeSeparation: PD.Numeric(0.064, { min: 0.01, max: 0.5, step: 0.001 }), - focus: PD.Numeric(10, { min: 1, max: 100, step: 0.01 }), + eyeSeparation: PD.Numeric(0.062, { min: 0.02, max: 0.1, step: 0.001 }, { description: 'Distance between left and right camera.' }), + focus: PD.Numeric(10, { min: 1, max: 20, step: 0.1 }, { description: 'Apparent object distance.' }), }; export const DefaultStereoCameraProps = PD.getDefaultValues(StereoCameraParams); export type StereoCameraProps = PD.Values<typeof StereoCameraParams> diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index 834f86d161791fb968498b1a40a602fae4796ab3..24223dca18e018e7a326bfc59225cbb60879278d 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -826,7 +826,10 @@ namespace Canvas3D { if (props.camera?.helper) helper.camera.setProps(props.camera.helper); if (props.camera?.manualReset !== undefined) p.camera.manualReset = props.camera.manualReset; - if (props.camera?.stereo !== undefined) Object.assign(p.camera.stereo, props.camera.stereo); + if (props.camera?.stereo !== undefined) { + Object.assign(p.camera.stereo, props.camera.stereo); + stereoCamera.setProps(p.camera.stereo.params); + } if (props.cameraResetDurationMs !== undefined) p.cameraResetDurationMs = props.cameraResetDurationMs; if (props.transparentBackground !== undefined) p.transparentBackground = props.transparentBackground; if (props.dpoitIterations !== undefined) p.dpoitIterations = props.dpoitIterations; diff --git a/src/mol-canvas3d/passes/draw.ts b/src/mol-canvas3d/passes/draw.ts index 747b500572ae636adfbfb30081295cd9bfcfecbf..b286e584036a1500a4b4b09c49658fccec204c42 100644 --- a/src/mol-canvas3d/passes/draw.ts +++ b/src/mol-canvas3d/passes/draw.ts @@ -390,8 +390,12 @@ export class DrawPass { renderer.setPixelRatio(this.webgl.pixelRatio); if (StereoCamera.is(camera)) { + if (isTimingMode) this.webgl.timer.mark('StereoCamera.left'); this._render(renderer, camera.left, scene, helper, toDrawingBuffer, transparentBackground, props); + if (isTimingMode) this.webgl.timer.markEnd('StereoCamera.left'); + if (isTimingMode) this.webgl.timer.mark('StereoCamera.right'); this._render(renderer, camera.right, scene, helper, toDrawingBuffer, transparentBackground, props); + if (isTimingMode) this.webgl.timer.markEnd('StereoCamera.right'); } else { this._render(renderer, camera, scene, helper, toDrawingBuffer, transparentBackground, props); }