|
@@ -40,6 +40,7 @@ import { Passes } from './passes/passes';
|
|
import { shallowEqual } from '../mol-util';
|
|
import { shallowEqual } from '../mol-util';
|
|
import { MarkingParams } from './passes/marking';
|
|
import { MarkingParams } from './passes/marking';
|
|
import { GraphicsRenderVariantsBlended, GraphicsRenderVariantsWboit } from '../mol-gl/webgl/render-item';
|
|
import { GraphicsRenderVariantsBlended, GraphicsRenderVariantsWboit } from '../mol-gl/webgl/render-item';
|
|
|
|
+import { degToRad, radToDeg } from '../mol-math/misc';
|
|
|
|
|
|
export const Canvas3DParams = {
|
|
export const Canvas3DParams = {
|
|
camera: PD.Group({
|
|
camera: PD.Group({
|
|
@@ -49,6 +50,7 @@ export const Canvas3DParams = {
|
|
on: PD.Group(StereoCameraParams),
|
|
on: PD.Group(StereoCameraParams),
|
|
off: PD.Group({})
|
|
off: PD.Group({})
|
|
}, { cycle: true, hideIf: p => p?.mode !== 'perspective' }),
|
|
}, { cycle: true, hideIf: p => p?.mode !== 'perspective' }),
|
|
|
|
+ fov: PD.Numeric(45, { min: 10, max: 130, step: 1 }, { label: 'Field of View' }),
|
|
manualReset: PD.Boolean(false, { isHidden: true }),
|
|
manualReset: PD.Boolean(false, { isHidden: true }),
|
|
}, { pivot: 'mode' }),
|
|
}, { pivot: 'mode' }),
|
|
cameraFog: PD.MappedStatic('on', {
|
|
cameraFog: PD.MappedStatic('on', {
|
|
@@ -303,7 +305,7 @@ namespace Canvas3D {
|
|
position: Vec3.create(0, 0, 100),
|
|
position: Vec3.create(0, 0, 100),
|
|
mode: p.camera.mode,
|
|
mode: p.camera.mode,
|
|
fog: p.cameraFog.name === 'on' ? p.cameraFog.params.intensity : 0,
|
|
fog: p.cameraFog.name === 'on' ? p.cameraFog.params.intensity : 0,
|
|
- clipFar: p.cameraClipping.far
|
|
|
|
|
|
+ fov: degToRad(p.camera.fov),
|
|
}, { x, y, width, height }, { pixelScale: attribs.pixelScale });
|
|
}, { x, y, width, height }, { pixelScale: attribs.pixelScale });
|
|
const stereoCamera = new StereoCamera(camera, p.camera.stereo.params);
|
|
const stereoCamera = new StereoCamera(camera, p.camera.stereo.params);
|
|
|
|
|
|
@@ -658,6 +660,7 @@ namespace Canvas3D {
|
|
mode: camera.state.mode,
|
|
mode: camera.state.mode,
|
|
helper: { ...helper.camera.props },
|
|
helper: { ...helper.camera.props },
|
|
stereo: { ...p.camera.stereo },
|
|
stereo: { ...p.camera.stereo },
|
|
|
|
+ fov: Math.round(radToDeg(camera.state.fov)),
|
|
manualReset: !!p.camera.manualReset
|
|
manualReset: !!p.camera.manualReset
|
|
},
|
|
},
|
|
cameraFog: camera.state.fog > 0
|
|
cameraFog: camera.state.fog > 0
|
|
@@ -771,6 +774,10 @@ namespace Canvas3D {
|
|
if (props.camera && props.camera.mode !== undefined && props.camera.mode !== camera.state.mode) {
|
|
if (props.camera && props.camera.mode !== undefined && props.camera.mode !== camera.state.mode) {
|
|
cameraState.mode = props.camera.mode;
|
|
cameraState.mode = props.camera.mode;
|
|
}
|
|
}
|
|
|
|
+ const oldFov = Math.round(radToDeg(camera.state.fov));
|
|
|
|
+ if (props.camera && props.camera.fov !== undefined && props.camera.fov !== oldFov) {
|
|
|
|
+ cameraState.fov = degToRad(props.camera.fov);
|
|
|
|
+ }
|
|
if (props.cameraFog !== undefined && props.cameraFog.params) {
|
|
if (props.cameraFog !== undefined && props.cameraFog.params) {
|
|
const newFog = props.cameraFog.name === 'on' ? props.cameraFog.params.intensity : 0;
|
|
const newFog = props.cameraFog.name === 'on' ? props.cameraFog.params.intensity : 0;
|
|
if (newFog !== camera.state.fog) cameraState.fog = newFog;
|
|
if (newFog !== camera.state.fog) cameraState.fog = newFog;
|