lythreeframe 1.2.27 → 1.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1539,12 +1539,34 @@ class Viewport {
1539
1539
  this.outlineObjects = [];
1540
1540
  this.postProcessParam = Object.assign({}, postProcessParam);
1541
1541
  this._app = app;
1542
- let element = null;
1543
1542
  if (viewportParam.elementId) {
1544
- element = document.getElementById(viewportParam.elementId);
1545
- if (!element) {
1546
- throw Error(`Can not find domElement which id is ${viewportParam.elementId}`);
1543
+ this._canvas = document.getElementById(viewportParam.elementId);
1544
+ }
1545
+ this.createRenderer(rendererParam);
1546
+ if (viewportParam.isLabelRendererNeeded) {
1547
+ this.createLabelRenderer();
1548
+ }
1549
+ if (this._canvas) {
1550
+ this.resizeObserver = new ResizeObserver((entries) => {
1551
+ for (let entry of entries) {
1552
+ if (entry.contentBoxSize) {
1553
+ this.onWindowResize();
1554
+ }
1555
+ }
1556
+ });
1557
+ this.resizeObserver.observe(this._canvas);
1558
+ }
1559
+ this.app.onCameraChangedDelegate.add(() => {
1560
+ this.setupPostProcess();
1561
+ });
1562
+ }
1563
+ createRenderer(rendererParam) {
1564
+ const element = this._canvas;
1565
+ if (this._renderer) {
1566
+ if (element) {
1567
+ element.removeChild(this._renderer.domElement);
1547
1568
  }
1569
+ this._renderer.dispose();
1548
1570
  }
1549
1571
  let width = element ? element.clientWidth : 512;
1550
1572
  let height = element ? element.clientHeight : 512;
@@ -1564,34 +1586,29 @@ class Viewport {
1564
1586
  this._renderer.shadowMap.type = rendererParam.shadowMapType;
1565
1587
  this._renderer.toneMapping = rendererParam.toneMapping;
1566
1588
  this._renderer.toneMappingExposure = rendererParam.toneMappingExposure;
1567
- if (viewportParam.isLabelRendererNeeded) {
1568
- this.labelRenderer = new Addons_js.CSS2DRenderer();
1569
- this.labelRenderer.setSize(width, height);
1570
- this.labelRenderer.domElement.style.pointerEvents = 'none';
1571
- this.labelRenderer.domElement.style.position = 'absolute';
1572
- this.labelRenderer.domElement.style.top = '0px';
1573
- this.labelRenderer.domElement.className = 'scene-labelRenderer';
1589
+ if (element) {
1590
+ element.appendChild(this._renderer.domElement);
1591
+ }
1592
+ }
1593
+ createLabelRenderer() {
1594
+ const element = this._canvas;
1595
+ if (this.labelRenderer) {
1574
1596
  if (element) {
1575
- element.appendChild(this.labelRenderer.domElement);
1597
+ element.removeChild(this.labelRenderer.domElement);
1576
1598
  }
1599
+ this.labelRenderer.dispose();
1577
1600
  }
1601
+ let width = element ? element.clientWidth : 512;
1602
+ let height = element ? element.clientHeight : 512;
1603
+ this.labelRenderer = new Addons_js.CSS2DRenderer();
1604
+ this.labelRenderer.setSize(width, height);
1605
+ this.labelRenderer.domElement.style.pointerEvents = 'none';
1606
+ this.labelRenderer.domElement.style.position = 'absolute';
1607
+ this.labelRenderer.domElement.style.top = '0px';
1608
+ this.labelRenderer.domElement.className = 'scene-labelRenderer';
1578
1609
  if (element) {
1579
- element.appendChild(this._renderer.domElement);
1580
- this._canvas = element;
1581
- }
1582
- if (this._canvas) {
1583
- this.resizeObserver = new ResizeObserver((entries) => {
1584
- for (let entry of entries) {
1585
- if (entry.contentBoxSize) {
1586
- this.onWindowResize();
1587
- }
1588
- }
1589
- });
1590
- this.resizeObserver.observe(this._canvas);
1610
+ element.appendChild(this.labelRenderer.domElement);
1591
1611
  }
1592
- this.app.onCameraChangedDelegate.add(() => {
1593
- this.setupPostProcess();
1594
- });
1595
1612
  }
1596
1613
  init() {
1597
1614
  this.setupPostProcess();
@@ -1693,6 +1710,10 @@ class Viewport {
1693
1710
  this.postProcessParam.steps = steps;
1694
1711
  this.setupPostProcess();
1695
1712
  }
1713
+ updateRendererSettings(data) {
1714
+ this.createRenderer(data);
1715
+ this.markRenderStateDirty();
1716
+ }
1696
1717
  // updateBloomPass(params: BloomParam)
1697
1718
  // {
1698
1719
  // this.postProcessParam.bloom = { ...params };
@@ -1906,6 +1927,9 @@ class Pawn {
1906
1927
  }
1907
1928
  stopFocusing() {
1908
1929
  }
1930
+ getFocuingData() {
1931
+ return null;
1932
+ }
1909
1933
  destroy() {
1910
1934
  }
1911
1935
  }
@@ -2002,6 +2026,23 @@ class Orbital extends Pawn {
2002
2026
  }
2003
2027
  });
2004
2028
  }
