From 87acdc4896546e9f3a7d84fdb5517f78857a5fb9 Mon Sep 17 00:00:00 2001 From: ErSan Date: Sun, 5 Oct 2025 22:08:51 +0800 Subject: [PATCH] =?UTF-8?q?style(resize):=20=E4=B8=89=E7=BB=B4=E8=A7=86?= =?UTF-8?q?=E5=8F=A3Resize=E7=9B=91=E5=90=AC=E6=94=BE=E5=85=A5sdk=E4=B8=AD?= =?UTF-8?q?=EF=BC=9B3DTiles=E6=A8=A1=E5=9E=8B=E6=96=B0=E5=A2=9E=E8=A7=86?= =?UTF-8?q?=E5=8F=A3Resize=E6=97=B6=E7=9A=84=E8=87=AA=E5=8A=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/editor/layouts/viewport/Viewport.vue | 11 ----------- packages/editor/src/views/preview/index.vue | 11 ----------- packages/sdk/lib/core/preview/Preview.ts | 2 +- packages/sdk/lib/core/viewer/Viewer.ts | 15 +++++++++++++-- packages/sdk/lib/core/viewer/modules/Signals.ts | 2 ++ .../sdk/lib/core/viewer/modules/TilesManage.ts | 16 ++++++++++++++-- 6 files changed, 30 insertions(+), 27 deletions(-) diff --git a/packages/editor/src/views/editor/layouts/viewport/Viewport.vue b/packages/editor/src/views/editor/layouts/viewport/Viewport.vue index f165d93..743821d 100644 --- a/packages/editor/src/views/editor/layouts/viewport/Viewport.vue +++ b/packages/editor/src/views/editor/layouts/viewport/Viewport.vue @@ -53,17 +53,6 @@ onMounted(async () => { // 注册astral editor内置插件 installBuiltinPlugin(window.viewer); - - //监听视窗变化(节流) - let timer: NodeJS.Timeout | null = null; - const resizeObserver = new ResizeObserver(() => { - if (timer) return; - timer = setTimeout(function () { - Hooks.useDispatchSignal("sceneResize", viewportRef.value.offsetWidth, viewportRef.value.offsetHeight); - timer = null; - }, 16) - }); - resizeObserver.observe(viewportRef.value); }) onBeforeUnmount(() => { diff --git a/packages/editor/src/views/preview/index.vue b/packages/editor/src/views/preview/index.vue index b477b4c..7431751 100644 --- a/packages/editor/src/views/preview/index.vue +++ b/packages/editor/src/views/preview/index.vue @@ -44,17 +44,6 @@ onMounted(async () => { await nextTick(); - //监听视窗变化(节流) - let timer: NodeJS.Timeout | null = null; - const resizeObserver = new ResizeObserver(() => { - if (timer) return; - timer = setTimeout(() => { - Hooks.useDispatchSignal("sceneResize", viewportRef.value.offsetWidth, viewportRef.value.offsetHeight); - timer = null; - }, 16) - }); - resizeObserver.observe(viewportRef.value); - await init(); }); diff --git a/packages/sdk/lib/core/preview/Preview.ts b/packages/sdk/lib/core/preview/Preview.ts index 84857dc..60e9b67 100644 --- a/packages/sdk/lib/core/preview/Preview.ts +++ b/packages/sdk/lib/core/preview/Preview.ts @@ -155,7 +155,7 @@ export default class Preview extends THREE.EventDispatcher { // 粒子系统 particleSystem: new ParticleSystem(this), // 3d tiles管理器 - tilesManage: new TilesManage(this.scene), + tilesManage: new TilesManage(this.scene,this.camera,this.renderer), } } diff --git a/packages/sdk/lib/core/viewer/Viewer.ts b/packages/sdk/lib/core/viewer/Viewer.ts index 81fc661..57e7671 100644 --- a/packages/sdk/lib/core/viewer/Viewer.ts +++ b/packages/sdk/lib/core/viewer/Viewer.ts @@ -236,6 +236,17 @@ export default class Viewer extends THREE.EventDispatcher { this.initEvent(); + //监听视窗变化(节流) + let timer: NodeJS.Timeout | null = null; + const resizeObserver = new ResizeObserver(() => { + if (timer) return; + timer = setTimeout(() => { + useDispatchSignal("sceneResize", this.container.offsetWidth, this.container.offsetHeight); + timer = null; + }, 16) + }); + resizeObserver.observe(this.container); + useDispatchSignal("viewerInitCompleted", this); } @@ -478,7 +489,7 @@ export default class Viewer extends THREE.EventDispatcher { // 拖拽 dragControl: new Drag(this), // 3d tiles管理器 - tilesManage: new TilesManage(this.scene), + tilesManage: new TilesManage(this.scene,this.camera,this.renderer), } if (this.enableEdit) { @@ -786,7 +797,7 @@ export default class Viewer extends THREE.EventDispatcher { } /** - * 更新宽高比 + * 更新相机宽高比 */ updateAspectRatio() { for (const uuid in App.cameras) { diff --git a/packages/sdk/lib/core/viewer/modules/Signals.ts b/packages/sdk/lib/core/viewer/modules/Signals.ts index 61be0a2..8714e26 100644 --- a/packages/sdk/lib/core/viewer/modules/Signals.ts +++ b/packages/sdk/lib/core/viewer/modules/Signals.ts @@ -436,6 +436,8 @@ export class Signals { this.viewer.modules.viewHelper.update(); + this.viewer.modules.tilesManage.resize(); + App.csm.updateFrustums(); this.render(); } diff --git a/packages/sdk/lib/core/viewer/modules/TilesManage.ts b/packages/sdk/lib/core/viewer/modules/TilesManage.ts index 4fedbfa..cbea0c8 100644 --- a/packages/sdk/lib/core/viewer/modules/TilesManage.ts +++ b/packages/sdk/lib/core/viewer/modules/TilesManage.ts @@ -6,12 +6,14 @@ */ import {TilesRenderer} from "3d-tiles-renderer"; import type {PriorityQueue} from "3d-tiles-renderer"; -import {Mesh, Sphere, Vector3, Quaternion, Material, Scene} from 'three'; +import {Mesh, Sphere, Vector3, Quaternion, Material, Scene, PerspectiveCamera, WebGLRenderer} from 'three'; import { MeshBVH,StaticGeometryGenerator,/*CENTER*/ } from 'three-mesh-bvh'; import Tiles from "@/core/objects/Tile.ts"; export class TilesManage { private scene:Scene; + private camera: PerspectiveCamera; + private renderer: WebGLRenderer; protected _tilesMergeMesh:Mesh | null = null; @@ -34,8 +36,10 @@ export class TilesManage { needRender = false; - constructor(scene:Scene) { + constructor(scene:Scene,camera:PerspectiveCamera,renderer:WebGLRenderer) { this.scene = scene; + this.camera = camera; + this.renderer = renderer; } /** @@ -136,6 +140,14 @@ export class TilesManage { tiles.dispose(); } + resize(){ + for (const tiles of this.tilesMap.values()) { + tiles.forEach(_tiles => { + _tiles.renderer.setResolutionFromRenderer(this.camera, this.renderer); + }); + } + } + update() { for (const tiles of this.tilesMap.values()) { tiles.forEach(tile => tile.update());