@woosh/meep-engine 2.138.3 → 2.138.5
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/package.json +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts +13 -5
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_hierarchy_radix.js +253 -280
- package/src/core/bvh2/bvh3/ebvh_update_hierarchy_bounds.js +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.d.ts +31 -0
- package/src/core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.js +101 -0
- package/src/core/cache/CacheV2.d.ts +6 -2
- package/src/core/cache/CacheV2.d.ts.map +1 -1
- package/src/core/cache/CacheV2.js +6 -2
- package/src/engine/EngineHarness.js +2 -2
- package/src/engine/ecs/renderable/RenderSystem.d.ts.map +1 -1
- package/src/engine/ecs/renderable/RenderSystem.js +6 -0
- package/src/engine/ecs/terrain/ecs/TerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +19 -0
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts +4 -1
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/auto_set_camera_clipping_planes.js +121 -12
- package/src/engine/graphics/ecs/light/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/LightSystem.js +80 -18
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts +14 -0
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/shadow/compute_view_frustum_aabb_in_space.js +62 -0
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts +30 -0
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.d.ts.map +1 -0
- package/src/engine/graphics/ecs/light/shadow/extend_shadow_camera_near_for_casters.js +97 -0
- package/src/engine/graphics/ecs/mesh/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh/MeshSystem.js +6 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +6 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2DSystem.js +6 -0
- package/src/engine/graphics/ecs/water/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSystem.js +6 -0
- package/src/engine/graphics/impostors/octahedral/prototypeBaker.js +7 -10
- package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderV0.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderV0.js +139 -57
- package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderWireframeV0.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/shader/ImpostorShaderWireframeV0.js +123 -38
- package/src/engine/graphics/impostors/octahedral/util/makeImpostorAtlasPreview.d.ts +1 -1
- package/src/engine/graphics/impostors/octahedral/util/makeImpostorAtlasPreview.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/util/makeImpostorAtlasPreview.js +7 -3
- package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.js +6 -0
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +2 -0
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +14 -0
- package/src/engine/intelligence/mcts/MonteCarlo.js +1 -1
- package/src/engine/graphics/ecs/camera/FrustumProjector.d.ts +0 -14
- package/src/engine/graphics/ecs/camera/FrustumProjector.d.ts.map +0 -1
- package/src/engine/graphics/ecs/camera/FrustumProjector.js +0 -86
|
@@ -8,54 +8,139 @@ import {
|
|
|
8
8
|
Vector3
|
|
9
9
|
} from "three";
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
// The wireframe must trace the SAME card geometry that ImpostorShaderV0
|
|
12
|
+
// produces, otherwise the red outline lies about where the impostor surface
|
|
13
|
+
// actually is. So this vertex shader is the geometry half of the main V0
|
|
14
|
+
// vertex shader, minus everything the fragment shader doesn't read (no
|
|
15
|
+
// vUv, vViewPos, vTangent/vBinormal/vNormal, no per-frame xforms, no
|
|
16
|
+
// atlas lookup).
|
|
15
17
|
const shader_vx = `
|
|
16
|
-
|
|
18
|
+
|
|
17
19
|
in vec3 position;
|
|
18
|
-
|
|
20
|
+
|
|
19
21
|
uniform mat4 modelViewMatrix;
|
|
20
22
|
uniform mat4 projectionMatrix;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
|
|
23
24
|
uniform vec3 uOffset;
|
|
24
25
|
uniform float uRadius;
|
|
25
26
|
uniform float uFrames;
|
|
26
|
-
|
|
27
|
+
uniform bool uIsFullSphere;
|
|
28
|
+
|
|
29
|
+
// ----- direction -> octahedral grid coord (range -1..+1) -----
|
|
30
|
+
|
|
31
|
+
vec2 VecToSphereOct(vec3 pivotToCamera)
|
|
32
|
+
{
|
|
33
|
+
vec3 octant = sign(pivotToCamera);
|
|
34
|
+
float sum = dot(pivotToCamera, octant);
|
|
35
|
+
vec3 octahedron = pivotToCamera / sum;
|
|
36
|
+
if (octahedron.y < 0.0) {
|
|
37
|
+
vec3 absolute = abs(octahedron);
|
|
38
|
+
octahedron.xz = octant.xz * vec2(1.0 - absolute.z, 1.0 - absolute.x);
|
|
39
|
+
}
|
|
40
|
+
return octahedron.xz;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
vec2 VecToHemiSphereOct(vec3 v)
|
|
44
|
+
{
|
|
45
|
+
v.y = max(v.y, 0.001);
|
|
46
|
+
v = normalize(v);
|
|
47
|
+
vec3 octant = sign(v);
|
|
48
|
+
float sum = dot(v, octant);
|
|
49
|
+
vec3 octahedron = v / sum;
|
|
50
|
+
return vec2(
|
|
51
|
+
octahedron.x + octahedron.z,
|
|
52
|
+
octahedron.z - octahedron.x
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
vec2 VectorToGrid(vec3 v)
|
|
57
|
+
{
|
|
58
|
+
return uIsFullSphere ? VecToSphereOct(v) : VecToHemiSphereOct(v);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// ----- octahedral grid coord (range 0..1) -> direction -----
|
|
62
|
+
|
|
63
|
+
vec3 OctaSphereDec(vec2 coord)
|
|
64
|
+
{
|
|
65
|
+
coord = (coord - 0.5) * 2.0;
|
|
66
|
+
vec3 p = vec3(coord.x, 0.0, coord.y);
|
|
67
|
+
vec2 a = abs(p.xz);
|
|
68
|
+
p.y = 1.0 - a.x - a.y;
|
|
69
|
+
if (p.y < 0.0) {
|
|
70
|
+
p.xz = sign(p.xz) * vec2(1.0 - a.y, 1.0 - a.x);
|
|
71
|
+
}
|
|
72
|
+
return p;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
vec3 OctaHemiSphereDec(vec2 coord)
|
|
76
|
+
{
|
|
77
|
+
vec3 p = vec3(coord.x - coord.y, 0.0, -1.0 + coord.x + coord.y);
|
|
78
|
+
vec2 a = abs(p.xz);
|
|
79
|
+
p.y = 1.0 - a.x - a.y;
|
|
80
|
+
return p;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
vec3 GridToVector(vec2 coord)
|
|
84
|
+
{
|
|
85
|
+
return uIsFullSphere ? OctaSphereDec(coord) : OctaHemiSphereDec(coord);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
vec3 FrameToRay(vec2 frame, vec2 framesMinusOne)
|
|
89
|
+
{
|
|
90
|
+
vec2 f = clamp(frame / framesMinusOne, 0.0, 1.0);
|
|
91
|
+
return normalize(GridToVector(f));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
vec4 BilinearWeights(vec2 frac_uv)
|
|
95
|
+
{
|
|
96
|
+
vec2 omuv = vec2(1.0) - frac_uv;
|
|
97
|
+
return vec4(
|
|
98
|
+
omuv.x * omuv.y,
|
|
99
|
+
frac_uv.x * omuv.y,
|
|
100
|
+
omuv.x * frac_uv.y,
|
|
101
|
+
frac_uv.x * frac_uv.y
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
27
105
|
void main() {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
mat4 m4 = modelViewMatrix;
|
|
32
|
-
|
|
33
|
-
m4[0][0] = 1.0;
|
|
34
|
-
m4[0][1] = 0.0;
|
|
35
|
-
m4[0][2] = 0.0;
|
|
106
|
+
// Pivot-to-camera direction in object-local space; same as V0.
|
|
107
|
+
vec3 cameraPos_OS = (inverse(modelViewMatrix) * vec4(0.0, 0.0, 0.0, 1.0)).xyz;
|
|
108
|
+
vec3 pivotToCameraRay = normalize(cameraPos_OS);
|
|
36
109
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
110
|
+
// Pick the cell and its 4-corner bilinear weights, then blend the
|
|
111
|
+
// four corner rays into the "effective" bake direction the card is
|
|
112
|
+
// showing. Mirrors V0.
|
|
113
|
+
vec2 framesMinusOne = vec2(uFrames - 1.0);
|
|
114
|
+
vec2 octahedral_uv = clamp(VectorToGrid(pivotToCameraRay) * 0.5 + 0.5, 0.0, 1.0);
|
|
115
|
+
vec2 grid = octahedral_uv * framesMinusOne;
|
|
116
|
+
vec2 gridFloor = min(floor(grid), framesMinusOne - 1.0);
|
|
117
|
+
vec4 weights = BilinearWeights(grid - gridFloor);
|
|
40
118
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
vec3
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
119
|
+
vec3 ray00 = FrameToRay(gridFloor + vec2(0.0, 0.0), framesMinusOne);
|
|
120
|
+
vec3 ray10 = FrameToRay(gridFloor + vec2(1.0, 0.0), framesMinusOne);
|
|
121
|
+
vec3 ray01 = FrameToRay(gridFloor + vec2(0.0, 1.0), framesMinusOne);
|
|
122
|
+
vec3 ray11 = FrameToRay(gridFloor + vec2(1.0, 1.0), framesMinusOne);
|
|
123
|
+
vec3 projectedRay = normalize(
|
|
124
|
+
ray00 * weights.x +
|
|
125
|
+
ray10 * weights.y +
|
|
126
|
+
ray01 * weights.z +
|
|
127
|
+
ray11 * weights.w
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
// TBN construction identical to V0 so the card spans the same plane.
|
|
131
|
+
vec3 normal_OS = projectedRay;
|
|
132
|
+
vec3 up_OS = abs(normal_OS.y) > 0.999
|
|
133
|
+
? vec3(0.0, 0.0, -1.0)
|
|
134
|
+
: vec3(0.0, 1.0, 0.0);
|
|
135
|
+
vec3 tangent_OS = normalize(cross(up_OS, normal_OS));
|
|
136
|
+
vec3 binormal_OS = cross(normal_OS, tangent_OS);
|
|
137
|
+
|
|
138
|
+
float card_diameter = uRadius * 2.0;
|
|
139
|
+
vec3 pos_OS = uOffset
|
|
140
|
+
+ position.x * card_diameter * tangent_OS
|
|
141
|
+
+ position.y * card_diameter * binormal_OS;
|
|
142
|
+
|
|
143
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(pos_OS, 1.0);
|
|
59
144
|
}
|
|
60
145
|
`;
|
|
61
146
|
const shader_fg = `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeImpostorAtlasPreview.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/impostors/octahedral/util/makeImpostorAtlasPreview.js"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AACH,
|
|
1
|
+
{"version":3,"file":"makeImpostorAtlasPreview.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/impostors/octahedral/util/makeImpostorAtlasPreview.js"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AACH,6GA0DC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { buildCanvasViewFromTexture } from "../../../render/visibility/hiz/buildCanvasViewFromTexture.js";
|
|
2
|
-
import EmptyView from "../../../../../view/elements/EmptyView.js";
|
|
3
1
|
import { CanvasView } from "../../../../../view/elements/CanvasView.js";
|
|
2
|
+
import EmptyView from "../../../../../view/elements/EmptyView.js";
|
|
3
|
+
import { buildCanvasViewFromTexture } from "../../../render/visibility/hiz/buildCanvasViewFromTexture.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @param {ImpostorDescription} impostor
|
|
@@ -46,7 +46,7 @@ function makeGrid(impostor) {
|
|
|
46
46
|
*
|
|
47
47
|
* @param {ImpostorDescription} impostor
|
|
48
48
|
* @param {THREE.WebGLRenderer} renderer
|
|
49
|
-
* @param {'albedo'|'normal'|'depth'|'alpha'} [mode]
|
|
49
|
+
* @param {'albedo'|'normal'|'depth'|'alpha'|'orm'} [mode]
|
|
50
50
|
* @param {boolean} [show_grid]
|
|
51
51
|
* @return {View}
|
|
52
52
|
*/
|
|
@@ -73,6 +73,10 @@ export function makeImpostorAtlasPreview({
|
|
|
73
73
|
options.swizzle = ['a', 'a', 'a', 1];
|
|
74
74
|
options.texture = impostor.rt.texture[1]
|
|
75
75
|
break;
|
|
76
|
+
case "orm":
|
|
77
|
+
options.swizzle = ['r', 'g', 'b', 1];
|
|
78
|
+
options.texture = impostor.rt.texture[2]
|
|
79
|
+
break;
|
|
76
80
|
default:
|
|
77
81
|
console.warn(`Unsupported mode '${mode}', defaulting to albedo`);
|
|
78
82
|
//fall-through
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/particles/ecs/ParticleEmitterSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/particles/ecs/ParticleEmitterSystem.js"],"names":[],"mappings":"AAaA;IAeI;;;;;OAKG;IACH,4BAwBC;IA5CD,yCAA4C;IAE5C,uEAEE;IAEF;;;OAGG;IACH,aAFU,cAAY,IAAI,CAEP;IAEnB,kBAAgB;IAcZ;;;OAGG;IACH,+BAAqC;IAErC;;;OAGG;IACH,2BAAuC;IAEvC;;;OAGG;IACH,gBAFU,gBAAgB,CAE2E;IAIzG,2CA8HC;IAED,4CAEC;IAED;;;;;OAKG;IACH,cAJW,eAAe,aACf,SAAS,qBAoCnB;IAED;;;;;OAKG;IACH,gBAJW,eAAe,aACf,SAAS,qBAenB;IAED,6BAEC;CACJ;uBA3PsB,wBAAwB;gCAIf,iDAAiD;4CANrC,uDAAuD;iCAQlE,0CAA0C;0BALjD,qCAAqC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { bvh_query_depth_range_in_frustum } from "../../../../core/bvh2/bvh3/query/bvh_query_depth_range_in_frustum.js";
|
|
2
3
|
import { ResourceAccessKind } from "../../../../core/model/ResourceAccessKind.js";
|
|
3
4
|
import { ResourceAccessSpecification } from "../../../../core/model/ResourceAccessSpecification.js";
|
|
4
5
|
import { ImageRGBADataLoader } from "../../../asset/loaders/image/ImageRGBADataLoader.js";
|
|
@@ -85,6 +86,11 @@ export class ParticleEmitterSystem extends System {
|
|
|
85
86
|
}
|
|
86
87
|
);
|
|
87
88
|
|
|
89
|
+
const bvh = this.particleEngine.bvh;
|
|
90
|
+
renderLayer.compute_depth_range = (result, frustum, nx, ny, nz, c) => {
|
|
91
|
+
bvh_query_depth_range_in_frustum(result, bvh, frustum, nx, ny, nz, c);
|
|
92
|
+
};
|
|
93
|
+
|
|
88
94
|
renderLayer.visibleSet.onAdded.add((points) => {
|
|
89
95
|
/**
|
|
90
96
|
*
|
|
@@ -17,4 +17,6 @@ export class RenderLayer {
|
|
|
17
17
|
* @deprecated
|
|
18
18
|
*/
|
|
19
19
|
visibleSet: IncrementalDeltaSet<Object3D>
|
|
20
|
+
|
|
21
|
+
compute_depth_range: ((result: { near: number; far: number }, frustum: ArrayLike<number>, plane_normal_x: number, plane_normal_y: number, plane_normal_z: number, plane_constant: number) => void) | null
|
|
20
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderLayer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/layers/RenderLayer.js"],"names":[],"mappings":"AAKA;IAEI;;;OAGG;IACH,OAFU,gBAAgB,CAEK;IAE/B;;;OAGG;IACH,MAFU,SAAO,IAAI,CAET;IAEZ;;;;OAIG;IACH,SAFU,OAAO,CAED;IAEhB;;;OAGG;IACH,2CAAgC;IAEhC;;;;;OAKG;IACH,YAFU,oBAAoB,MAAM,QAAQ,CAAC,CAEe;IAU5D;;;OAGG;IACH,0BAEC;IAdD;;;OAGG;IACH,uBAEC;IAUD;;;;;;;;;OASG;IACH,qDALW,MAAM,OACN,MAAM,sCAMhB;IAED;;;;;;OAMG;IACH,6BALW,MAAM,QAAQ,EAAE,sBAChB,MAAM,qBAEJ,MAAM,CAIlB;
|
|
1
|
+
{"version":3,"file":"RenderLayer.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/layers/RenderLayer.js"],"names":[],"mappings":"AAKA;IAEI;;;OAGG;IACH,OAFU,gBAAgB,CAEK;IAE/B;;;OAGG;IACH,MAFU,SAAO,IAAI,CAET;IAEZ;;;;OAIG;IACH,SAFU,OAAO,CAED;IAEhB;;;OAGG;IACH,2CAAgC;IAEhC;;;;;OAKG;IACH,YAFU,oBAAoB,MAAM,QAAQ,CAAC,CAEe;IAU5D;;;OAGG;IACH,0BAEC;IAdD;;;OAGG;IACH,uBAEC;IAUD;;;;;;;;;OASG;IACH,qDALW,MAAM,OACN,MAAM,sCAMhB;IAED;;;;;;OAMG;IACH,6BALW,MAAM,QAAQ,EAAE,sBAChB,MAAM,qBAEJ,MAAM,CAIlB;IAED;;;;;;;;;;;OAWG;IACH,8BAFmB;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,GAAG,EAAC,MAAM,CAAA;KAAC,WAAU,UAAU,MAAM,CAAC,kBAAiB,MAAM,kBAAiB,MAAM,kBAAiB,MAAM,kBAAiB,MAAM,KAAK,IAAI,CAEhJ;CAC9B;iCA3FgC,uBAAuB;oCADpB,sCAAsC"}
|
|
@@ -78,4 +78,18 @@ export class RenderLayer {
|
|
|
78
78
|
buildVisibleSet(destination, destination_offset, view) {
|
|
79
79
|
throw new Error('deprecated');
|
|
80
80
|
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Expand a (near, far) depth range to cover this layer's content that
|
|
84
|
+
* intersects a frustum. Driven by the camera's autoClip path; defaults to
|
|
85
|
+
* a no-op for layers that don't own a BVH or don't participate in depth
|
|
86
|
+
* fitting (e.g. screen-space overlays).
|
|
87
|
+
*
|
|
88
|
+
* Systems with a BVH wire this from their `startup` alongside
|
|
89
|
+
* `buildVisibleSet` — typically using
|
|
90
|
+
* {@link bvh_query_depth_range_in_frustum} against their own BVH.
|
|
91
|
+
*
|
|
92
|
+
* @type {((result:{near:number,far:number}, frustum:ArrayLike<number>, plane_normal_x:number, plane_normal_y:number, plane_normal_z:number, plane_constant:number) => void) | null}
|
|
93
|
+
*/
|
|
94
|
+
compute_depth_range = null;
|
|
81
95
|
}
|
|
@@ -152,7 +152,7 @@ export class MonteCarloTreeSearch {
|
|
|
152
152
|
assert.notNaN(s, 'computed Node score');
|
|
153
153
|
assert.isFinite(s, `computed Node score`);
|
|
154
154
|
|
|
155
|
-
score = s + randomRoll;
|
|
155
|
+
score = s + randomRoll * 1e-5;
|
|
156
156
|
} else {
|
|
157
157
|
|
|
158
158
|
//use a constant value for unexplored nodes
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
export { project };
|
|
3
|
-
}
|
|
4
|
-
export default _default;
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
* @param {Number} nearZ
|
|
8
|
-
* @param {Number} farZ
|
|
9
|
-
* @param {THREE.Camera} camera
|
|
10
|
-
* @param {THREE.Matrix4} matrixWorldInverse
|
|
11
|
-
* @param {AABB3} result
|
|
12
|
-
*/
|
|
13
|
-
declare function project(nearZ: number, farZ: number, camera: THREE.Camera, matrixWorldInverse: THREE.Matrix4, result: AABB3): void;
|
|
14
|
-
//# sourceMappingURL=FrustumProjector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FrustumProjector.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/camera/FrustumProjector.js"],"names":[],"mappings":";;;;AAkBA;;;;;;;GAOG;AACH,8DAJW,MAAM,MAAM,sBACZ,MAAM,OAAO,uBAsDvB"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Vector3 as ThreeVector3 } from 'three';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const corners = [
|
|
5
|
-
new ThreeVector3(-1, -1, 0),
|
|
6
|
-
new ThreeVector3(-1, -1, 0),
|
|
7
|
-
|
|
8
|
-
new ThreeVector3(-1, 1, 0),
|
|
9
|
-
new ThreeVector3(-1, 1, 0),
|
|
10
|
-
|
|
11
|
-
new ThreeVector3(1, -1, 0),
|
|
12
|
-
new ThreeVector3(1, -1, 0),
|
|
13
|
-
|
|
14
|
-
new ThreeVector3(1, 1, 0),
|
|
15
|
-
new ThreeVector3(1, 1, 0)
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
* @param {Number} nearZ
|
|
22
|
-
* @param {Number} farZ
|
|
23
|
-
* @param {THREE.Camera} camera
|
|
24
|
-
* @param {THREE.Matrix4} matrixWorldInverse
|
|
25
|
-
* @param {AABB3} result
|
|
26
|
-
*/
|
|
27
|
-
function project(nearZ, farZ, camera, matrixWorldInverse, result) {
|
|
28
|
-
corners[0].set(-1, -1, nearZ);
|
|
29
|
-
corners[1].set(-1, -1, farZ);
|
|
30
|
-
|
|
31
|
-
corners[2].set(-1, 1, nearZ);
|
|
32
|
-
corners[3].set(-1, 1, farZ);
|
|
33
|
-
|
|
34
|
-
corners[4].set(1, -1, nearZ);
|
|
35
|
-
corners[5].set(1, -1, farZ);
|
|
36
|
-
|
|
37
|
-
corners[6].set(1, 1, nearZ);
|
|
38
|
-
corners[7].set(1, 1, farZ);
|
|
39
|
-
|
|
40
|
-
//compute corners of view frustum in light space
|
|
41
|
-
let x0 = Number.POSITIVE_INFINITY;
|
|
42
|
-
let y0 = Number.POSITIVE_INFINITY;
|
|
43
|
-
let z0 = Number.POSITIVE_INFINITY;
|
|
44
|
-
|
|
45
|
-
let x1 = Number.NEGATIVE_INFINITY;
|
|
46
|
-
let y1 = Number.NEGATIVE_INFINITY;
|
|
47
|
-
let z1 = Number.NEGATIVE_INFINITY;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
for (let i = 0; i < 8; i++) {
|
|
51
|
-
const corner = corners[i];
|
|
52
|
-
corner.unproject(camera);
|
|
53
|
-
corner.applyMatrix4(matrixWorldInverse);
|
|
54
|
-
|
|
55
|
-
if (corner.x < x0) {
|
|
56
|
-
x0 = corner.x;
|
|
57
|
-
}
|
|
58
|
-
if (corner.x > x1) {
|
|
59
|
-
x1 = corner.x;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (corner.y < y0) {
|
|
63
|
-
y0 = corner.y;
|
|
64
|
-
}
|
|
65
|
-
if (corner.y > y1) {
|
|
66
|
-
y1 = corner.y;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (corner.z < z0) {
|
|
70
|
-
z0 = corner.z;
|
|
71
|
-
}
|
|
72
|
-
if (corner.z > z1) {
|
|
73
|
-
z1 = corner.z;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
result.setBounds(x0, y0, z0, x1, y1, z1);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
export default {
|
|
82
|
-
/**
|
|
83
|
-
* @deprecated use non-threejs specific code
|
|
84
|
-
*/
|
|
85
|
-
project,
|
|
86
|
-
};
|