Skip to content

Commit c0528e8

Browse files
committed
Поддержка зума, с возможными границами из конфигурации
1 parent 6ed7ea9 commit c0528e8

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
* `0.9.28`
2+
* ✨ Поддержка зума через колесико мыши
23
* 🔨 Поддержка вращения камеры при работе с редактором
34
* `0.9.27`
45
* 🐛 Исправлена возможность хостить экскурсию по подпути

ReleaseNotes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
* ✨ Поддержка зума через колесико мыши
12
* 🔨 Поддержка вращения камеры при работе с редактором

src/Configuration/Configuration.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ export class Configuration {
33
public logoUrl: string;
44
public bottomImage: BottomImageConfiguration | null = null;
55
public forceInputProfileWebXr: string | null;
6+
public minFOV?: number;
7+
public maxFOV?: number;
68
}
79
export class BottomImageConfiguration {
810
public url: string;

src/Viewer.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import "@babylonjs/core/Culling/ray"; // нужно для работы клик
3838
import { PrefetchResourcesManager } from "./Models/PrefetchResourcesManager";
3939
import { WebXRInterface } from "./AsyncModules/AsyncModuleInterfaces";
4040
import { PlayAudioHelper } from "./WorkWithAudio/PlayAudioHelper";
41-
import { KeyboardEventTypes } from "@babylonjs/core";
41+
import { KeyboardEventTypes, PointerEventTypes } from "@babylonjs/core";
4242

4343
export class Viewer {
4444
private currentImage: DynamicPhotoDome | null = null;
@@ -68,7 +68,7 @@ export class Viewer {
6868

6969
private backgroundRadius = 500;
7070

71-
public createScene() {
71+
public createScene(minFov?: number, maxFov?: number) {
7272
const canvas = document.querySelector("#renderCanvas") as HTMLCanvasElement;
7373
this.canvas = canvas;
7474
const engine = new Engine(canvas, true, {
@@ -145,6 +145,7 @@ export class Viewer {
145145
camera.angularSensibility = -10000;
146146
camera.attachControl(canvas, true);
147147
camera.inputs.addGamepad();
148+
camera.fov = 1;
148149
this.freeCamera = camera;
149150

150151
if ("xr" in window.navigator) {
@@ -173,6 +174,20 @@ export class Viewer {
173174

174175
scene.actionManager = new ActionManager(scene);
175176

177+
scene.onPointerObservable.add(e => {
178+
const event = e.event as WheelEvent;
179+
let fov = this.freeCamera.fov;
180+
if (event.deltaY > 0) {
181+
fov += 0.1;
182+
} else {
183+
fov -= 0.1;
184+
}
185+
minFov = minFov ?? 0.8;
186+
maxFov = maxFov ?? 1.8;
187+
fov = Math.max(Math.min(fov, maxFov), minFov);
188+
this.freeCamera.fov = fov;
189+
}, PointerEventTypes.POINTERWHEEL);
190+
176191
if (BuildConfiguration.NeedDebugLayer) {
177192
import("./AsyncModules/InspectorLogic").then((module) => {
178193
module.InspectorLogic.registerInspector(scene);

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ document.addEventListener("DOMContentLoaded", async () => {
1616
}
1717
const configuration = (await configurationResponse.json()) as Configuration;
1818
const viewer = new Viewer(configuration);
19-
viewer.createScene();
19+
viewer.createScene(configuration.minFOV, configuration.maxFOV);
2020
(document as any).viewer = viewer;
2121
try {
2222
if (configuration.sceneUrl && !configuration.sceneUrl.endsWith("/")) {

0 commit comments

Comments
 (0)