2029
+ getFocuingData() {
2030
+ if (!this.control || !this.camera) {
2031
+ return null;
2032
+ }
2033
+ // 相机当前位置
2034
+ const position = this.camera.position.clone();
2035
+ // 相机朝向
2036
+ const quaternion = this.camera.quaternion.clone();
2037
+ // 计算相机到目标的距离
2038
+ const target = this.control.target.clone();
2039
+ const distance = position.distanceTo(target);
2040
+ return {
2041
+ position,
2042
+ quaternion,
2043
+ distance
2044
+ };
2045
+ }
2005
2046
  stopFocusing() {
2006
2047
  if (this.anim) {
2007
2048
  this.anim.kill();
@@ -2194,59 +2235,90 @@ class Controller {
2194
2235
 
2195
2236
  class CameraFactory {
2196
2237
  static createCamera(param) {
2197
- let cam = null;
2198
- if ("fov" in param.param && "aspect" in param.param) {
2199
- cam = new webgpu.PerspectiveCamera(param.param.fov, param.param.aspect, param.near, param.far);
2200
- }
2201
- if ("left" in param.param && "right" in param.param && "top" in param.param && "bottom" in param.param) {
2202
- cam = new webgpu.OrthographicCamera(param.param.left, param.param.right, param.param.top, param.param.bottom, param.near, param.far);
2238
+ try {
2239
+ switch (param.type) {
2240
+ case "Perspective":
2241
+ {
2242
+ let data = param;
2243
+ return new webgpu.PerspectiveCamera(data.fov, data.aspect, data.near, data.far);
2244
+ }
2245
+ case "Orthographic":
2246
+ {
2247
+ let data = param;
2248
+ return new webgpu.OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far);
2249
+ }
2250
+ default:
2251
+ {
2252
+ throw new Error("Invalid camera type");
2253
+ }
2254
+ }
2203
2255
  }
2204
- if (!cam) {
2205
- console.error("create camera failed");
2206
- debugger;
2207
- throw Error("create camera failed");
2256
+ catch (error) {
2257
+ console.warn("[CameraFactory]Error occurred while creating camera: ", error);
2258
+ console.warn("[CameraFactory]Create default perspective camera instead");
2259
+ return new webgpu.PerspectiveCamera(50, 1, 0.1, 1000);
2208
2260
  }
2209
- return cam;
2210
2261
  }
2211
2262
  static updataCamera(param, camera) {
2212
- if ("fov" in param.param && "aspect" in param.param) {
2213
- if (camera instanceof webgpu.PerspectiveCamera) {
2214
- camera.near = param.near;
2215
- camera.far = param.far;
2216
- camera.fov = param.param.fov;
2217
- camera.aspect = param.param.aspect;
2218
- return camera;
2219
- }
2220
- else {
2221
- return new webgpu.PerspectiveCamera(param.param.fov, param.param.aspect, param.near, param.far);
2263
+ try {
2264
+ switch (param.type) {
2265
+ case "Perspective":
2266
+ {
2267
+ let data = param;
2268
+ if (camera instanceof webgpu.PerspectiveCamera) {
2269
+ camera.near = data.near;
2270
+ camera.far = data.far;
2271
+ camera.fov = data.fov;
2272
+ camera.aspect = data.aspect;
2273
+ return camera;
2274
+ }
2275
+ return new webgpu.PerspectiveCamera(data.fov, data.aspect, data.near, data.far);
2276
+ }
2277
+ case "Orthographic":
2278
+ {
2279
+ let data = param;
2280
+ if (camera instanceof webgpu.OrthographicCamera) {
2281
+ camera.near = data.near;
2282
+ camera.far = data.far;
2283
+ camera.left = data.left;
2284
+ camera.right = data.right;
2285
+ camera.top = data.top;
2286
+ camera.bottom = data.bottom;
2287
+ return camera;
2288
+ }
2289
+ return new webgpu.OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far);
2290
+ }
2291
+ default:
2292
+ {
2293
+ throw new Error("Invalid camera type");
2294
+ }
2222
2295
  }
2223
2296
  }
2224
- if ("left" in param.param && "right" in param.param && "top" in param.param && "bottom" in param.param) {
2225
- if (camera instanceof webgpu.OrthographicCamera) {
2226
- camera.near = param.near;
2227
- camera.far = param.far;
2228
- camera.left = param.param.left;
2229
- camera.right = param.param.right;
2230
- camera.top = param.param.top;
2231
- camera.bottom = param.param.bottom;
2232
- return camera;
2233
- }
2234
- else {
2235
- return new webgpu.OrthographicCamera(param.param.left, param.param.right, param.param.top, param.param.bottom, param.near, param.far);
2236
- }
2297
+ catch (error) {
2298
+ console.warn("[CameraFactory]Error occurred while updating camera: ", error);
2299
+ console.warn("[CameraFactory]Update Failed. Return old camera instead");
2300
+ return camera;
2237
2301
  }
2238
- return camera;
2239
2302
  }
2240
2303
  }
2241
2304
 
2242
- const DefaultCameraParam = {
2305
+ const DefaultPerspectiveCameraParam = {
2243
2306
  near: 0.1,
2244
2307
  far: 1000,
2245
- param: {
2246
- fov: 50,
2247
- aspect: 1,
2248
- }
2308
+ type: "Perspective",
2309
+ fov: 50,
2310
+ aspect: 1,
2311
+ };
2312
+ const DefaultOrthographicCameraParam = {
2313
+ type: "Orthographic",
2314
+ near: 0.1,
2315
+ far: 1000,
2316
+ left: -1,
2317
+ right: 1,
2318
+ top: 1,
2319
+ bottom: -1,
2249
2320
  };
2321
+ const DefaultCameraParam = JSON.parse(JSON.stringify(DefaultPerspectiveCameraParam));
2250
2322
 
2251
2323
  const DefaultViewportParam = {
2252
2324
  elementId: null,
@@ -3140,6 +3212,22 @@ class FirstPerson extends Pawn {
3140
3212
  super(controller);
3141
3213
  this._control = new PointerLockControls_js.PointerLockControls(controller.camera, controller.viewPort.canvas);
3142
3214
  }
3215
+ getFocuingData() {
3216
+ var _a;
3217
+ if (!this._control || !((_a = this.controller) === null || _a === void 0 ? void 0 : _a.camera)) {
3218
+ return null;
3219
+ }
3220
+ // 获取相机当前位置和朝向
3221
+ const position = this.controller.camera.position.clone();
3222
+ const quaternion = this.controller.camera.quaternion.clone();
3223
+ // 计算相机到控制目标点的距离(FirstPerson 通常没有 target,这里设为 0)
3224
+ const distance = 0;
3225
+ return {
3226
+ position,
3227
+ quaternion,
3228
+ distance
3229
+ };
3230
+ }
3143
3231
  }
3144
3232
 
3145
3233
  function debounce(func, delay) {
@@ -3352,7 +3440,9 @@ exports.DefaultCameraParam = DefaultCameraParam;
3352
3440
  exports.DefaultDOFParam = DefaultDOFParam;
3353
3441
  exports.DefaultDenoiseParam = DefaultDenoiseParam;
3354
3442
  exports.DefaultGTAOParam = DefaultGTAOParam;
3443
+ exports.DefaultOrthographicCameraParam = DefaultOrthographicCameraParam;
3355
3444
  exports.DefaultOutlineParams = DefaultOutlineParams;
3445
+ exports.DefaultPerspectiveCameraParam = DefaultPerspectiveCameraParam;
3356
3446
  exports.DefaultPostProcessParam = DefaultPostProcessParam;
3357
3447
  exports.DefaultRendererParameters = DefaultRendererParameters;
3358
3448
  exports.DefaultSSRParam = DefaultSSRParam;
@@ -1,4 +1,4 @@
1
- import { MathUtils, Object3D, Vector3, Box3, Quaternion, Euler, Matrix4, Mesh, LoadingManager, BufferGeometry, Texture, FileLoader, Material, NearestFilter, WebGPURenderer, PostProcessing, Color, Vector2, Raycaster, PerspectiveCamera, OrthographicCamera, Clock, DirectionalLight, MeshStandardMaterial, BoxGeometry, MeshBasicMaterial, PlaneGeometry, SphereGeometry } from 'three/webgpu';
1
+ import { MathUtils, Object3D, Vector3, Box3, Quaternion, Euler, Matrix4, Mesh, LoadingManager, BufferGeometry, Texture, FileLoader, Material, NearestFilter, WebGPURenderer, PostProcessing, Color, Vector2, Raycaster, OrthographicCamera, PerspectiveCamera, Clock, DirectionalLight, MeshStandardMaterial, BoxGeometry, MeshBasicMaterial, PlaneGeometry, SphereGeometry } from 'three/webgpu';
2
2
  import { GLTFLoader, DRACOLoader, CSS2DRenderer, OrbitControls } from 'three/examples/jsm/Addons.js';
3
3
  import { pass, mrt, output, uniform, metalness, transformedNormalView, time, oscSine } from 'three/tsl';
4
4
  import { dof } from 'three/addons/tsl/display/DepthOfFieldNode.js';
@@ -1537,12 +1537,34 @@ class Viewport {
1537
1537
  this.outlineObjects = [];
1538
1538
  this.postProcessParam = Object.assign({}, postProcessParam);
1539
1539
  this._app = app;
1540
- let element = null;
1541
1540
  if (viewportParam.elementId) {
1542
- element = document.getElementById(viewportParam.elementId);
1543
- if (!element) {
1544
- throw Error(`Can not find domElement which id is ${viewportParam.elementId}`);
1541
+ this._canvas = document.getElementById(viewportParam.elementId);
1542
+ }
1543
+ this.createRenderer(rendererParam);
1544
+ if (viewportParam.isLabelRendererNeeded) {
1545
+ this.createLabelRenderer();
1546
+ }
1547
+ if (this._canvas) {
1548
+ this.resizeObserver = new ResizeObserver((entries) => {
1549
+ for (let entry of entries) {
1550
+ if (entry.contentBoxSize) {
1551
+ this.onWindowResize();
1552
+ }
1553
+ }
1554
+ });
1555
+ this.resizeObserver.observe(this._canvas);
1556
+ }
1557
+ this.app.onCameraChangedDelegate.add(() => {
1558
+ this.setupPostProcess();
1559
+ });
1560
+ }
1561
+ createRenderer(rendererParam) {
1562
+ const element = this._canvas;
1563
+ if (this._renderer) {
1564
+ if (element) {
1565
+ element.removeChild(this._renderer.domElement);
1545
1566
  }
1567
+ this._renderer.dispose();
1546
1568
  }
1547
1569
  let width = element ? element.clientWidth : 512;
1548
1570
  let height = element ? element.clientHeight : 512;
@@ -1562,34 +1584,29 @@ class Viewport {
1562
1584
  this._renderer.shadowMap.type = rendererParam.shadowMapType;
1563
1585
  this._renderer.toneMapping = rendererParam.toneMapping;
1564
1586
  this._renderer.toneMappingExposure = rendererParam.toneMappingExposure;
1565
- if (viewportParam.isLabelRendererNeeded) {
1566
- this.labelRenderer = new CSS2DRenderer();
1567
- this.labelRenderer.setSize(width, height);
1568
- this.labelRenderer.domElement.style.pointerEvents = 'none';
1569
- this.labelRenderer.domElement.style.position = 'absolute';
1570
- this.labelRenderer.domElement.style.top = '0px';
1571
- this.labelRenderer.domElement.className = 'scene-labelRenderer';
1587
+ if (element) {
1588
+ element.appendChild(this._renderer.domElement);
1589
+ }
1590
+ }
1591
+ createLabelRenderer() {
1592
+ const element = this._canvas;
1593
+ if (this.labelRenderer) {
1572
1594
  if (element) {
1573
- element.appendChild(this.labelRenderer.domElement);
1595
+ element.removeChild(this.labelRenderer.domElement);
1574
1596
  }
1597
+ this.labelRenderer.dispose();
1575
1598
  }
1599
+ let width = element ? element.clientWidth : 512;
1600
+ let height = element ? element.clientHeight : 512;
1601
+ this.labelRenderer = new CSS2DRenderer();
1602
+ this.labelRenderer.setSize(width, height);
1603
+ this.labelRenderer.domElement.style.pointerEvents = 'none';
1604
+ this.labelRenderer.domElement.style.position = 'absolute';
1605
+ this.labelRenderer.domElement.style.top = '0px';
1606
+ this.labelRenderer.domElement.className = 'scene-labelRenderer';
1576
1607
  if (element) {
1577
- element.appendChild(this._renderer.domElement);
1578
- this._canvas = element;
1579
- }
1580
- if (this._canvas) {
1581
- this.resizeObserver = new ResizeObserver((entries) => {
1582
- for (let entry of entries) {
1583
- if (entry.contentBoxSize) {
1584
- this.onWindowResize();
1585
- }
1586
- }
1587
- });
1588
- this.resizeObserver.observe(this._canvas);
1608
+ element.appendChild(this.labelRenderer.domElement);
1589
1609
  }
1590
- this.app.onCameraChangedDelegate.add(() => {
1591
- this.setupPostProcess();
1592
- });
1593
1610
  }
1594
1611
  init() {
1595
1612
  this.setupPostProcess();
@@ -1691,6 +1708,10 @@ class Viewport {
1691
1708
  this.postProcessParam.steps = steps;
1692
1709
  this.setupPostProcess();
1693
1710
  }
1711
+ updateRendererSettings(data) {
1712
+ this.createRenderer(data);
1713
+ this.markRenderStateDirty();
1714
+ }
1694
1715
  // updateBloomPass(params: BloomParam)
1695
1716
  // {
1696
1717
  // this.postProcessParam.bloom = { ...params };
@@ -1904,6 +1925,9 @@ class Pawn {
1904
1925
  }
1905
1926
  stopFocusing() {
1906
1927
  }
1928
+ getFocuingData() {
1929
+ return null;
1930
+ }
1907
1931
  destroy() {
1908
1932
  }
1909
1933
  }
@@ -2000,6 +2024,23 @@ class Orbital extends Pawn {
2000
2024
  }
2001
2025
  });
2002
2026
  }
2027
+ getFocuingData() {
2028
+ if (!this.control || !this.camera) {
2029
+ return null;
2030
+ }
2031
+ // 相机当前位置
2032
+ const position = this.camera.position.clone();
2033
+ // 相机朝向
2034
+ const quaternion = this.camera.quaternion.clone();
2035
+ // 计算相机到目标的距离
2036
+ const target = this.control.target.clone();
2037
+ const distance = position.distanceTo(target);
2038
+ return {
2039
+ position,
2040
+ quaternion,
2041
+ distance
2042
+ };
2043
+ }
2003
2044
  stopFocusing() {
2004
2045
  if (this.anim) {
2005
2046
  this.anim.kill();
@@ -2192,59 +2233,90 @@ class Controller {
2192
2233
 
2193
2234
  class CameraFactory {
2194
2235
  static createCamera(param) {
2195
- let cam = null;
2196
- if ("fov" in param.param && "aspect" in param.param) {
2197
- cam = new PerspectiveCamera(param.param.fov, param.param.aspect, param.near, param.far);
2198
- }
2199
- if ("left" in param.param && "right" in param.param && "top" in param.param && "bottom" in param.param) {
2200
- cam = new OrthographicCamera(param.param.left, param.param.right, param.param.top, param.param.bottom, param.near, param.far);
2236
+ try {
2237
+ switch (param.type) {
2238
+ case "Perspective":
2239
+ {
2240
+ let data = param;
2241
+ return new PerspectiveCamera(data.fov, data.aspect, data.near, data.far);
2242
+ }
2243
+ case "Orthographic":
2244
+ {
2245
+ let data = param;
2246
+ return new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far);
2247
+ }
2248
+ default:
2249
+ {
2250
+ throw new Error("Invalid camera type");
2251
+ }
2252
+ }
2201
2253
  }
2202
- if (!cam) {
2203
- console.error("create camera failed");
2204
- debugger;
2205
- throw Error("create camera failed");
2254
+ catch (error) {
2255
+ console.warn("[CameraFactory]Error occurred while creating camera: ", error);
2256
+ console.warn("[CameraFactory]Create default perspective camera instead");
2257
+ return new PerspectiveCamera(50, 1, 0.1, 1000);
2206
2258
  }
2207
- return cam;
2208
2259
  }
2209
2260
  static updataCamera(param, camera) {
2210
- if ("fov" in param.param && "aspect" in param.param) {
2211
- if (camera instanceof PerspectiveCamera) {
2212
- camera.near = param.near;
2213
- camera.far = param.far;
2214
- camera.fov = param.param.fov;
2215
- camera.aspect = param.param.aspect;
2216
- return camera;
2217
- }
2218
- else {
2219
- return new PerspectiveCamera(param.param.fov, param.param.aspect, param.near, param.far);
2261
+ try {
2262
+ switch (param.type) {
2263
+ case "Perspective":
2264
+ {
2265
+ let data = param;
2266
+ if (camera instanceof PerspectiveCamera) {
2267
+ camera.near = data.near;
2268
+ camera.far = data.far;
2269
+ camera.fov = data.fov;
2270
+ camera.aspect = data.aspect;
2271
+ return camera;
2272
+ }
2273
+ return new PerspectiveCamera(data.fov, data.aspect, data.near, data.far);
2274
+ }
2275
+ case "Orthographic":
2276
+ {
2277
+ let data = param;
2278
+ if (camera instanceof OrthographicCamera) {
2279
+ camera.near = data.near;
2280
+ camera.far = data.far;
2281
+ camera.left = data.left;
2282
+ camera.right = data.right;
2283
+ camera.top = data.top;
2284
+ camera.bottom = data.bottom;
2285
+ return camera;
2286
+ }
2287
+ return new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far);
2288
+ }
2289
+ default:
2290
+ {
2291
+ throw new Error("Invalid camera type");
2292
+ }
2220
2293
  }
2221
2294
  }
2222
- if ("left" in param.param && "right" in param.param && "top" in param.param && "bottom" in param.param) {
2223
- if (camera instanceof OrthographicCamera) {
2224
- camera.near = param.near;
2225
- camera.far = param.far;
2226
- camera.left = param.param.left;
2227
- camera.right = param.param.right;
2228
- camera.top = param.param.top;
2229
- camera.bottom = param.param.bottom;
2230
- return camera;
2231
- }
2232
- else {
2233
- return new OrthographicCamera(param.param.left, param.param.right, param.param.top, param.param.bottom, param.near, param.far);
2234
- }
2295
+ catch (error) {
2296
+ console.warn("[CameraFactory]Error occurred while updating camera: ", error);
2297
+ console.warn("[CameraFactory]Update Failed. Return old camera instead");
2298
+ return camera;
2235
2299
  }
2236
- return camera;
2237
2300
  }
2238
2301
  }
2239
2302
 
2240
- const DefaultCameraParam = {
2303
+ const DefaultPerspectiveCameraParam = {
2241
2304
  near: 0.1,
2242
2305
  far: 1000,
2243
- param: {
2244
- fov: 50,
2245
- aspect: 1,
2246
- }
2306
+ type: "Perspective",
2307
+ fov: 50,
2308
+ aspect: 1,
2309
+ };
2310
+ const DefaultOrthographicCameraParam = {
2311
+ type: "Orthographic",
2312
+ near: 0.1,
2313
+ far: 1000,
2314
+ left: -1,
2315
+ right: 1,
2316
+ top: 1,
2317
+ bottom: -1,
2247
2318
  };
2319
+ const DefaultCameraParam = JSON.parse(JSON.stringify(DefaultPerspectiveCameraParam));
2248
2320
 
2249
2321
  const DefaultViewportParam = {
2250
2322
  elementId: null,
@@ -3138,6 +3210,22 @@ class FirstPerson extends Pawn {
3138
3210
  super(controller);
3139
3211
  this._control = new PointerLockControls(controller.camera, controller.viewPort.canvas);
3140
3212
  }
3213
+ getFocuingData() {
3214
+ var _a;
3215
+ if (!this._control || !((_a = this.controller) === null || _a === void 0 ? void 0 : _a.camera)) {
3216
+ return null;
3217
+ }
3218
+ // 获取相机当前位置和朝向
3219
+ const position = this.controller.camera.position.clone();
3220
+ const quaternion = this.controller.camera.quaternion.clone();
3221
+ // 计算相机到控制目标点的距离(FirstPerson 通常没有 target,这里设为 0)
3222
+ const distance = 0;
3223
+ return {
3224
+ position,
3225
+ quaternion,
3226
+ distance
3227
+ };
3228
+ }
3141
3229
  }
3142
3230
 
3143
3231
  function debounce(func, delay) {
@@ -3338,4 +3426,4 @@ class TransformGizmo extends Pawn {
3338
3426
  }
3339
3427
  }
3340
3428
 
3341
- export { Actor, AssetManager, AttachmentRules, BoxActor, BoxComponent, Controller, DefaultAAParams, DefaultAppParam, DefaultBloomParam, DefaultCameraParam, DefaultDOFParam, DefaultDenoiseParam, DefaultGTAOParam, DefaultOutlineParams, DefaultPostProcessParam, DefaultRendererParameters, DefaultSSRParam, DefaultSkyParam, DefaultViewportParam, DefaultWorldParam, Delegate, DirectionalLightActor, DirectionalLightComponent, FirstPerson, GeometryAssetPointer, LabelComponent, LevelActor, LevelComponent, MaterialAssetPointer, MeshComponent, Orbital, PlaneActor, PlaneComponent, PostProcessStepType, SceneComponent, SkyActor, SkyComponent, SphereComponent, TAssetPointer, TSmartPointer, TextureAssetPointer, ThreeJsApp, ThreeObjectLibrary, TransformGizmo, Viewport, WebGPUPostProcessFactory, World };
3429
+ export { Actor, AssetManager, AttachmentRules, BoxActor, BoxComponent, Controller, DefaultAAParams, DefaultAppParam, DefaultBloomParam, DefaultCameraParam, DefaultDOFParam, DefaultDenoiseParam, DefaultGTAOParam, DefaultOrthographicCameraParam, DefaultOutlineParams, DefaultPerspectiveCameraParam, DefaultPostProcessParam, DefaultRendererParameters, DefaultSSRParam, DefaultSkyParam, DefaultViewportParam, DefaultWorldParam, Delegate, DirectionalLightActor, DirectionalLightComponent, FirstPerson, GeometryAssetPointer, LabelComponent, LevelActor, LevelComponent, MaterialAssetPointer, MeshComponent, Orbital, PlaneActor, PlaneComponent, PostProcessStepType, SceneComponent, SkyActor, SkyComponent, SphereComponent, TAssetPointer, TSmartPointer, TextureAssetPointer, ThreeJsApp, ThreeObjectLibrary, TransformGizmo, Viewport, WebGPUPostProcessFactory, World };
package/dist/index.d.ts CHANGED
@@ -10,8 +10,8 @@ export { ThreeJsApp } from "./lythreeframe/ThreeJsApp";
10
10
  export { Controller } from "./lythreeframe/Frame/Controller";
11
11
  export { Viewport } from "./lythreeframe/Frame/Viewport";
12
12
  export { World } from "./lythreeframe/Frame/World";
13
- export type { CameraParam } from './lythreeframe/Frame/Parameters/CameraParameter';
14
- export { DefaultCameraParam } from './lythreeframe/Frame/Parameters/CameraParameter';
13
+ export type { CameraParam, PerspectiveCameraParam, OrthographicCameraParam } from './lythreeframe/Frame/Parameters/CameraParameter';
14
+ export { DefaultCameraParam, DefaultPerspectiveCameraParam, DefaultOrthographicCameraParam } from './lythreeframe/Frame/Parameters/CameraParameter';
15
15
  export type { AppParam, AppClass } from "./lythreeframe/Frame/Parameters/AppParameter";
16
16
  export { DefaultAppParam } from "./lythreeframe/Frame/Parameters/AppParameter";
17
17
  export type { ViewportParam } from './lythreeframe/Frame/Parameters/ViewportParameters';
@@ -1,16 +1,22 @@
1
1
  export interface CameraParam {
2
- near: number;
3
- far: number;
4
- param: PerspectiveCameraParam | OrthographicCameraParam;
2
+ type: "Perspective" | "Orthographic";
5
3
  }
6
- export interface PerspectiveCameraParam {
4
+ export interface PerspectiveCameraParam extends CameraParam {
5
+ type: "Perspective";
7
6
  fov: number;
8
7
  aspect: number;
8
+ near: number;
9
+ far: number;
9
10
  }
10
- export interface OrthographicCameraParam {
11
+ export interface OrthographicCameraParam extends CameraParam {
12
+ type: "Orthographic";
11
13
  left: number;
12
14
  right: number;
13
15
  top: number;
14
16
  bottom: number;
17
+ near: number;
18
+ far: number;
15
19
  }
20
+ export declare const DefaultPerspectiveCameraParam: PerspectiveCameraParam;
21
+ export declare const DefaultOrthographicCameraParam: OrthographicCameraParam;
16
22
  export declare const DefaultCameraParam: CameraParam;
@@ -18,9 +18,12 @@ export declare class Viewport {
18
18
  private postProcessing;
19
19
  private outlineObjects;
20
20
  constructor(app: ThreeJsApp, viewportParam: ViewportParam, rendererParam: RendererParameters, postProcessParam: PostProcessParam);
21
+ protected createRenderer(rendererParam: RendererParameters): void;
22
+ protected createLabelRenderer(): void;
21
23
  init(): void;
22
24
  setupPostProcess(): void;
23
25
  updatePostProcess(steps: PostProcessStepParam[]): void;
26
+ updateRendererSettings(data: RendererParameters): void;
24
27
  addOutlineObject(obj: Object3D): void;
25
28
  setOutlineObjects(objects: Object3D[]): void;
26
29
  removeOutlineObject(obj: Object3D): void;
@@ -1,5 +1,11 @@
1
1
  import { Pawn } from "./Pawn";
2
2
  import { Controller } from "../../Frame/Controller";
3
+ import { Vector3, Quaternion } from "three/webgpu";
3
4
  export declare class FirstPerson extends Pawn {
4
5
  constructor(controller: Controller);
6
+ getFocuingData(): {
7
+ position: Vector3;
8
+ quaternion: Quaternion;
9
+ distance: number;
10
+ } | null;
5
11
  }
@@ -13,5 +13,10 @@ export declare class Orbital extends Pawn {
13
13
  unpossess(): void;
14
14
  onChange(): void;
15
15
  focusTo(targetPos: Vector3, targetQuat: Quaternion | Euler, distance: number, time: number, onGoing?: (() => void) | null, onFinished?: (() => void) | null): void;
16
+ getFocuingData(): {
17
+ position: Vector3;
18
+ quaternion: Quaternion | Euler;
19
+ distance: number;
20
+ } | null;
16
21
  stopFocusing(): void;
17
22
  }
@@ -13,5 +13,10 @@ export declare abstract class Pawn {
13
13
  unpossess(): void;
14
14
  focusTo(targetPos: Vector3, targetQuat: Quaternion | Euler, distance: number, time: number, onGoing?: (() => void) | null, onFinished?: (() => void) | null): void;
15
15
  stopFocusing(): void;
16
+ getFocuingData(): {
17
+ position: Vector3;
18
+ quaternion: Quaternion | Euler;
19
+ distance: number;
20
+ } | null;
16
21
  destroy(): void;
17
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lythreeframe",
3
- "version": "1.2.27",
3
+ "version": "1.2.30",
4
4
  "description": "Three.js 封装",
5
5
  "main": "dist/bundle.cjs.js",
6
6
  "module": "dist/bundle.esm.js",