@woosh/meep-engine 2.33.2 → 2.33.6
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/core/bvh2/aabb3/AABB3.js +18 -0
- package/core/bvh2/aabb3/aabb3_intersects_frustum.js +38 -0
- package/core/collection/RingBuffer.js +40 -10
- package/core/collection/array/copyArray.js +2 -2
- package/core/collection/array/typed/typed_array_copy.js +2 -2
- package/core/collection/table/RowFirstTableSpec.js +8 -0
- package/core/geom/3d/aabb/aabb3_compute_projected_area.js +16 -14
- package/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +59 -0
- package/core/geom/3d/aabb/aabb3_matrix4_project.js +33 -0
- package/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +41 -0
- package/core/geom/3d/plane/plane3_lerp.js +2 -2
- package/core/geom/3d/topology/TopoTriangle.js +2 -2
- package/core/geom/AABB2.d.ts +2 -0
- package/core/geom/Matrix4.js +4 -4
- package/core/geom/Vector3.js +5 -5
- package/core/model/reactive/model/terminal/ReactiveReference.js +7 -1
- package/core/process/undo/ActionProcessor.d.ts +2 -0
- package/core/process/undo/ActionProcessor.js +59 -1
- package/core/process/undo/ActionProcessor.spec.js +59 -0
- package/core/process/undo/Mark.js +2 -1
- package/engine/asset/loaders/GLTFAssetLoader.js +3 -3
- package/engine/asset/loaders/material/TextureAttachmensByMaterialType.js +11 -1
- package/engine/asset/loaders/material/TextureAttachment.js +12 -1
- package/engine/asset/loaders/material/bitmap2sampler_gl.js +19 -0
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +7 -19
- package/engine/asset/loaders/material/computeTextureEquality.js +1 -1
- package/engine/asset/loaders/material/computeTextureHash.js +16 -14
- package/engine/asset/loaders/material/traverseMaterialTextures.js +2 -2
- package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +4 -4
- package/engine/graphics/GraphicsEngine.d.ts +2 -2
- package/engine/graphics/GraphicsEngine.js +20 -62
- package/engine/graphics/filter/FlipArrayInPlace.js +25 -0
- package/engine/graphics/filter/FlipArrayViaCanvas.js +13 -0
- package/engine/graphics/filter/ImageFilter.js +20 -51
- package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -2
- package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +25 -16
- package/engine/graphics/material/SplatMaterial.js +4 -97
- package/engine/graphics/material/optimization/MaterialOptimizationContext.js +598 -0
- package/engine/graphics/micron/build/PatchRepresentation.js +4 -43
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +4 -75
- package/engine/graphics/micron/build/compute_buffer_geometry_byte_size.js +16 -0
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +2 -0
- package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +1 -1
- package/engine/graphics/micron/format/MicronGeometryPatch.js +17 -5
- package/engine/graphics/micron/format/MicronVertexDataSpec.js +25 -3
- package/engine/graphics/micron/prototypeVirtualGeometry.js +19 -12
- package/engine/graphics/micron/render/VirtualGeometryBuilder.js +34 -27
- package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +2 -4
- package/engine/graphics/micron/render/instanced/PatchDataTextures.js +1 -0
- package/engine/graphics/micron/render/instanced/ThreeInstancedAdapter.js +1 -29
- package/engine/graphics/micron/render/refinement/ActivePatchList.js +43 -159
- package/engine/graphics/micron/render/refinement/ActivePatchRecord.js +4 -2
- package/engine/graphics/micron/render/refinement/RefinementSpec.js +98 -0
- package/engine/graphics/micron/render/refinement/array_normalize_plane.js +25 -0
- package/engine/graphics/micron/render/refinement/array_setFromProjectionMatrix.js +60 -0
- package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +43 -0
- package/engine/graphics/micron/render/refinement/is_patch_visible.js +37 -0
- package/engine/graphics/micron/render/v1/MaterialVertexSpec.js +21 -0
- package/engine/graphics/micron/render/v1/VGThreeRenderer.js +12 -9
- package/engine/graphics/micron/util/unit_hemioct.spec.js +2 -2
- package/engine/graphics/render/buffer/buffers/ColorAndDepthFrameBuffer.js +5 -3
- package/engine/graphics/render/buffer/buffers/NormalFrameBuffer.js +12 -2
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +8 -10
- package/engine/graphics/render/forward_plus/LightManager.js +5 -7
- package/engine/graphics/render/forward_plus/data/NumericType.js +9 -0
- package/engine/graphics/render/forward_plus/{TextureBackedMemoryRegion.js → data/TextureBackedMemoryRegion.js} +11 -190
- package/engine/graphics/render/forward_plus/data/channelCountToThreIntegerTextureType.js +16 -0
- package/engine/graphics/render/forward_plus/data/computeDataType.js +36 -0
- package/engine/graphics/render/forward_plus/data/computeThreeTextureFormat.js +18 -0
- package/engine/graphics/render/forward_plus/data/computeThreeTextureInternalFormatFromDataType.js +63 -0
- package/engine/graphics/render/forward_plus/data/computeThreeTextureTypeFromDataType.js +41 -0
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
- package/engine/graphics/render/forward_plus/prototypeLightManager.js +1 -1
- package/engine/graphics/render/utils/ThreeBypassRenderer.js +1 -3
- package/engine/graphics/render/visibility/hiz/buffer/HierarchicalZBuffer.js +198 -0
- package/engine/graphics/render/visibility/hiz/buffer/ReductionShader.js +51 -0
- package/engine/graphics/render/visibility/hiz/buildCanvasViewFromTexture.js +179 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +435 -0
- package/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.js +174 -0
- package/engine/graphics/render/visibility/hiz/query/QueryShader.js +173 -0
- package/engine/graphics/shadows/ShadowMapRenderer.js +12 -2
- package/engine/graphics/texture/atlas/TextureAtlas.js +1 -1
- package/engine/graphics/texture/cubemap/buildCubeURLs.js +13 -0
- package/engine/graphics/texture/cubemap/load_environment_map.d.ts +8 -0
- package/engine/graphics/texture/cubemap/load_environment_map.js +163 -0
- package/engine/graphics/texture/sampler/Sampler2D.js +18 -62
- package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +8 -4
- package/engine/graphics/texture/sampler/debug/paintSamplerOnHTML.js +3 -2
- package/engine/graphics/texture/sampler/differenceSampler.js +31 -0
- package/engine/graphics/texture/sampler/typedArrayConstructorByInstance.js +25 -0
- package/engine/graphics/texture/sampler/util/drawSamplerHTML.js +3 -2
- package/engine/graphics/texture/virtual/v2/ShaderUsage.js +6 -5
- package/engine/graphics/texture/virtual/v2/prototype.js +16 -6
- package/package.json +1 -1
- package/view/elements/progress/segmented/SegmentedResourceBarView.js +50 -15
- package/view/minimap/gl/MinimapMarkersGL.js +2 -2
- package/engine/graphics/micron/render/RefinementSpec.js +0 -110
|
@@ -14,27 +14,28 @@ function vertex() {
|
|
|
14
14
|
function fragment() {
|
|
15
15
|
return `
|
|
16
16
|
uniform vec4 u_mt_tex; // [ width, height, tileSize, id ]
|
|
17
|
+
uniform vec2 u_mt_params; // [ bias, maxLevel, xx, xx ]
|
|
18
|
+
varying vec2 vUv;
|
|
19
|
+
|
|
17
20
|
float MTCalculateMipLevel( const in vec2 uv, const in float bias ) {
|
|
18
21
|
vec2 dx = dFdx( uv * u_mt_tex.x );
|
|
19
22
|
vec2 dy = dFdy( uv * u_mt_tex.y );
|
|
20
23
|
return log2( max( dot( dx, dx ), dot( dy, dy ) ) ) / 2.0 + bias;
|
|
21
24
|
}
|
|
22
25
|
|
|
23
|
-
uniform vec2 u_mt_params; // [ bias, maxLevel, xx, xx ]
|
|
24
26
|
vec4 MTCalculateTileKeyRGBA( const in vec2 uv ) {
|
|
25
27
|
float level = clamp( floor( MTCalculateMipLevel( uv, u_mt_params.x ) ), 0.0, u_mt_params.y );
|
|
26
28
|
vec2 texIS = uv.xy * u_mt_tex.xy; // [0-1]x[0-1] -> [0-texwidth]x[0-texheight]
|
|
27
29
|
vec2 texLS = texIS / exp2( level ); // -> [0-levelwidth]x[0-levelheight]
|
|
28
30
|
vec2 texTS = floor( texLS / u_mt_tex.z ); // -> [0->tileswide]x[0-tileshigh]
|
|
29
|
-
return vec4( u_mt_params.y - level, texTS.xy, u_mt_tex.w ) / 255.0; // [
|
|
31
|
+
return vec4( u_mt_params.y - level, texTS.xy, u_mt_tex.w ) / 255.0; // [ level, tileX, tileY, texId ] -> RGBA
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
varying vec2 vUv;
|
|
33
34
|
|
|
34
35
|
void main(){
|
|
35
36
|
vec4 tile = MTCalculateTileKeyRGBA(vUv);
|
|
36
37
|
// gl_FragColor = tile;
|
|
37
|
-
gl_FragColor = vec4(mix(0.1,1.0,tile.x*255.0), tile.yz*64.0, 1.0);
|
|
38
|
+
gl_FragColor = vec4(mix(0.1,1.0,tile.x*255.0/u_mt_params.y), tile.yz*64.0, 1.0);
|
|
38
39
|
// gl_FragColor = MTCalculateTileKeyRGBA(vUv);
|
|
39
40
|
// gl_FragColor = vec4(1.0);
|
|
40
41
|
}
|
|
@@ -44,4 +45,4 @@ void main(){
|
|
|
44
45
|
export {
|
|
45
46
|
vertex,
|
|
46
47
|
fragment
|
|
47
|
-
};
|
|
48
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as THREE from "three";
|
|
2
2
|
import { fragment, vertex } from "./ShaderUsage.js";
|
|
3
|
+
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
3
4
|
|
|
4
5
|
let camera, renderer, clock, scene;
|
|
5
6
|
|
|
@@ -22,7 +23,14 @@ function init() {
|
|
|
22
23
|
const textureLoader = new THREE.TextureLoader();
|
|
23
24
|
|
|
24
25
|
uniforms = {
|
|
25
|
-
"u_mt_params": { value: new THREE.Vector2(0.1,
|
|
26
|
+
"u_mt_params": { value: new THREE.Vector2(0.1, 6) },
|
|
27
|
+
/**
|
|
28
|
+
* Format: VT_WIDTH, VT_HEIGHT, VT_TILE_SIZE, VT_ID
|
|
29
|
+
* - VT_WIDTH : width of the virtual texture
|
|
30
|
+
* - VT_HEIGHT : height of the virtual texture
|
|
31
|
+
* - VT_TILE_SIZE : resolution of a single tile
|
|
32
|
+
* - VT_ID : multiple different virtual textures may be used, this identifies current texture
|
|
33
|
+
*/
|
|
26
34
|
"u_mt_tex": { value: new THREE.Vector4(16384, 16384, 256, 1) }
|
|
27
35
|
};
|
|
28
36
|
|
|
@@ -30,11 +38,11 @@ function init() {
|
|
|
30
38
|
|
|
31
39
|
const material = new THREE.ShaderMaterial({
|
|
32
40
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
uniforms: uniforms,
|
|
42
|
+
vertexShader: vertex(),
|
|
43
|
+
fragmentShader: fragment()
|
|
36
44
|
|
|
37
|
-
|
|
45
|
+
});
|
|
38
46
|
|
|
39
47
|
mesh = new THREE.Mesh(new THREE.TorusGeometry(size, 0.3, 30, 30), material);
|
|
40
48
|
mesh.rotation.x = 0.3;
|
|
@@ -57,6 +65,8 @@ function init() {
|
|
|
57
65
|
|
|
58
66
|
window.addEventListener("resize", onWindowResize);
|
|
59
67
|
|
|
68
|
+
new OrbitControls(camera, renderer.domElement);
|
|
69
|
+
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
function onWindowResize() {
|
|
@@ -88,4 +98,4 @@ function render() {
|
|
|
88
98
|
renderer.clear();
|
|
89
99
|
renderer.render(scene, camera)
|
|
90
100
|
|
|
91
|
-
}
|
|
101
|
+
}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"productName": "Meep",
|
|
5
5
|
"description": "production-ready JavaScript game engine based on Entity Component System Architecture",
|
|
6
6
|
"author": "Alexander Goldring",
|
|
7
|
-
"version": "2.33.
|
|
7
|
+
"version": "2.33.6",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"fast-levenshtein": "2.0.6",
|
|
10
10
|
"opentype.js": "1.3.3",
|
|
@@ -11,12 +11,12 @@ import ListView from "../../../common/ListView.js";
|
|
|
11
11
|
export class SegmentedResourceBarView extends View {
|
|
12
12
|
/**
|
|
13
13
|
*
|
|
14
|
-
* @param {Vector1|ObservedInteger} value
|
|
15
|
-
* @param {Vector1|ObservedInteger} [max=1]
|
|
14
|
+
* @param {(Vector1|ObservedInteger)[]} value
|
|
15
|
+
* @param {Vector1|ObservedInteger|ReactiveExpression} [max=1]
|
|
16
16
|
* @param {string[]} [classList]
|
|
17
17
|
*/
|
|
18
18
|
constructor({
|
|
19
|
-
|
|
19
|
+
values,
|
|
20
20
|
max = Vector1.one,
|
|
21
21
|
classList = []
|
|
22
22
|
}) {
|
|
@@ -24,10 +24,10 @@ export class SegmentedResourceBarView extends View {
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
*
|
|
27
|
-
* @type {Vector1|ObservedInteger}
|
|
27
|
+
* @type {(Vector1|ObservedInteger)[]}
|
|
28
28
|
* @private
|
|
29
29
|
*/
|
|
30
|
-
this.
|
|
30
|
+
this.__values_current = values;
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
*
|
|
@@ -52,9 +52,18 @@ export class SegmentedResourceBarView extends View {
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
// build structure
|
|
55
|
-
this.__v__fill = new EmptyView({ classList: ['fill'] });
|
|
55
|
+
this.__v__fill = new EmptyView({ classList: ['fill-container'] });
|
|
56
56
|
this.addChild(this.__v__fill);
|
|
57
57
|
|
|
58
|
+
this.__value_fills = [];
|
|
59
|
+
|
|
60
|
+
for (let i = 0; i < this.__values_current.length; i++) {
|
|
61
|
+
const v_value = new EmptyView({ classList: ['fill', `value-${i}`] });
|
|
62
|
+
|
|
63
|
+
this.__v__fill.addChild(v_value);
|
|
64
|
+
this.__value_fills[i] = v_value;
|
|
65
|
+
}
|
|
66
|
+
|
|
58
67
|
this.__v__ghost = new EmptyView({ classList: ['ghost'] });
|
|
59
68
|
this.addChild(this.__v__ghost);
|
|
60
69
|
|
|
@@ -62,7 +71,7 @@ export class SegmentedResourceBarView extends View {
|
|
|
62
71
|
this.__v_segments = new CanvasView();
|
|
63
72
|
this.__v_segments.addClass('notch-overlay');
|
|
64
73
|
|
|
65
|
-
this.
|
|
74
|
+
this.addChild(this.__v_segments);
|
|
66
75
|
|
|
67
76
|
|
|
68
77
|
/**
|
|
@@ -74,12 +83,13 @@ export class SegmentedResourceBarView extends View {
|
|
|
74
83
|
elementFactory: (interval) => {
|
|
75
84
|
const v = new EmptyView({ classList: ['highlight'] });
|
|
76
85
|
|
|
77
|
-
const valueCurrent = this.__value_current;
|
|
78
86
|
const valueMax = this.__value_max;
|
|
79
87
|
|
|
80
88
|
const update = () => {
|
|
81
|
-
const
|
|
82
|
-
|
|
89
|
+
const m = valueMax.getValue();
|
|
90
|
+
|
|
91
|
+
const v0 = interval.min / m;
|
|
92
|
+
const span = (interval.max - interval.min) / m;
|
|
83
93
|
|
|
84
94
|
const style = v.el.style;
|
|
85
95
|
|
|
@@ -89,7 +99,15 @@ export class SegmentedResourceBarView extends View {
|
|
|
89
99
|
};
|
|
90
100
|
|
|
91
101
|
v.bindSignal(interval.onChanged, update);
|
|
92
|
-
|
|
102
|
+
|
|
103
|
+
const valuesCurrent = this.__values_current;
|
|
104
|
+
|
|
105
|
+
for (let i = 0; i < valuesCurrent.length; i++) {
|
|
106
|
+
const valueCurrent = valuesCurrent[i];
|
|
107
|
+
|
|
108
|
+
v.bindSignal(valueCurrent.onChanged, update);
|
|
109
|
+
}
|
|
110
|
+
|
|
93
111
|
v.bindSignal(valueMax.onChanged, update);
|
|
94
112
|
|
|
95
113
|
v.on.linked.add(update);
|
|
@@ -101,8 +119,10 @@ export class SegmentedResourceBarView extends View {
|
|
|
101
119
|
this.addChild(this.highlightViews);
|
|
102
120
|
|
|
103
121
|
// subscribe to changes
|
|
122
|
+
for (let i = 0; i < this.__values_current.length; i++) {
|
|
123
|
+
this.bindSignal(this.__values_current[i].onChanged, this.updateFill, this);
|
|
124
|
+
}
|
|
104
125
|
|
|
105
|
-
this.bindSignal(this.__value_current.onChanged, this.updateFill, this);
|
|
106
126
|
this.bindSignal(this.__value_max.onChanged, this.handleMaxChange, this);
|
|
107
127
|
|
|
108
128
|
/**
|
|
@@ -252,14 +272,29 @@ export class SegmentedResourceBarView extends View {
|
|
|
252
272
|
}
|
|
253
273
|
|
|
254
274
|
updateFill() {
|
|
255
|
-
const c = this.__value_current.getValue();
|
|
256
275
|
const m = this.__value_max.getValue();
|
|
257
276
|
|
|
258
|
-
|
|
277
|
+
let total_current = 0;
|
|
278
|
+
|
|
279
|
+
for (let i = 0; i < this.__values_current.length; i++) {
|
|
280
|
+
const v = this.__values_current[i];
|
|
281
|
+
|
|
282
|
+
const value = v.getValue();
|
|
283
|
+
|
|
284
|
+
total_current += value;
|
|
285
|
+
|
|
286
|
+
const v_fraction = clamp(v / m, 0, 1);
|
|
287
|
+
|
|
288
|
+
const fill_view = this.__value_fills[i];
|
|
289
|
+
|
|
290
|
+
fill_view.el.style.width = `${v_fraction * 100}%`;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
const f = clamp(total_current / m, 0, 1);
|
|
259
295
|
|
|
260
296
|
const width = `${f * 100}%`;
|
|
261
297
|
|
|
262
|
-
this.__v__fill.el.style.width = width
|
|
263
298
|
this.__v__ghost.el.style.width = width;
|
|
264
299
|
}
|
|
265
300
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DataTexture,
|
|
3
|
-
LinearFilter,
|
|
4
3
|
LinearMipMapLinearFilter,
|
|
4
|
+
NearestFilter,
|
|
5
5
|
NormalBlending,
|
|
6
6
|
Points,
|
|
7
7
|
RGBAFormat,
|
|
@@ -82,7 +82,7 @@ function buildMaterial() {
|
|
|
82
82
|
dataTexture.flipY = false;
|
|
83
83
|
dataTexture.generateMipmaps = true;
|
|
84
84
|
dataTexture.minFilter = LinearMipMapLinearFilter;
|
|
85
|
-
dataTexture.magFilter =
|
|
85
|
+
dataTexture.magFilter = NearestFilter;
|
|
86
86
|
|
|
87
87
|
const uniforms = {
|
|
88
88
|
atlas: {
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import Vector2 from "../../../../core/geom/Vector2.js";
|
|
2
|
-
import { Frustum, Matrix4 } from "three";
|
|
3
|
-
import { mat4 } from "gl-matrix";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function setFromProjectionMatrix(planes, me) {
|
|
7
|
-
|
|
8
|
-
const me0 = me[0], me1 = me[1], me2 = me[2], me3 = me[3];
|
|
9
|
-
const me4 = me[4], me5 = me[5], me6 = me[6], me7 = me[7];
|
|
10
|
-
const me8 = me[8], me9 = me[9], me10 = me[10], me11 = me[11];
|
|
11
|
-
const me12 = me[12], me13 = me[13], me14 = me[14], me15 = me[15];
|
|
12
|
-
|
|
13
|
-
planes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize();
|
|
14
|
-
planes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize();
|
|
15
|
-
planes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize();
|
|
16
|
-
planes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize();
|
|
17
|
-
planes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize();
|
|
18
|
-
planes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class RefinementSpec {
|
|
24
|
-
constructor() {
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Viewport resolution
|
|
28
|
-
* @type {Vector2}
|
|
29
|
-
*/
|
|
30
|
-
this.resolution = new Vector2();
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Number of pixels in the viewport
|
|
34
|
-
* @type {number}
|
|
35
|
-
*/
|
|
36
|
-
this.viewport_area = 0;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* How much error to accept when deciding to subdivide a cluster
|
|
40
|
-
* Measured in pixels
|
|
41
|
-
* Higher value will result in better performance but more visible artifacts
|
|
42
|
-
* @type {number}
|
|
43
|
-
*/
|
|
44
|
-
this.error_threshold = 1;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Object-space camera frustum
|
|
48
|
-
* @type {Frustum}
|
|
49
|
-
*/
|
|
50
|
-
this.frustum = new Frustum();
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Model world transform
|
|
54
|
-
* @type {Float32Array|number[]|mat4}
|
|
55
|
-
*/
|
|
56
|
-
this.transform = new Float32Array(16);
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Contains transformation from camera space to object space
|
|
60
|
-
* @type {Float32Array|number[]|mat4}
|
|
61
|
-
*/
|
|
62
|
-
this.projection_matrix = new Float32Array(16);
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* FOV in radians
|
|
66
|
-
* @type {number}
|
|
67
|
-
*/
|
|
68
|
-
this.focal_length = 0;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Object-space camera position
|
|
72
|
-
* @type {Float32Array}
|
|
73
|
-
*/
|
|
74
|
-
this.view_position = new Float32Array(3);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
*
|
|
79
|
-
* @param {Matrix4} transform world-space object transform
|
|
80
|
-
* @param {Matrix4} matrix_world_inverse camera's world inverse matrix
|
|
81
|
-
* @param {Matrix4} matrix_projection camera's projection matrix
|
|
82
|
-
*/
|
|
83
|
-
build(transform, matrix_world_inverse, matrix_projection) {
|
|
84
|
-
const _transform = this.transform;
|
|
85
|
-
_transform.set(transform.elements);
|
|
86
|
-
|
|
87
|
-
// build projection matrix
|
|
88
|
-
mat4.multiply(this.projection_matrix, matrix_world_inverse.elements, _transform);
|
|
89
|
-
mat4.multiply(this.projection_matrix, matrix_projection.elements, this.projection_matrix);
|
|
90
|
-
|
|
91
|
-
// compute view frustum in model-space
|
|
92
|
-
setFromProjectionMatrix(this.frustum.planes, this.projection_matrix);
|
|
93
|
-
|
|
94
|
-
/*
|
|
95
|
-
|
|
96
|
-
// get inverse of model view matrix
|
|
97
|
-
model_view_matrix.invert();
|
|
98
|
-
|
|
99
|
-
// get view origin position in the prjected space
|
|
100
|
-
const inv_mv = model_view_matrix.elements;
|
|
101
|
-
const view_position = this.view_position;
|
|
102
|
-
|
|
103
|
-
// extract position component from transform matrix
|
|
104
|
-
view_position[0] = inv_mv[12];
|
|
105
|
-
view_position[1] = inv_mv[13];
|
|
106
|
-
view_position[2] = inv_mv[14];
|
|
107
|
-
|
|
108
|
-
*/
|
|
109
|
-
}
|
|
110
|
-
}
|