@woosh/meep-engine 2.33.4 → 2.33.9

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.
Files changed (145) hide show
  1. package/core/binary/BinaryBuffer.js +26 -2
  2. package/core/bvh2/LeafNode.js +6 -1
  3. package/core/bvh2/aabb3/AABB3.js +21 -1
  4. package/core/collection/RingBuffer.js +40 -10
  5. package/core/collection/array/copyArray.js +2 -2
  6. package/core/collection/array/typed/typed_array_copy.js +2 -2
  7. package/core/collection/set/compute_set_difference.js +32 -0
  8. package/core/collection/set/compute_set_intersection.js +22 -0
  9. package/core/collection/set/set_remove.js +15 -0
  10. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +2 -0
  11. package/core/collection/table/DataTypeByteSizes.js +21 -0
  12. package/core/collection/table/RowFirstTable.js +1 -88
  13. package/core/collection/table/RowFirstTable.spec.js +3 -1
  14. package/core/collection/table/RowFirstTableSpec.js +9 -19
  15. package/core/collection/table/computeDataTypeByIndex.js +21 -0
  16. package/core/collection/table/deserializeRowFirstTable.js +48 -0
  17. package/core/collection/table/serializeRowFirstTable.js +27 -0
  18. package/core/color/Color.js +1 -0
  19. package/core/color/ColorUtils.js +12 -3
  20. package/core/geom/3d/aabb/aabb3_compute_projected_area.js +6 -4
  21. package/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +59 -0
  22. package/core/geom/3d/aabb/aabb3_from_min_max.js +15 -0
  23. package/core/geom/3d/aabb/aabb3_matrix4_project.js +33 -0
  24. package/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +41 -0
  25. package/core/geom/3d/aabb/aabb3_matrix4_project_by_corners.js +96 -0
  26. package/{engine/graphics/micron/render/v1 → core/geom/3d}/apply_mat4_transform_to_v3_array.js +0 -0
  27. package/{engine/graphics/micron/build/bounds → core/geom/3d}/compute_bounding_cone_of_2_cones.js +3 -3
  28. package/{engine/graphics/micron/build/bounds → core/geom/3d}/compute_bounding_cone_of_2_cones.spec.js +1 -1
  29. package/{engine/graphics/micron/build/bounds → core/geom/3d}/compute_bounding_sphere_of_2_spheres.js +3 -3
  30. package/{engine/graphics/micron/util → core/geom/3d}/encode_unit3_hemioct.js +0 -0
  31. package/core/geom/3d/frustum/array_normalize_plane.js +25 -0
  32. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +60 -0
  33. package/{engine/graphics/micron/util → core/geom/3d}/unit_hemioct.spec.js +1 -1
  34. package/{engine/graphics/micron/build → core}/graph/MultiNode.js +0 -0
  35. package/{engine/graphics/micron/build → core}/graph/SquareMatrix.js +2 -2
  36. package/{engine/graphics/micron/build → core}/graph/SquareMatrix.spec.js +1 -1
  37. package/{engine/graphics/micron/build → core}/graph/WeightedEdge.js +1 -1
  38. package/{engine/graphics/micron/build → core}/graph/build_face_graph_from_mesh.js +2 -2
  39. package/{engine/graphics/micron/build/clustering → core/graph}/cluster_mesh_metis.js +2 -6
  40. package/{engine/graphics/micron/build → core}/graph/coarsen_graph.js +1 -1
  41. package/{engine/graphics/micron/build → core}/graph/coarsen_graph.spec.js +1 -1
  42. package/{engine/graphics/micron/build → core}/graph/eigen/eigen.js +0 -0
  43. package/{engine/graphics/micron/build → core}/graph/eigen/eigen.spec.js +1 -1
  44. package/{engine/graphics/micron/build/hierarchy → core/graph/eigen}/eigen_values_find_spectral_gap.js +0 -0
  45. package/{engine/graphics/micron/build → core}/graph/graph_adjacency_matrix.js +0 -0
  46. package/{engine/graphics/micron/build → core}/graph/graph_compute_disconnected_clusters.js +0 -0
  47. package/{engine/graphics/micron/build → core}/graph/graph_degree_matrix.js +0 -0
  48. package/{engine/graphics/micron/build → core}/graph/graph_k_means_cluster.js +5 -5
  49. package/{engine/graphics/micron/build → core}/graph/graph_laplacian_matrix.js +1 -1
  50. package/{engine/graphics/micron/build → core}/graph/metis/metis.js +2 -2
  51. package/{engine/graphics/micron/build → core}/graph/metis/metis_options.js +0 -0
  52. package/{engine/graphics/micron/build → core}/graph/mn_graph_collapse_weighted_edge.js +0 -0
  53. package/core/process/undo/ActionProcessor.d.ts +2 -0
  54. package/core/process/undo/ActionProcessor.js +59 -1
  55. package/core/process/undo/ActionProcessor.spec.js +59 -0
  56. package/core/process/undo/Mark.js +2 -1
  57. package/engine/Engine.d.ts +2 -0
  58. package/engine/EngineHarness.js +4 -4
  59. package/engine/asset/loaders/material/bitmap2sampler_gl.js +19 -0
  60. package/engine/asset/loaders/material/computeImageBitmapEquality.js +7 -19
  61. package/engine/ecs/foliage/InstancedFoliage.js +3 -5
  62. package/engine/ecs/fow/serialization/FogOfWarSerializationAdapter.js +2 -1
  63. package/engine/ecs/transform/Transform.js +2 -1
  64. package/engine/graphics/GraphicsEngine.js +9 -116
  65. package/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.js +22 -37
  66. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +155 -0
  67. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +68 -0
  68. package/engine/graphics/ecs/mesh-v2/prototypeShadedGeometry.js +31 -0
  69. package/engine/graphics/filter/FlipArrayInPlace.js +25 -0
  70. package/engine/graphics/filter/FlipArrayViaCanvas.js +13 -0
  71. package/engine/graphics/filter/ImageFilter.js +20 -51
  72. package/engine/graphics/{micron → geometry}/aabb3_to_buffer_geometry.js +0 -0
  73. package/engine/graphics/{micron/build → geometry/buffered}/compute_buffer_geometry_byte_size.js +0 -0
  74. package/engine/graphics/geometry/instancing/InstancedMeshGroup.js +25 -16
  75. package/engine/graphics/material/SplatMaterial.js +4 -97
  76. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +2 -6
  77. package/engine/graphics/micron/build/clustering/build_clustering_2.js +2 -2
  78. package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
  79. package/engine/graphics/micron/build/fill_patch_geometry_data.js +2 -0
  80. package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +3 -3
  81. package/engine/graphics/micron/build/hierarchy/build_intermediate_patch_topology.js +0 -72
  82. package/engine/graphics/micron/build/hierarchy/build_merge_graph.js +2 -2
  83. package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +3 -3
  84. package/engine/graphics/micron/build/hierarchy/merge_patches.js +6 -3
  85. package/engine/graphics/micron/build/hierarchy/metis_cluster_clusters.js +1 -1
  86. package/engine/graphics/micron/build/hierarchy/optimize_graph_partitioning_balance.js +1 -1
  87. package/engine/graphics/micron/build/hierarchy/patch_combine.js +2 -2
  88. package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +2 -1
  89. package/engine/graphics/micron/format/MicronGeometry.js +12 -0
  90. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +2 -2
  91. package/engine/graphics/micron/format/MicronGeometryPatch.js +17 -9
  92. package/engine/graphics/micron/format/MicronVertexDataSpec.js +25 -3
  93. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +101 -0
  94. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +25 -0
  95. package/engine/graphics/micron/format/serialization/deserialize_patch.js +104 -0
  96. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +18 -0
  97. package/engine/graphics/micron/format/serialization/serialize_patch.js +84 -0
  98. package/engine/graphics/micron/prototypeVirtualGeometry.js +1 -1
  99. package/engine/graphics/micron/render/VirtualGeometryBuilder.js +27 -23
  100. package/engine/graphics/micron/render/culling/{PathCullingSystem.js → PatchCullingSystem.js} +1 -1
  101. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +3 -5
  102. package/engine/graphics/micron/render/refinement/ActivePatchList.js +38 -49
  103. package/engine/graphics/micron/render/refinement/ActivePatchRecord.js +4 -2
  104. package/engine/graphics/micron/render/refinement/RefinementSpec.js +98 -0
  105. package/engine/graphics/micron/render/v1/MaterialVertexSpec.js +21 -0
  106. package/engine/graphics/micron/render/v1/VGThreeRenderer.js +12 -9
  107. package/engine/graphics/micron/render/v1/getTransformedPositionsCached.js +1 -1
  108. package/engine/graphics/render/buffer/buffers/ColorAndDepthFrameBuffer.js +5 -3
  109. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +8 -10
  110. package/engine/graphics/render/forward_plus/LightManager.js +5 -7
  111. package/engine/graphics/render/forward_plus/data/NumericType.js +9 -0
  112. package/engine/graphics/render/forward_plus/{TextureBackedMemoryRegion.js → data/TextureBackedMemoryRegion.js} +11 -190
  113. package/engine/graphics/render/forward_plus/data/channelCountToThreIntegerTextureType.js +16 -0
  114. package/engine/graphics/render/forward_plus/data/computeDataType.js +36 -0
  115. package/engine/graphics/render/forward_plus/data/computeThreeTextureFormat.js +18 -0
  116. package/engine/graphics/render/forward_plus/data/computeThreeTextureInternalFormatFromDataType.js +63 -0
  117. package/engine/graphics/render/forward_plus/data/computeThreeTextureTypeFromDataType.js +41 -0
  118. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -1
  119. package/engine/graphics/render/forward_plus/prototypeLightManager.js +1 -1
  120. package/engine/graphics/render/visibility/hiz/buffer/HierarchicalZBuffer.js +198 -0
  121. package/engine/graphics/render/visibility/hiz/buffer/ReductionShader.js +51 -0
  122. package/engine/graphics/render/visibility/hiz/buildCanvasViewFromTexture.js +179 -0
  123. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +440 -0
  124. package/engine/graphics/render/visibility/hiz/query/BatchOcclusionQuery.js +174 -0
  125. package/engine/graphics/render/visibility/hiz/query/QueryShader.js +173 -0
  126. package/engine/graphics/shadows/ShadowMapRenderer.js +12 -2
  127. package/engine/graphics/texture/cubemap/buildCubeURLs.js +13 -0
  128. package/engine/graphics/texture/cubemap/load_environment_map.d.ts +8 -0
  129. package/engine/graphics/texture/cubemap/load_environment_map.js +163 -0
  130. package/engine/graphics/texture/sampler/Sampler2D.js +18 -62
  131. package/engine/graphics/texture/sampler/TextureBinaryBufferSerializer.js +1 -1
  132. package/engine/graphics/texture/sampler/convertTexture2Sampler2D.js +3 -2
  133. package/engine/graphics/texture/sampler/debug/paintSamplerOnHTML.js +3 -2
  134. package/engine/graphics/texture/sampler/differenceSampler.js +31 -0
  135. package/engine/graphics/texture/sampler/typedArrayConstructorByInstance.js +25 -0
  136. package/engine/graphics/texture/sampler/util/drawSamplerHTML.js +3 -2
  137. package/engine/graphics/texture/virtual/v2/ShaderUsage.js +6 -5
  138. package/engine/graphics/texture/virtual/v2/prototype.js +16 -6
  139. package/engine/network/convertPathToURL.js +6 -0
  140. package/engine/plugin/EnginePluginManager.d.ts +9 -0
  141. package/engine/reference/v2/Reference.d.ts +7 -0
  142. package/package.json +1 -1
  143. package/view/minimap/gl/MinimapMarkersGL.js +2 -2
  144. package/engine/graphics/micron/build/clustering/cluster_mesh_vertices.js +0 -3
  145. package/engine/graphics/micron/render/RefinementSpec.js +0 -181
