@zephyr3d/scene 0.9.21 → 0.9.23
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.
- package/dist/animation/joint_dynamics/collision.js +1 -7
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +2 -17
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +2 -20
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +14 -60
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +3 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/app/app.js +23 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/scriptregistry.js +16 -53
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -0
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +22 -0
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +3 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +3 -3
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/camera/camera.js +398 -45
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +69 -2
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9100 -8712
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +3 -3
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +8 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +17 -10
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +33 -11
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +44 -12
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +149 -14
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +7 -4
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +5 -1
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +186 -11
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/skin.js +2 -2
- package/dist/material/skin.js.map +1 -1
- package/dist/material/terrain-cm.js +5 -5
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/water.js +6 -4
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +54 -4
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +41 -0
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/posteffect.js +51 -0
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +7 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +3 -3
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +1196 -0
- package/dist/posteffect/ssgi.js.map +1 -0
- package/dist/posteffect/ssr.js +83 -45
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +137 -49
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +5 -4
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +15 -3
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +2 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +12 -6
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable_mixin.js +8 -5
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +10 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +298 -5
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/gpu_picking.js +7 -5
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +28 -19
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +18 -4
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +37 -4
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +8 -3
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +20 -48
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +18 -58
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +89 -115
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
- package/dist/render/rendergraph/history_resource_manager.js +74 -140
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +7 -5
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/render_context.js +19 -0
- package/dist/render/rendergraph/render_context.js.map +1 -0
- package/dist/render/rendergraph/render_pipeline.js +315 -0
- package/dist/render/rendergraph/render_pipeline.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +158 -141
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +267 -0
- package/dist/render/rendergraph/scene_render_context.js.map +1 -0
- package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
- package/dist/render/rendergraph/types.js +19 -31
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +3 -3
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +10 -6
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +197 -35
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +4 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +2 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +10 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +61 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +178 -10
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/meshdrawable.js +89 -2
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +2 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +2 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +2 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +34 -1
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +2 -1
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +2 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +2 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +5 -4
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +10 -3
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/shadow.js +96 -29
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +322 -154
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shadow/esm.js +13 -8
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -12
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -12
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +17 -11
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +20 -2
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +10 -3
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +16 -13
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +10 -8
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/utility/physical.js +74 -0
- package/dist/utility/physical.js.map +1 -0
- package/dist/utility/rendermipmap.js +2 -2
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/manager.js +3 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +3 -1
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +3 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +598 -2
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +180 -9
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +43 -3
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +3 -1
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +3 -1
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +3 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +2 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +70 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +3 -1
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +3 -1
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +3 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/values.js +2 -3
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Camera } from './camera.js';
|
|
2
2
|
import { Matrix4x4 } from '@zephyr3d/base';
|
|
3
3
|
import { getDevice, getEngine } from '../app/api.js';
|
|
4
|
+
import { calculateVerticalFov } from '../utility/physical.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Perspective camera class
|
|
@@ -12,6 +13,11 @@ import { getDevice, getEngine } from '../app/api.js';
|
|
|
12
13
|
_aspect;
|
|
13
14
|
_autoAspect;
|
|
14
15
|
_window;
|
|
16
|
+
_projectionMode;
|
|
17
|
+
_focalLengthMm;
|
|
18
|
+
_sensorWidthMm;
|
|
19
|
+
_sensorHeightMm;
|
|
20
|
+
_sensorFit;
|
|
15
21
|
/**
|
|
16
22
|
* Creates an instance of PerspectiveCamera
|
|
17
23
|
* @param scene - The scene that the camera belongs to.
|
|
@@ -27,8 +33,66 @@ import { getDevice, getEngine } from '../app/api.js';
|
|
|
27
33
|
this._far = far;
|
|
28
34
|
this._autoAspect = true;
|
|
29
35
|
this._window = null;
|
|
36
|
+
this._projectionMode = 'fov';
|
|
37
|
+
this._focalLengthMm = 50;
|
|
38
|
+
this._sensorWidthMm = 36;
|
|
39
|
+
this._sensorHeightMm = 24;
|
|
40
|
+
this._sensorFit = 'horizontal';
|
|
30
41
|
this._invalidate(true);
|
|
31
42
|
}
|
|
43
|
+
/** Perspective projection parameterization. */ get projectionMode() {
|
|
44
|
+
return this._projectionMode;
|
|
45
|
+
}
|
|
46
|
+
set projectionMode(val) {
|
|
47
|
+
const mode = val === 'physical' ? 'physical' : 'fov';
|
|
48
|
+
if (mode !== this._projectionMode) {
|
|
49
|
+
this._projectionMode = mode;
|
|
50
|
+
this._invalidate(true);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Physical focal length in millimeters. */ get focalLengthMm() {
|
|
54
|
+
return this._focalLengthMm;
|
|
55
|
+
}
|
|
56
|
+
set focalLengthMm(val) {
|
|
57
|
+
const focalLength = Math.max(0.0001, val);
|
|
58
|
+
if (focalLength !== this._focalLengthMm) {
|
|
59
|
+
this._focalLengthMm = focalLength;
|
|
60
|
+
this._invalidate(true);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Physical sensor width in millimeters. */ get sensorWidthMm() {
|
|
64
|
+
return this._sensorWidthMm;
|
|
65
|
+
}
|
|
66
|
+
set sensorWidthMm(val) {
|
|
67
|
+
const width = Math.max(0.0001, val);
|
|
68
|
+
if (width !== this._sensorWidthMm) {
|
|
69
|
+
this._sensorWidthMm = width;
|
|
70
|
+
this._invalidate(true);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Physical sensor height in millimeters. */ get sensorHeightMm() {
|
|
74
|
+
return this._sensorHeightMm;
|
|
75
|
+
}
|
|
76
|
+
set sensorHeightMm(val) {
|
|
77
|
+
const height = Math.max(0.0001, val);
|
|
78
|
+
if (height !== this._sensorHeightMm) {
|
|
79
|
+
this._sensorHeightMm = height;
|
|
80
|
+
this._invalidate(true);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** Sensor dimension kept fixed while fitting the viewport aspect ratio. */ get sensorFit() {
|
|
84
|
+
return this._sensorFit;
|
|
85
|
+
}
|
|
86
|
+
set sensorFit(val) {
|
|
87
|
+
const fit = val === 'vertical' ? 'vertical' : 'horizontal';
|
|
88
|
+
if (fit !== this._sensorFit) {
|
|
89
|
+
this._sensorFit = fit;
|
|
90
|
+
this._invalidate(true);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/** Effective vertical field of view used by the projection matrix. */ get effectiveFovY() {
|
|
94
|
+
return this._projectionMode === 'physical' ? calculateVerticalFov(this._focalLengthMm, this._sensorWidthMm, this._sensorHeightMm, this._aspect, this._sensorFit) : this._fovY;
|
|
95
|
+
}
|
|
32
96
|
/** Sub-window of the frustum */ get window() {
|
|
33
97
|
return this._window;
|
|
34
98
|
}
|
|
@@ -94,6 +158,7 @@ import { getDevice, getEngine } from '../app/api.js';
|
|
|
94
158
|
/**
|
|
95
159
|
* {@inheritDoc Camera.setPerspective}
|
|
96
160
|
*/ setPerspective(fovY, aspect, zNear, zFar) {
|
|
161
|
+
this._projectionMode = 'fov';
|
|
97
162
|
this._aspect = aspect;
|
|
98
163
|
this._fovY = fovY;
|
|
99
164
|
this._near = zNear;
|
|
@@ -118,6 +183,7 @@ import { getDevice, getEngine } from '../app/api.js';
|
|
|
118
183
|
super.setProjectionMatrix(matrix);
|
|
119
184
|
this._aspect = matrix.getAspect();
|
|
120
185
|
this._fovY = matrix.getFov();
|
|
186
|
+
this._projectionMode = 'fov';
|
|
121
187
|
this._near = matrix.getNearPlane();
|
|
122
188
|
this._far = matrix.getFarPlane();
|
|
123
189
|
} else {
|
|
@@ -132,10 +198,11 @@ import { getDevice, getEngine } from '../app/api.js';
|
|
|
132
198
|
super.render(scene);
|
|
133
199
|
}
|
|
134
200
|
/** @internal */ _computeProj() {
|
|
201
|
+
const fovY = this.effectiveFovY;
|
|
135
202
|
if (this.adapted) {
|
|
136
|
-
this.calcAdaptedPerspectiveProjection(
|
|
203
|
+
this.calcAdaptedPerspectiveProjection(fovY, this._near, this._far, this._projMatrix);
|
|
137
204
|
} else {
|
|
138
|
-
const h = this._near * Math.tan(
|
|
205
|
+
const h = this._near * Math.tan(fovY * 0.5);
|
|
139
206
|
const w = h * this._aspect;
|
|
140
207
|
let left = -w;
|
|
141
208
|
let right = w;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perspectivecamera.js","sources":["../../src/camera/perspectivecamera.ts"],"sourcesContent":["import { Camera } from './camera';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\nimport { getDevice, getEngine } from '../app/api';\r\n\r\n/**\r\n * Perspective camera class\r\n * @public\r\n */\r\nexport class PerspectiveCamera extends Camera {\r\n /** @internal */\r\n private _near: number;\r\n private _far: number;\r\n private _fovY: number;\r\n private _aspect: number;\r\n private _autoAspect: boolean;\r\n private _window: Nullable<number[]>;\r\n /**\r\n * Creates an instance of PerspectiveCamera\r\n * @param scene - The scene that the camera belongs to.\r\n * @param fovY - A radian value indicates the field of view in Y axis\r\n * @param aspect - Aspect ratio of the perspective transform\r\n * @param near - The near clip plane\r\n * @param far - The far clip plane\r\n */\r\n constructor(scene: Nullable<Scene>, fovY = Math.PI / 3, near = 1, far = 1000, aspect = 1) {\r\n super(scene);\r\n this._fovY = fovY;\r\n this._aspect = aspect;\r\n this._near = near;\r\n this._far = far;\r\n this._autoAspect = true;\r\n this._window = null;\r\n this._invalidate(true);\r\n }\r\n /** Sub-window of the frustum */\r\n get window(): Nullable<Immutable<number[]>> {\r\n return this._window;\r\n }\r\n set window(val: Nullable<number[]>) {\r\n this._window = val?.slice() ?? null;\r\n this._invalidate(true);\r\n }\r\n /** Automatically calculate aspect ratio before render according to current viewport */\r\n get autoAspect() {\r\n return this._autoAspect;\r\n }\r\n set autoAspect(val) {\r\n this._autoAspect = !!val;\r\n }\r\n /** The near clip plane */\r\n get near() {\r\n return this._near;\r\n }\r\n set near(val) {\r\n if (val !== this._near) {\r\n this._near = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** The far clip plane */\r\n get far() {\r\n return this._far;\r\n }\r\n set far(val) {\r\n if (val !== this._far) {\r\n this._far = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Radian value indicates the field of view in Y axis */\r\n get fovY() {\r\n return this._fovY;\r\n }\r\n set fovY(val) {\r\n if (val !== this._fovY) {\r\n this._fovY = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Aspect ratio of the perspective transform */\r\n get aspect() {\r\n return this._aspect;\r\n }\r\n set aspect(val) {\r\n if (val !== this._aspect) {\r\n this._aspect = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Adjust aspect ratio according to viewport settings of the camera */\r\n adjustAspectRatio() {\r\n if (this.viewport) {\r\n this.aspect = this.viewport[2] / this.viewport[3];\r\n } else {\r\n if (!this.adapted || getDevice().getFramebuffer()) {\r\n const vp = getDevice().getViewport();\r\n this.aspect = vp.width / vp.height;\r\n } else {\r\n const transform = getEngine().screen.transform;\r\n this.aspect = transform.viewportWidth / transform.viewportHeight;\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Camera.setPerspective}\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number) {\r\n this._aspect = aspect;\r\n this._fovY = fovY;\r\n this._near = zNear;\r\n this._far = zFar;\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Not valid for PerspectiveCamera\r\n *\r\n * @remarks\r\n * This method is only valid for {@link Camera} class or {@link OrthoCamera} class.\r\n */\r\n setOrtho(_left: number, _right: number, _bottom: number, _top: number, _near: number, _far: number): this {\r\n throw new Error(`setOrtho() not allowed on PerspectiveCamera`);\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4) {\r\n if (matrix !== this._projMatrix) {\r\n if (matrix?.isPerspective()) {\r\n super.setProjectionMatrix(matrix);\r\n this._aspect = matrix.getAspect();\r\n this._fovY = matrix.getFov();\r\n this._near = matrix.getNearPlane();\r\n this._far = matrix.getFarPlane();\r\n } else {\r\n throw new Error(\r\n `PerspectiveCamera.setProjectionMatrix(): param is not a perspective projection matrix`\r\n );\r\n }\r\n }\r\n }\r\n /** {@inheritDoc Camera.render} */\r\n render(scene: Scene) {\r\n if (this._autoAspect) {\r\n this.adjustAspectRatio();\r\n }\r\n super.render(scene);\r\n }\r\n /** @internal */\r\n protected _computeProj() {\r\n if (this.adapted) {\r\n this.calcAdaptedPerspectiveProjection(this._fovY, this._near, this._far, this._projMatrix);\r\n } else {\r\n const h = this._near * Math.tan(this._fovY * 0.5);\r\n const w = h * this._aspect;\r\n let left = -w;\r\n let right = w;\r\n let top = h;\r\n let bottom = -h;\r\n if (this._window) {\r\n const width = right - left;\r\n const height = top - bottom;\r\n left += width * this._window[0];\r\n bottom += height * this._window[1];\r\n right = left + width * this._window[2];\r\n top = bottom + height * this._window[3];\r\n }\r\n this._projMatrix.frustum(left, right, bottom, top, this._near, this._far);\r\n }\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n }\r\n}\r\n"],"names":["PerspectiveCamera","Camera","_far","_fovY","_aspect","_autoAspect","_window","scene","fovY","Math","PI","near","far","aspect","_near","_invalidate","window","val","slice","autoAspect","adjustAspectRatio","viewport","adapted","getDevice","getFramebuffer","vp","getViewport","width","height","transform","getEngine","screen","viewportWidth","viewportHeight","setPerspective","zNear","zFar","setOrtho","_left","_right","_bottom","_top","Error","setProjectionMatrix","matrix","_projMatrix","isPerspective","getAspect","getFov","getNearPlane","getFarPlane","render","calcAdaptedPerspectiveProjection","h","tan","w","left","right","top","bottom","frustum","Matrix4x4","invert","_invProjMatrix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"perspectivecamera.js","sources":["../../src/camera/perspectivecamera.ts"],"sourcesContent":["import { Camera } from './camera';\r\nimport type { Scene } from '../scene/scene';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\nimport { getDevice, getEngine } from '../app/api';\r\nimport { calculateVerticalFov } from '../utility/physical';\r\nimport type { CameraProjectionMode, CameraSensorFit } from '../utility/physical';\r\n\r\n/**\r\n * Perspective camera class\r\n * @public\r\n */\r\nexport class PerspectiveCamera extends Camera {\r\n /** @internal */\r\n private _near: number;\r\n private _far: number;\r\n private _fovY: number;\r\n private _aspect: number;\r\n private _autoAspect: boolean;\r\n private _window: Nullable<number[]>;\r\n private _projectionMode: CameraProjectionMode;\r\n private _focalLengthMm: number;\r\n private _sensorWidthMm: number;\r\n private _sensorHeightMm: number;\r\n private _sensorFit: CameraSensorFit;\r\n /**\r\n * Creates an instance of PerspectiveCamera\r\n * @param scene - The scene that the camera belongs to.\r\n * @param fovY - A radian value indicates the field of view in Y axis\r\n * @param aspect - Aspect ratio of the perspective transform\r\n * @param near - The near clip plane\r\n * @param far - The far clip plane\r\n */\r\n constructor(scene: Nullable<Scene>, fovY = Math.PI / 3, near = 1, far = 1000, aspect = 1) {\r\n super(scene);\r\n this._fovY = fovY;\r\n this._aspect = aspect;\r\n this._near = near;\r\n this._far = far;\r\n this._autoAspect = true;\r\n this._window = null;\r\n this._projectionMode = 'fov';\r\n this._focalLengthMm = 50;\r\n this._sensorWidthMm = 36;\r\n this._sensorHeightMm = 24;\r\n this._sensorFit = 'horizontal';\r\n this._invalidate(true);\r\n }\r\n /** Perspective projection parameterization. */\r\n get projectionMode() {\r\n return this._projectionMode;\r\n }\r\n set projectionMode(val: CameraProjectionMode) {\r\n const mode = val === 'physical' ? 'physical' : 'fov';\r\n if (mode !== this._projectionMode) {\r\n this._projectionMode = mode;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Physical focal length in millimeters. */\r\n get focalLengthMm() {\r\n return this._focalLengthMm;\r\n }\r\n set focalLengthMm(val: number) {\r\n const focalLength = Math.max(0.0001, val);\r\n if (focalLength !== this._focalLengthMm) {\r\n this._focalLengthMm = focalLength;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Physical sensor width in millimeters. */\r\n get sensorWidthMm() {\r\n return this._sensorWidthMm;\r\n }\r\n set sensorWidthMm(val: number) {\r\n const width = Math.max(0.0001, val);\r\n if (width !== this._sensorWidthMm) {\r\n this._sensorWidthMm = width;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Physical sensor height in millimeters. */\r\n get sensorHeightMm() {\r\n return this._sensorHeightMm;\r\n }\r\n set sensorHeightMm(val: number) {\r\n const height = Math.max(0.0001, val);\r\n if (height !== this._sensorHeightMm) {\r\n this._sensorHeightMm = height;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Sensor dimension kept fixed while fitting the viewport aspect ratio. */\r\n get sensorFit() {\r\n return this._sensorFit;\r\n }\r\n set sensorFit(val: CameraSensorFit) {\r\n const fit = val === 'vertical' ? 'vertical' : 'horizontal';\r\n if (fit !== this._sensorFit) {\r\n this._sensorFit = fit;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Effective vertical field of view used by the projection matrix. */\r\n get effectiveFovY() {\r\n return this._projectionMode === 'physical'\r\n ? calculateVerticalFov(\r\n this._focalLengthMm,\r\n this._sensorWidthMm,\r\n this._sensorHeightMm,\r\n this._aspect,\r\n this._sensorFit\r\n )\r\n : this._fovY;\r\n }\r\n /** Sub-window of the frustum */\r\n get window(): Nullable<Immutable<number[]>> {\r\n return this._window;\r\n }\r\n set window(val: Nullable<number[]>) {\r\n this._window = val?.slice() ?? null;\r\n this._invalidate(true);\r\n }\r\n /** Automatically calculate aspect ratio before render according to current viewport */\r\n get autoAspect() {\r\n return this._autoAspect;\r\n }\r\n set autoAspect(val) {\r\n this._autoAspect = !!val;\r\n }\r\n /** The near clip plane */\r\n get near() {\r\n return this._near;\r\n }\r\n set near(val) {\r\n if (val !== this._near) {\r\n this._near = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** The far clip plane */\r\n get far() {\r\n return this._far;\r\n }\r\n set far(val) {\r\n if (val !== this._far) {\r\n this._far = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Radian value indicates the field of view in Y axis */\r\n get fovY() {\r\n return this._fovY;\r\n }\r\n set fovY(val) {\r\n if (val !== this._fovY) {\r\n this._fovY = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Aspect ratio of the perspective transform */\r\n get aspect() {\r\n return this._aspect;\r\n }\r\n set aspect(val) {\r\n if (val !== this._aspect) {\r\n this._aspect = val;\r\n this._invalidate(true);\r\n }\r\n }\r\n /** Adjust aspect ratio according to viewport settings of the camera */\r\n adjustAspectRatio() {\r\n if (this.viewport) {\r\n this.aspect = this.viewport[2] / this.viewport[3];\r\n } else {\r\n if (!this.adapted || getDevice().getFramebuffer()) {\r\n const vp = getDevice().getViewport();\r\n this.aspect = vp.width / vp.height;\r\n } else {\r\n const transform = getEngine().screen.transform;\r\n this.aspect = transform.viewportWidth / transform.viewportHeight;\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Camera.setPerspective}\r\n */\r\n setPerspective(fovY: number, aspect: number, zNear: number, zFar: number) {\r\n this._projectionMode = 'fov';\r\n this._aspect = aspect;\r\n this._fovY = fovY;\r\n this._near = zNear;\r\n this._far = zFar;\r\n this._invalidate(true);\r\n return this;\r\n }\r\n /**\r\n * Not valid for PerspectiveCamera\r\n *\r\n * @remarks\r\n * This method is only valid for {@link Camera} class or {@link OrthoCamera} class.\r\n */\r\n setOrtho(_left: number, _right: number, _bottom: number, _top: number, _near: number, _far: number): this {\r\n throw new Error(`setOrtho() not allowed on PerspectiveCamera`);\r\n }\r\n /**\r\n * Setup a projection matrix for the camera\r\n * @param matrix - The projection matrix\r\n */\r\n setProjectionMatrix(matrix: Matrix4x4) {\r\n if (matrix !== this._projMatrix) {\r\n if (matrix?.isPerspective()) {\r\n super.setProjectionMatrix(matrix);\r\n this._aspect = matrix.getAspect();\r\n this._fovY = matrix.getFov();\r\n this._projectionMode = 'fov';\r\n this._near = matrix.getNearPlane();\r\n this._far = matrix.getFarPlane();\r\n } else {\r\n throw new Error(\r\n `PerspectiveCamera.setProjectionMatrix(): param is not a perspective projection matrix`\r\n );\r\n }\r\n }\r\n }\r\n /** {@inheritDoc Camera.render} */\r\n render(scene: Scene) {\r\n if (this._autoAspect) {\r\n this.adjustAspectRatio();\r\n }\r\n super.render(scene);\r\n }\r\n /** @internal */\r\n protected _computeProj() {\r\n const fovY = this.effectiveFovY;\r\n if (this.adapted) {\r\n this.calcAdaptedPerspectiveProjection(fovY, this._near, this._far, this._projMatrix);\r\n } else {\r\n const h = this._near * Math.tan(fovY * 0.5);\r\n const w = h * this._aspect;\r\n let left = -w;\r\n let right = w;\r\n let top = h;\r\n let bottom = -h;\r\n if (this._window) {\r\n const width = right - left;\r\n const height = top - bottom;\r\n left += width * this._window[0];\r\n bottom += height * this._window[1];\r\n right = left + width * this._window[2];\r\n top = bottom + height * this._window[3];\r\n }\r\n this._projMatrix.frustum(left, right, bottom, top, this._near, this._far);\r\n }\r\n Matrix4x4.invert(this._projMatrix, this._invProjMatrix);\r\n }\r\n}\r\n"],"names":["PerspectiveCamera","Camera","_far","_fovY","_aspect","_autoAspect","_window","_projectionMode","_focalLengthMm","_sensorWidthMm","_sensorHeightMm","_sensorFit","scene","fovY","Math","PI","near","far","aspect","_near","_invalidate","projectionMode","val","mode","focalLengthMm","focalLength","max","sensorWidthMm","width","sensorHeightMm","height","sensorFit","fit","effectiveFovY","calculateVerticalFov","window","slice","autoAspect","adjustAspectRatio","viewport","adapted","getDevice","getFramebuffer","vp","getViewport","transform","getEngine","screen","viewportWidth","viewportHeight","setPerspective","zNear","zFar","setOrtho","_left","_right","_bottom","_top","Error","setProjectionMatrix","matrix","_projMatrix","isPerspective","getAspect","getFov","getNearPlane","getFarPlane","render","calcAdaptedPerspectiveProjection","h","tan","w","left","right","top","bottom","frustum","Matrix4x4","invert","_invProjMatrix"],"mappings":"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"}
|