@@ -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; // [ texId, level, tileX, tileY ] -> RGBA
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, 5) },
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
- uniforms: uniforms,
34
- vertexShader: vertex(),
35
- fragmentShader: fragment()
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
+ }
@@ -34,6 +34,12 @@ export function convertPathToURL(path) {
34
34
  scope = window;
35
35
  } else if (ENVIRONMENT_IS_WORKER) {
36
36
  scope = self;
37
+ } else if (ENVIRONMENT_IS_NODE) {
38
+ scope = {
39
+ location: new URL(import.meta.url)
40
+ };
41
+ } else {
42
+ throw new Error('Unknown environment');
37
43
  }
38
44
 
39
45
  const location = scope.location;
@@ -0,0 +1,9 @@
1
+ import {Reference} from "../reference/v2/Reference";
2
+
3
+ interface Type<T> extends Function {
4
+ new(...args: any[]): T;
5
+ }
6
+
7
+ export class EnginePluginManager {
8
+ acquire<T>(klass: Type<T>): Promise<Reference<T>>
9
+ }
@@ -0,0 +1,7 @@
1
+ export class Reference<T> {
2
+ getValue(): T | null
3
+
4
+ release(): void
5
+
6
+ bind(v: T): void
7
+ }
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.4",
7
+ "version": "2.33.9",
8
8
  "dependencies": {
9
9
  "fast-levenshtein": "2.0.6",
10
10
  "opentype.js": "1.3.3",
@@ -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 = LinearFilter;
85
+ dataTexture.magFilter = NearestFilter;
86
86
 
87
87
  const uniforms = {
88
88
  atlas: {
@@ -1,3 +0,0 @@
1
- export function cluster_mesh_vertices(mesh, max_face_count){
2
-
3
- }
@@ -1,181 +0,0 @@
1
- import Vector2 from "../../../../core/geom/Vector2.js";
2
- import { Matrix4 } from "three";
3
- import { mat4 } from "gl-matrix";
4
- import { v3_length } from "../../../../core/geom/Vector3.js";
5
-
6
- /**
7
- * Normalize a plane in-place
8
- * @param {number[]} source
9
- * @param {number} source_offset
10
- */
11
- function array_normalize_plane(source, source_offset) {
12
- const _x = source[source_offset];
13
- const _y = source[source_offset + 1];
14
- const _z = source[source_offset + 2];
15
-
16
- const length = v3_length(_x, _y, _z);
17
-
18
- const inverseNormalLength = 1.0 / length;
19
-
20
- /*
21
- By re-using values already in the registers instead of using *= we save a few extra READ ops
22
- */
23
- source[source_offset] = _x * inverseNormalLength;
24
- source[source_offset + 1] = _y * inverseNormalLength;
25
- source[source_offset + 2] = _z * inverseNormalLength;
26
-
27
- source[source_offset + 3] *= inverseNormalLength;
28
- }
29
-
30
- /**
31
- *
32
- * @param {number[]} destination
33
- * @param {number} destination_offset
34
- * @param {number} x
35
- * @param {number} y
36
- * @param {number} z
37
- * @param {number} w
38
- */
39
- function array_set_plane_normalized(destination, destination_offset, x, y, z, w) {
40
- const length = v3_length(x, y, z);
41
-
42
- const inverseNormalLength = 1.0 / length;
43
-
44
- destination[destination_offset] = x * inverseNormalLength;
45
- destination[destination_offset + 1] = y * inverseNormalLength;
46
- destination[destination_offset + 2] = z * inverseNormalLength;
47
- destination[destination_offset + 3] = w * inverseNormalLength;
48
- }
49
-
50
- /**
51
- *
52
- * @param {number[]|Float32Array} frustum_planes
53
- * @param {number[]} me
54
- */
55
- function array_setFromProjectionMatrix(frustum_planes, me) {
56
-
57
- const me0 = me[0];
58
- const me3 = me[3];
59
-
60
- const me4 = me[4];
61
- const me7 = me[7];
62
-
63
- const me8 = me[8];
64
- const me11 = me[11];
65
-
66
- const me12 = me[12];
67
- const me15 = me[15];
68
-
69
- array_set_plane_normalized(frustum_planes, 0, me3 - me0, me7 - me4, me11 - me8, me15 - me12);
70
- array_set_plane_normalized(frustum_planes, 4, me3 + me0, me7 + me4, me11 + me8, me15 + me12);
71
-
72
- const me1 = me[1];
73
- const me5 = me[5];
74
- const me9 = me[9];
75
- const me13 = me[13];
76
-
77
- array_set_plane_normalized(frustum_planes, 8, me3 + me1, me7 + me5, me11 + me9, me15 + me13);
78
- array_set_plane_normalized(frustum_planes, 12, me3 - me1, me7 - me5, me11 - me9, me15 - me13);
79
-
80
- const me2 = me[2];
81
- const me6 = me[6];
82
- const me10 = me[10];
83
- const me14 = me[14];
84
-
85
- array_set_plane_normalized(frustum_planes, 16, me3 - me2, me7 - me6, me11 - me10, me15 - me14);
86
- array_set_plane_normalized(frustum_planes, 20, me3 + me2, me7 + me6, me11 + me10, me15 + me14);
87
- }
88
-
89
- export class RefinementSpec {
90
- constructor() {
91
-
92
- /**
93
- * Viewport resolution
94
- * @type {Vector2}
95
- */
96
- this.resolution = new Vector2();
97
-
98
- /**
99
- * Number of pixels in the viewport
100
- * @type {number}
101
- */
102
- this.viewport_area = 0;
103
-
104
- /**
105
- * How much error to accept when deciding to subdivide a cluster
106
- * Measured in pixels
107
- * Higher value will result in better performance but more visible artifacts
108
- * @type {number}
109
- */
110
- this.error_threshold = 1;
111
-
112
- /**
113
- * Error threshold as a fraction of the screen area instead of pixels, derived internally from pixel value
114
- * @type {number}
115
- */
116
- this.error_threshold_normalized = 1;
117
-
118
- /**
119
- * Object-space camera frustum
120
- * Frustum planes in compact form
121
- * @type {Float32Array}
122
- */
123
- this.frustum_f32 = new Float32Array(24);
124
-
125
- /**
126
- * Model world transform
127
- * @type {Float32Array|number[]|mat4}
128
- */
129
- this.transform = new Float32Array(16);
130
-
131
- /**
132
- * Contains transformation from camera space to object space
133
- * @type {Float32Array|number[]|mat4}
134
- */
135
- this.projection_matrix = new Float32Array(16);
136
-
137
- /**
138
- * FOV in radians
139
- * @type {number}
140
- */
141
- this.focal_length = 0;
142
-
143
- /**
144
- * Object-space camera position
145
- * @type {Float32Array}
146
- */
147
- this.view_position = new Float32Array(3);
148
- }
149
-
150
- get frustum() {
151
- throw new Error('deprecated, use .frustum_f32 instead');
152
- }
153
-
154
- setResolution(x, y) {
155
- this.resolution.set(x, y);
156
-
157
- this.viewport_area = x * y;
158
-
159
- this.error_threshold_normalized = this.error_threshold / this.viewport_area;
160
- }
161
-
162
- /**
163
- *
164
- * @param {Matrix4} transform world-space object transform
165
- * @param {Matrix4} matrix_world_inverse camera's world inverse matrix
166
- * @param {Matrix4} matrix_projection camera's projection matrix
167
- */
168
- build(transform, matrix_world_inverse, matrix_projection) {
169
- const _transform = this.transform;
170
- _transform.set(transform.elements);
171
-
172
- // build projection matrix
173
- const projection_matrix = this.projection_matrix;
174
-
175
- mat4.multiply(projection_matrix, matrix_world_inverse.elements, _transform);
176
- mat4.multiply(projection_matrix, matrix_projection.elements, projection_matrix);
177
-
178
- // compute view frustum in model-space
179
- array_setFromProjectionMatrix(this.frustum_f32, projection_matrix);
180
- }
181
- }