@pirireis/webglobeplugins 0.9.6 → 0.9.8
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/{Math → dist/Math}/angle-calculation.js +15 -14
- package/dist/Math/arc.js +65 -0
- package/{Math → dist/Math}/bounds/line-bbox.js +188 -225
- package/dist/Math/constants.js +9 -0
- package/{Math/frustum/camera.ts → dist/Math/frustum/camera.js} +24 -32
- package/{Math/frustum/from-globeinfo.ts → dist/Math/frustum/from-globeinfo.js} +48 -63
- package/dist/Math/frustum/types.js +2 -0
- package/{Math/globe-util/horizon-plane.ts → dist/Math/globe-util/horizon-plane.js} +112 -137
- package/dist/Math/index.js +1 -0
- package/dist/Math/juction/arc-plane.js +83 -0
- package/dist/Math/juction/line-sphere.js +25 -0
- package/{Math/juction/plane-plane.ts → dist/Math/juction/plane-plane.js} +58 -66
- package/dist/Math/line.js +56 -0
- package/dist/Math/matrix4.js +1 -0
- package/{Math → dist/Math}/methods.js +201 -237
- package/dist/Math/plane.js +60 -0
- package/{Math/quaternion.ts → dist/Math/quaternion.js} +104 -120
- package/dist/Math/types.js +2 -0
- package/dist/Math/utils.js +4 -0
- package/{Math/vec3.ts → dist/Math/vec3.js} +126 -155
- package/dist/algorithms/search-binary.js +19 -0
- package/dist/altitude-locator/adaptors.js +1 -0
- package/{altitude-locator → dist/altitude-locator}/draw-subset-obj.js +18 -27
- package/dist/altitude-locator/keymethod.js +1 -0
- package/{altitude-locator → dist/altitude-locator}/plugin.js +341 -439
- package/{altitude-locator → dist/altitude-locator}/types.js +23 -26
- package/{arrowfield → dist/arrowfield}/adaptor.js +14 -11
- package/dist/arrowfield/index.js +10 -0
- package/{arrowfield → dist/arrowfield}/plugin.js +86 -128
- package/dist/bearing-line/index.js +8 -0
- package/{bearing-line → dist/bearing-line}/plugin.js +449 -512
- package/{circle-line-chain → dist/circle-line-chain}/chain-list-map.js +205 -221
- package/dist/circle-line-chain/init.js +1 -0
- package/{circle-line-chain → dist/circle-line-chain}/plugin.js +424 -469
- package/dist/circle-line-chain/util.js +5 -0
- package/{compass-rose → dist/compass-rose}/compass-rose-padding-flat.js +225 -266
- package/{compass-rose → dist/compass-rose}/compass-text-writer.js +153 -173
- package/dist/compass-rose/index.js +7 -0
- package/{compassrose → dist/compassrose}/compassrose.js +296 -341
- package/dist/compassrose/index.js +8 -0
- package/dist/globe-types.js +1 -0
- package/dist/heatwave/index.js +10 -0
- package/{heatwave → dist/heatwave}/isobar/objectarraylabels.js +202 -247
- package/{heatwave → dist/heatwave}/isobar/plugin.js +343 -340
- package/{heatwave → dist/heatwave}/isobar/quadtreecontours.js +300 -336
- package/{heatwave → dist/heatwave}/plugins/heatwaveglobeshell.js +206 -258
- package/dist/index.js +58 -0
- package/{jest.config.js → dist/jest.config.js} +7 -6
- package/{partialrings → dist/partialrings}/buffer-manager.js +81 -89
- package/dist/partialrings/index.js +41 -0
- package/{partialrings → dist/partialrings}/plugin.js +135 -160
- package/{partialrings → dist/partialrings}/program.js +204 -242
- package/{pin → dist/pin}/pin-object-array.js +305 -381
- package/{pin → dist/pin}/pin-point-totem.js +60 -77
- package/{point-heat-map → dist/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +66 -78
- package/dist/point-heat-map/index.js +1 -0
- package/{point-heat-map → dist/point-heat-map}/plugin-webworker.js +126 -151
- package/{point-heat-map → dist/point-heat-map}/point-to-heat-map-flow.js +127 -150
- package/dist/point-tracks/key-methods.js +5 -0
- package/{point-tracks → dist/point-tracks}/plugin.js +338 -394
- package/dist/programs/arrowfield/index.js +7 -0
- package/{programs → dist/programs}/arrowfield/logic.js +144 -173
- package/{programs → dist/programs}/arrowfield/object.js +66 -89
- package/{programs → dist/programs}/data2legend/density-to-legend.js +76 -90
- package/{programs → dist/programs}/data2legend/point-to-density-texture.js +76 -90
- package/dist/programs/float2legendwithratio/index.js +8 -0
- package/{programs → dist/programs}/float2legendwithratio/logic.js +122 -145
- package/{programs → dist/programs}/float2legendwithratio/object.js +110 -141
- package/{programs → dist/programs}/globe-util/is-globe-moved.js +21 -27
- package/dist/programs/globeshell/index.js +8 -0
- package/dist/programs/globeshell/noise/noises.js +1 -0
- package/dist/programs/globeshell/wiggle/index.js +8 -0
- package/{programs → dist/programs}/globeshell/wiggle/logic.js +246 -272
- package/{programs → dist/programs}/globeshell/wiggle/object.js +72 -93
- package/dist/programs/helpers/blender/index.js +1 -0
- package/{programs → dist/programs}/helpers/blender/program.js +61 -73
- package/dist/programs/helpers/fadeaway/index.js +7 -0
- package/{programs → dist/programs}/helpers/fadeaway/logic.js +49 -53
- package/dist/programs/helpers/fadeaway/object.js +20 -0
- package/dist/programs/helpers/index.js +8 -0
- package/dist/programs/index.js +58 -0
- package/dist/programs/interface.js +1 -0
- package/{programs → dist/programs}/line-on-globe/angled-line.js +125 -155
- package/{programs → dist/programs}/line-on-globe/circle-accurate-3d.js +95 -121
- package/{programs → dist/programs}/line-on-globe/circle-accurate-flat.js +158 -204
- package/{programs → dist/programs}/line-on-globe/circle-accurate.js +117 -141
- package/{programs → dist/programs}/line-on-globe/circle.js +111 -135
- package/{programs → dist/programs}/line-on-globe/degree-padding-around-circle-3d.js +111 -140
- package/dist/programs/line-on-globe/index.js +1 -0
- package/{programs → dist/programs}/line-on-globe/lines-color-instanced-flat.js +91 -106
- package/{programs/line-on-globe/linestrip.ts → dist/programs/line-on-globe/linestrip.js} +108 -165
- package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +127 -171
- package/{programs → dist/programs}/line-on-globe/to-the-surface.js +83 -101
- package/dist/programs/line-on-globe/util.js +8 -0
- package/{programs → dist/programs}/picking/pickable-renderer.js +107 -135
- package/{programs → dist/programs}/point-on-globe/element-globe-surface-glow.js +101 -127
- package/{programs → dist/programs}/point-on-globe/element-point-glow.js +88 -119
- package/{programs → dist/programs}/point-on-globe/square-pixel-point.js +126 -141
- package/{programs/programcache.ts → dist/programs/programcache.js} +131 -131
- package/{programs → dist/programs}/rings/distancering/circleflatprogram.js +115 -95
- package/{programs → dist/programs}/rings/distancering/circlepaddingfreeangleprogram.js +320 -329
- package/{programs → dist/programs}/rings/distancering/circlepaddysharedbuffer.js +357 -420
- package/dist/programs/rings/distancering/index.js +14 -0
- package/{programs → dist/programs}/rings/distancering/paddyflatprogram.js +120 -94
- package/{programs → dist/programs}/rings/distancering/paddyflatprogram2d.js +122 -98
- package/{programs → dist/programs}/rings/distancering/paddyflatprogram3d.js +120 -94
- package/dist/programs/rings/distancering/shader.js +1 -0
- package/dist/programs/rings/index.js +17 -0
- package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +181 -221
- package/{programs → dist/programs}/totems/camerauniformblock.js +147 -184
- package/{programs → dist/programs}/totems/canvas-webglobe-info.js +102 -128
- package/{programs → dist/programs}/totems/gpu-selection-uniform-block.js +104 -128
- package/dist/programs/totems/index.js +40 -0
- package/dist/programs/two-d/pixel-circle.js +1 -0
- package/{programs → dist/programs}/two-d/pixel-padding-for-compass.js +101 -113
- package/{programs → dist/programs}/util.js +17 -20
- package/dist/programs/vectorfields/index.js +23 -0
- package/{programs → dist/programs}/vectorfields/logics/drawrectangleparticles.js +65 -83
- package/dist/programs/vectorfields/logics/index.js +12 -0
- package/{programs → dist/programs}/vectorfields/logics/pixelbased.js +84 -103
- package/{programs → dist/programs}/vectorfields/logics/ubo.js +55 -56
- package/{programs → dist/programs}/vectorfields/pingpongbuffermanager.js +76 -80
- package/dist/rangerings/enum.js +5 -0
- package/dist/rangerings/index.js +15 -0
- package/{rangerings → dist/rangerings}/plugin.js +560 -649
- package/{rangerings → dist/rangerings}/rangeringangletext.js +329 -368
- package/{rangerings → dist/rangerings}/ring-account.js +117 -129
- package/{shaders → dist/shaders}/fragment-toy/firework.js +5 -2
- package/{shaders → dist/shaders}/fragment-toy/singularity.js +5 -5
- package/{shape-on-terrain/arc/naive/plugin.ts → dist/shape-on-terrain/arc/naive/plugin.js} +252 -304
- package/{timetracks → dist/timetracks}/adaptors-line-strip.js +71 -80
- package/{timetracks → dist/timetracks}/adaptors.js +122 -133
- package/dist/timetracks/index.js +19 -0
- package/{timetracks → dist/timetracks}/plugin-line-strip.js +250 -295
- package/{timetracks → dist/timetracks}/plugin.js +258 -304
- package/{timetracks → dist/timetracks}/program-line-strip.js +416 -493
- package/{timetracks → dist/timetracks}/program.js +464 -542
- package/{timetracks → dist/timetracks}/programpoint-line-strip.js +101 -122
- package/{timetracks → dist/timetracks}/programpoint.js +101 -122
- package/{types.ts → dist/types.js} +15 -17
- package/{util → dist/util}/account/bufferoffsetmanager.js +179 -209
- package/dist/util/account/index.js +23 -0
- package/{util/account/single-attribute-buffer-management/buffer-manager.ts → dist/util/account/single-attribute-buffer-management/buffer-manager.js} +108 -119
- package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +150 -173
- package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
- package/{util/account/single-attribute-buffer-management/object-store.ts → dist/util/account/single-attribute-buffer-management/object-store.js} +51 -65
- package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
- package/{util → dist/util}/account/util.js +22 -22
- package/dist/util/algorithms/index.js +1 -0
- package/{util → dist/util}/algorithms/search-binary.js +28 -26
- package/dist/util/check/get.js +18 -0
- package/dist/util/check/index.js +1 -0
- package/dist/util/check/typecheck.js +49 -0
- package/{util → dist/util}/geometry/index.js +51 -53
- package/{util/gl-util/buffer/attribute-loader.ts → dist/util/gl-util/buffer/attribute-loader.js} +69 -85
- package/dist/util/gl-util/buffer/index.js +6 -0
- package/dist/util/gl-util/buffer/types.js +1 -0
- package/dist/util/gl-util/draw-options/methods.js +38 -0
- package/dist/util/gl-util/draw-options/types.js +15 -0
- package/{util/gl-util/uniform-block/manager.ts → dist/util/gl-util/uniform-block/manager.js} +156 -187
- package/dist/util/gl-util/uniform-block/shader.js +1 -0
- package/dist/util/gl-util/uniform-block/types.js +8 -0
- package/{util → dist/util}/heatwavedatamanager/datamanager.js +152 -168
- package/dist/util/heatwavedatamanager/index.js +10 -0
- package/{util → dist/util}/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -133
- package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +20 -22
- package/dist/util/index.js +57 -0
- package/dist/util/interpolation/index.js +1 -0
- package/dist/util/interpolation/timetrack/index.js +5 -0
- package/{util → dist/util}/interpolation/timetrack/timetrack-interpolator.js +79 -88
- package/{util → dist/util}/interpolation/timetrack/web-worker-str.js +5 -2
- package/{util → dist/util}/interpolation/timetrack/web-worker.js +48 -51
- package/{util → dist/util}/jshelpers/data-filler.js +20 -19
- package/{util → dist/util}/jshelpers/equality.js +20 -17
- package/dist/util/jshelpers/index.js +37 -0
- package/{util → dist/util}/jshelpers/timefilters.js +32 -32
- package/{util → dist/util}/picking/fence.js +46 -46
- package/{util → dist/util}/picking/picker-displayer.js +139 -177
- package/{util → dist/util}/programs/draw-texture-on-canvas.js +69 -82
- package/dist/util/programs/index.js +17 -0
- package/{util → dist/util}/programs/shapesonglobe.js +174 -206
- package/{util → dist/util}/programs/supersampletotextures.js +103 -132
- package/{util → dist/util}/programs/texturetoglobe.js +133 -154
- package/{util/shaderfunctions/geometrytransformations.ts → dist/util/shaderfunctions/geometrytransformations.js} +68 -116
- package/dist/util/shaderfunctions/index.js +18 -0
- package/{util → dist/util}/shaderfunctions/nodata.js +5 -4
- package/{util → dist/util}/shaderfunctions/noisefunctions.js +9 -10
- package/{util/surface-line-data/arc-bboxes.ts → dist/util/surface-line-data/arc-bboxes.js} +25 -42
- package/{util → dist/util}/surface-line-data/arcs-to-cuts.js +50 -74
- package/dist/util/surface-line-data/cut-arc.js +1 -0
- package/{util/surface-line-data/flow.ts → dist/util/surface-line-data/flow.js} +28 -52
- package/dist/util/surface-line-data/rbush-manager.js +1 -0
- package/dist/util/surface-line-data/types.js +1 -0
- package/dist/util/surface-line-data/web-worker.js +1 -0
- package/dist/util/webglobe/gldefaultstates.js +7 -0
- package/dist/util/webglobe/index.js +18 -0
- package/{util → dist/util}/webglobe/rasteroverlay.js +78 -96
- package/{util/webglobjectbuilders.ts → dist/util/webglobjectbuilders.js} +388 -456
- package/{util → dist/util}/webglobjectbuilders1.js +237 -271
- package/{waveparticles → dist/waveparticles}/adaptor.js +17 -16
- package/dist/waveparticles/index.js +10 -0
- package/{waveparticles → dist/waveparticles}/plugin.js +266 -313
- package/{wind → dist/wind}/imagetovectorfieldandmagnitude.js +35 -39
- package/dist/wind/index.js +14 -0
- package/{wind → dist/wind}/plugin.js +681 -812
- package/{wind → dist/wind}/vectorfieldimage.js +25 -27
- package/{write-text → dist/write-text}/attached-text-writer.js +91 -105
- package/{write-text → dist/write-text}/context-text.js +98 -125
- package/{write-text → dist/write-text}/context-text3.js +155 -178
- package/dist/write-text/index.js +5 -0
- package/{write-text → dist/write-text}/writer-plugin.js +8 -7
- package/package.json +5 -2
- package/Math/arc.ts +0 -76
- package/Math/constants.ts +0 -11
- package/Math/frustum/types.ts +0 -11
- package/Math/index.js +0 -0
- package/Math/juction/arc-plane.ts +0 -114
- package/Math/juction/line-sphere.ts +0 -30
- package/Math/line.ts +0 -70
- package/Math/matrix4.ts +0 -0
- package/Math/plane.ts +0 -86
- package/Math/roadmap.md +0 -10
- package/Math/types.ts +0 -45
- package/Math/utils.js +0 -3
- package/algorithms/search-binary.js +0 -14
- package/altitude-locator/adaptors.js +0 -0
- package/altitude-locator/keymethod.js +0 -0
- package/arrowfield/index.js +0 -3
- package/bearing-line/index.js +0 -2
- package/circle-line-chain/init.js +0 -0
- package/circle-line-chain/readme.md +0 -57
- package/circle-line-chain/util.js +0 -1
- package/compass-rose/index.js +0 -3
- package/compassrose/index.js +0 -2
- package/depth-locator/readme.md +0 -26
- package/globe-types.ts +0 -13
- package/heatwave/index.js +0 -4
- package/partialrings/goals.md +0 -17
- package/partialrings/index.js +0 -3
- package/point-heat-map/index.js +0 -0
- package/point-heat-map/readme.md +0 -15
- package/point-tracks/key-methods.js +0 -3
- package/programs/arrowfield/index.js +0 -2
- package/programs/float2legendwithratio/index.js +0 -3
- package/programs/globeshell/index.js +0 -2
- package/programs/globeshell/noise/noises.js +0 -0
- package/programs/globeshell/wiggle/index.js +0 -6
- package/programs/helpers/blender/index.js +0 -0
- package/programs/helpers/fadeaway/index.js +0 -3
- package/programs/helpers/fadeaway/object.js +0 -20
- package/programs/helpers/index.js +0 -2
- package/programs/index.js +0 -21
- package/programs/interface.ts +0 -7
- package/programs/line-on-globe/index.js +0 -0
- package/programs/line-on-globe/util.js +0 -8
- package/programs/rings/distancering/index.js +0 -5
- package/programs/rings/distancering/shader.js +0 -0
- package/programs/rings/index.js +0 -1
- package/programs/totems/camerauniformblock.d.ts +0 -48
- package/programs/totems/index.ts +0 -2
- package/programs/two-d/pixel-circle.js +0 -0
- package/programs/vectorfields/index.js +0 -3
- package/programs/vectorfields/logics/index.js +0 -5
- package/publish.bat +0 -60
- package/rangerings/enum.js +0 -3
- package/rangerings/index.js +0 -5
- package/shape-on-terrain/goal.md +0 -12
- package/tests/Math/junction/arc-plane.test.ts +0 -133
- package/tests/Math/junction/plane-plane.test.ts +0 -82
- package/tests/Math/plane.test.ts +0 -43
- package/tests/Math/vec3.test.ts +0 -14
- package/timetracks/index.js +0 -6
- package/timetracks/readme.md +0 -1
- package/tsconfig.json +0 -22
- package/util/account/index.js +0 -6
- package/util/account/single-attribute-buffer-management/index.ts +0 -13
- package/util/account/single-attribute-buffer-management/types.ts +0 -39
- package/util/algorithms/index.js +0 -0
- package/util/check/get.js +0 -13
- package/util/check/index.js +0 -0
- package/util/check/typecheck.js +0 -39
- package/util/gl-util/buffer/index.ts +0 -6
- package/util/gl-util/buffer/types.ts +0 -13
- package/util/gl-util/draw-options/methods.ts +0 -66
- package/util/gl-util/draw-options/types.ts +0 -28
- package/util/gl-util/uniform-block/roadmap.md +0 -70
- package/util/gl-util/uniform-block/shader.js +0 -0
- package/util/gl-util/uniform-block/types.ts +0 -27
- package/util/heatwavedatamanager/index.js +0 -3
- package/util/index.js +0 -13
- package/util/interpolation/index.js +0 -0
- package/util/interpolation/timetrack/index.js +0 -9
- package/util/jshelpers/index.js +0 -1
- package/util/programs/index.js +0 -1
- package/util/shaderfunctions/index.js +0 -2
- package/util/surface-line-data/cut-arc.js +0 -0
- package/util/surface-line-data/rbush-manager.js +0 -0
- package/util/surface-line-data/types.ts +0 -27
- package/util/surface-line-data/web-worker.js +0 -0
- package/util/webglobe/gldefaultstates.js +0 -5
- package/util/webglobe/index.js +0 -2
- package/waveparticles/index.js +0 -3
- package/wind/index.js +0 -5
- package/write-text/index.js +0 -1
|
@@ -1,63 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
// import {
|
|
3
|
-
// import {
|
|
4
|
-
// import {
|
|
5
|
-
|
|
6
|
-
// import { FrustumPlanes } from "./types";
|
|
7
|
-
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
// lookinfo.CenterLong
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
// const
|
|
19
|
-
// const
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
// ).
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
// }
|
|
51
|
-
|
|
52
|
-
// let interval = 0;
|
|
53
|
-
|
|
54
|
-
// const vectorInfo = (globe, args: null | Array<any>) => {
|
|
55
|
-
// interval++;
|
|
56
|
-
// if (interval % 100 === 0) {
|
|
57
|
-
// console.log("Fp:", globe.Fp.x / WORLD_RADIUS_3D, globe.Fp.y / WORLD_RADIUS_3D, globe.Fp.z / WORLD_RADIUS_3D);
|
|
58
|
-
// console.log("Fu:", globe.Fu.x, globe.Fu.y, globe.Fu.z);
|
|
59
|
-
|
|
60
|
-
// if (args) console.log(...args)
|
|
61
|
-
// interval = 0;
|
|
62
|
-
// }
|
|
63
|
-
// }
|
|
1
|
+
"use strict";
|
|
2
|
+
// import { Plane } from "../plane";
|
|
3
|
+
// import { Vector3D } from "../vector3d";
|
|
4
|
+
// import { WORLD_RADIUS_3D } from "../constants";
|
|
5
|
+
// import { Quaternion } from "../quaternion";
|
|
6
|
+
// import { FrustumPlanes } from "./types";
|
|
7
|
+
// const _quaternion = new Quaternion();
|
|
8
|
+
// export function getFrustum(globe: any, fieldOfView: number = 50 * Math.PI / 180,
|
|
9
|
+
// out: FrustumPlanes): void {
|
|
10
|
+
// const lookinfo = globe.api_GetCurrentLookInfo();
|
|
11
|
+
// lookinfo.CenterLong *= Math.PI / 180; // convert degrees to radians
|
|
12
|
+
// lookinfo.CenterLat *= Math.PI / 180; // convert degrees to radians
|
|
13
|
+
// lookinfo.NorthAng *= Math.PI / 180; // convert degrees to radians
|
|
14
|
+
// const lookAtPosition = Vector3D.fromLongLatRadians(lookinfo.CenterLong, lookinfo.CenterLat);
|
|
15
|
+
// const cameraPosition = new Vector3D(globe.Fp.x, globe.Fp.y, globe.Fp.z).divideByScaler(WORLD_RADIUS_3D);
|
|
16
|
+
// const lookFromCamera = lookAtPosition.clone().subtract(cameraPosition).normalize();
|
|
17
|
+
// const cameraZ = new Vector3D(globe.Fu.x, globe.Fu.y, globe.Fu.z);
|
|
18
|
+
// const cameraY = cameraZ.clone().cross(lookFromCamera).normalize();
|
|
19
|
+
// const bottomNormal = cameraZ.clone().applyQuaternion(
|
|
20
|
+
// _quaternion.setFromAxisAngle(cameraY, -fieldOfView)
|
|
21
|
+
// ).normalize();
|
|
22
|
+
// const topNormal = cameraZ.clone().applyQuaternion(
|
|
23
|
+
// _quaternion.setFromAxisAngle(cameraY, fieldOfView)
|
|
24
|
+
// ).negate().normalize();
|
|
25
|
+
// const leftNormal = cameraY.clone().applyQuaternion(
|
|
26
|
+
// _quaternion.setFromAxisAngle(cameraZ, fieldOfView)
|
|
27
|
+
// ).negate().normalize();
|
|
28
|
+
// const rightNormal = cameraY.clone().applyQuaternion(
|
|
29
|
+
// _quaternion.setFromAxisAngle(cameraZ, -fieldOfView)
|
|
30
|
+
// ).normalize();
|
|
31
|
+
// out.top.set(topNormal, topNormal.dot(cameraPosition));
|
|
32
|
+
// out.bottom.set(bottomNormal, bottomNormal.dot(cameraPosition));
|
|
33
|
+
// out.left.set(leftNormal, leftNormal.dot(cameraPosition));
|
|
34
|
+
// out.right.set(rightNormal, rightNormal.dot(cameraPosition));
|
|
35
|
+
// out.far.set(cameraPosition.normalize(), 0.01);
|
|
36
|
+
// out.near = null; // Near plane is not calculated in this function, set to null
|
|
37
|
+
// vectorInfo(globe, [out]);
|
|
38
|
+
// }
|
|
39
|
+
// let interval = 0;
|
|
40
|
+
// const vectorInfo = (globe, args: null | Array<any>) => {
|
|
41
|
+
// interval++;
|
|
42
|
+
// if (interval % 100 === 0) {
|
|
43
|
+
// console.log("Fp:", globe.Fp.x / WORLD_RADIUS_3D, globe.Fp.y / WORLD_RADIUS_3D, globe.Fp.z / WORLD_RADIUS_3D);
|
|
44
|
+
// console.log("Fu:", globe.Fu.x, globe.Fu.y, globe.Fu.z);
|
|
45
|
+
// if (args) console.log(...args)
|
|
46
|
+
// interval = 0;
|
|
47
|
+
// }
|
|
48
|
+
// }
|
|
@@ -1,137 +1,112 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// // import { Vector3D, Quaternion, Plane, Ray, Matrix4 } from 'your-3d-math-library'; // <-- ADAPT THIS IMPORT
|
|
4
|
-
|
|
5
|
-
// import {
|
|
6
|
-
// import {
|
|
7
|
-
// import {
|
|
8
|
-
// import {
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
// const
|
|
13
|
-
// const
|
|
14
|
-
// const
|
|
15
|
-
// const
|
|
16
|
-
// const
|
|
17
|
-
// const
|
|
18
|
-
// const
|
|
19
|
-
// const
|
|
20
|
-
// const
|
|
21
|
-
// const
|
|
22
|
-
// const
|
|
23
|
-
//
|
|
24
|
-
// const
|
|
25
|
-
|
|
26
|
-
// // --- Assume these
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
// //
|
|
31
|
-
// //
|
|
32
|
-
// //
|
|
33
|
-
// //
|
|
34
|
-
// //
|
|
35
|
-
// //
|
|
36
|
-
|
|
37
|
-
// //
|
|
38
|
-
// //
|
|
39
|
-
// //
|
|
40
|
-
// //
|
|
41
|
-
// //
|
|
42
|
-
// // // ... other
|
|
43
|
-
// // }
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
// //
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
// //
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
// //
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
//
|
|
113
|
-
// // Rotates (0, 0, -1) around (1, 0, 0) by fieldOfView
|
|
114
|
-
// _initialBottomRayDir.set(0, -Math.sin(fieldOfView), -Math.cos(fieldOfView));
|
|
115
|
-
|
|
116
|
-
// // 4. Calculate Final Bottom Ray (World)
|
|
117
|
-
// _fieldOfViewBottomRay.direction.copy(_initialBottomRayDir).applyQuaternion(_qOrient).normalize();
|
|
118
|
-
// _fieldOfViewBottomRay.origin.copy(_cameraPosition);
|
|
119
|
-
|
|
120
|
-
// // 5. Intersection and Plane
|
|
121
|
-
// const intersection = (_fieldOfViewBottomRay as any).intersectionSphere(_origin3d, 1); // Cast to any if method isn't standard
|
|
122
|
-
|
|
123
|
-
// if (intersection && intersection.length > 0) {
|
|
124
|
-
// // If ray intersects, use the closest point for the plane
|
|
125
|
-
// out.setFromNormalAndPoint(_lookFromOrigin, intersection[0]);
|
|
126
|
-
// } else {
|
|
127
|
-
// // If ray does not intersect (FOV covers globe or misses)
|
|
128
|
-
// // WARNING: This sets a plane through the globe's center.
|
|
129
|
-
// // This might not be the desired behavior for culling.
|
|
130
|
-
// // Consider what should happen if the whole globe *is* visible.
|
|
131
|
-
// out.set(_lookFromOrigin, 0.0);
|
|
132
|
-
// }
|
|
133
|
-
|
|
134
|
-
// return out;
|
|
135
|
-
// }
|
|
136
|
-
|
|
137
|
-
// export { calculateHorizonPlane };
|
|
1
|
+
"use strict";
|
|
2
|
+
// TODO: REMOVE
|
|
3
|
+
// // import { Vector3D, Quaternion, Plane, Ray, Matrix4 } from 'your-3d-math-library'; // <-- ADAPT THIS IMPORT
|
|
4
|
+
// import { Vector3D } from '../vector3d';
|
|
5
|
+
// import { Plane } from '../plane';
|
|
6
|
+
// import { Line } from '../line';
|
|
7
|
+
// import { Matrix4 } from '../matrix4';
|
|
8
|
+
// import { Quaternion } from '../quaternion';
|
|
9
|
+
// // --- Assume these static helper variables exist within your class ---
|
|
10
|
+
// const _lookFromOrigin = new Vector3D();
|
|
11
|
+
// const _cameraPosition = new Vector3D();
|
|
12
|
+
// const _finalForward = new Vector3D();
|
|
13
|
+
// const _approxUp = new Vector3D();
|
|
14
|
+
// const _finalRight = new Vector3D();
|
|
15
|
+
// const _finalUp = new Vector3D();
|
|
16
|
+
// const _tempVec = new Vector3D(); // General purpose helper
|
|
17
|
+
// const _initialBottomRayDir = new Vector3D();
|
|
18
|
+
// const _qOrient = new Quaternion();
|
|
19
|
+
// const _rollQuaternion = new Quaternion();
|
|
20
|
+
// const _rotationMatrix = new Matrix4();
|
|
21
|
+
// const _fieldOfViewBottomRay = new Line(new Vector3D(), new Vector3D());
|
|
22
|
+
// const _origin3d = new Vector3D(0, 0, 0); // Globe Center
|
|
23
|
+
// // --- Assume these constants exist ---
|
|
24
|
+
// const WORLD_RADIUS_3D = 6371000; // Example: Earth radius
|
|
25
|
+
// const FIELD_OF_VIEW = (25 * Math.PI) / 180; // Example: 25 degrees half-FOV in radians
|
|
26
|
+
// // // --- Assume Plane class has these methods ---
|
|
27
|
+
// // interface Plane {
|
|
28
|
+
// // setFromNormalAndPoint(normal: Vector3D, point: Vector3D): this;
|
|
29
|
+
// // set(normal: Vector3D, constant: number): this;
|
|
30
|
+
// // // ... other plane methods
|
|
31
|
+
// // }
|
|
32
|
+
// // // --- Assume Ray class has these methods ---
|
|
33
|
+
// // interface Ray {
|
|
34
|
+
// // origin: Vector3D;
|
|
35
|
+
// // direction: Vector3D;
|
|
36
|
+
// // intersectionSphere(center: Vector3D, radius: number): Vector3D[] | null; // Or similar
|
|
37
|
+
// // // ... other ray methods
|
|
38
|
+
// // }
|
|
39
|
+
// // // --- Assume Vector3D has setFromLongLat ---
|
|
40
|
+
// // interface Vector3D {
|
|
41
|
+
// // setFromLongLat(lon: number, lat: number): this;
|
|
42
|
+
// // // ... other vector methods
|
|
43
|
+
// // }
|
|
44
|
+
// // // --- END OF ASSUMPTIONS ---
|
|
45
|
+
// /**
|
|
46
|
+
// * Calculates a culling plane representing the bottom edge of the camera's field of view.
|
|
47
|
+
// * @param globe - The globe object, expected to have api_GetCurrentLookInfo and Fp properties.
|
|
48
|
+
// * @param out - The Plane object to store the result.
|
|
49
|
+
// * @param fieldOfView - The vertical half-angle of the field of view in radians.
|
|
50
|
+
// * @returns The calculated Plane.
|
|
51
|
+
// */
|
|
52
|
+
// function calculateHorizonPlane(globe: any, out: Plane, fieldOfView: number = FIELD_OF_VIEW): Plane {
|
|
53
|
+
// const cameraLookInfo = globe.api_GetCurrentLookInfo();
|
|
54
|
+
// cameraLookInfo.CenterLong *= Math.PI / 180;
|
|
55
|
+
// cameraLookInfo.CenterLat *= Math.PI / 180;
|
|
56
|
+
// // cameraLookInfo.Tilt *= Math.PI / 180; // Tilt is now implicitly handled
|
|
57
|
+
// cameraLookInfo.NorthAng *= Math.PI / 180;
|
|
58
|
+
// // Set _lookFromOrigin based on camera target (Lon/Lat)
|
|
59
|
+
// (_lookFromOrigin as any).setFromLongLat(cameraLookInfo.CenterLong, cameraLookInfo.CenterLat); // Cast to any if setFromLongLat is custom
|
|
60
|
+
// // 1. Calculate _cameraPosition and _finalForward (_lookFromCamera)
|
|
61
|
+
// _cameraPosition.set(globe.Fp.x, globe.Fp.y, globe.Fp.z); // Using your X negation
|
|
62
|
+
// _cameraPosition.divideScalar(WORLD_RADIUS_3D); // Scale to unit sphere
|
|
63
|
+
// Vector3D.subVectors(_lookFromOrigin, _cameraPosition, _finalForward).normalize();
|
|
64
|
+
// // 2. Calculate Q_orient (Final Camera Orientation Quaternion)
|
|
65
|
+
// // Use the vector from origin to camera as an initial 'up' reference
|
|
66
|
+
// _approxUp.copy(_cameraPosition).normalize();
|
|
67
|
+
// // Calculate Right vector using cross product
|
|
68
|
+
// Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
|
|
69
|
+
// // Handle edge case: If looking straight along (or opposite to) _approxUp
|
|
70
|
+
// if (_finalRight.lengthSq() < 0.0001) {
|
|
71
|
+
// // If vectors are parallel, _approxUp is not good.
|
|
72
|
+
// // Choose a different 'up', e.g., if _approxUp is near Z, use Y.
|
|
73
|
+
// if (Math.abs(_approxUp.z) > 0.9) {
|
|
74
|
+
// _approxUp.set(0, 1, 0);
|
|
75
|
+
// } else {
|
|
76
|
+
// _approxUp.set(0, 0, 1);
|
|
77
|
+
// }
|
|
78
|
+
// Vector3D.crossVectors(_finalForward, _approxUp, _finalRight).normalize();
|
|
79
|
+
// }
|
|
80
|
+
// // Calculate the 'true' Up vector, orthogonal to Right and Forward
|
|
81
|
+
// Vector3D.crossVectors(_finalRight, _finalForward, _finalUp).normalize();
|
|
82
|
+
// // Apply NorthAng (Roll) around the Forward axis
|
|
83
|
+
// _rollQuaternion.setFromAxisAngle(_finalForward, cameraLookInfo.NorthAng);
|
|
84
|
+
// _finalUp.applyQuaternion(_rollQuaternion);
|
|
85
|
+
// _finalRight.applyQuaternion(_rollQuaternion); // Must rotate Right as well!
|
|
86
|
+
// // Create Q_orient from the final basis vectors (Right, Up, -Forward)
|
|
87
|
+
// // This assumes a Matrix4.makeBasis(x, y, z) exists and builds a rotation matrix.
|
|
88
|
+
// // It also assumes local camera looks down -Z, hence negating _finalForward for the Z basis.
|
|
89
|
+
// _tempVec.copy(_finalForward).negate();
|
|
90
|
+
// _rotationMatrix.makeBasis(_finalRight, _finalUp, _tempVec); // <-- ADAPT: Ensure your library has makeBasis or equivalent
|
|
91
|
+
// _qOrient.setFromRotationMatrix(_rotationMatrix); // <-- ADAPT: Ensure this function exists
|
|
92
|
+
// // 3. Calculate Initial Bottom Ray (Local: -Z forward, Y up, X right)
|
|
93
|
+
// // Rotates (0, 0, -1) around (1, 0, 0) by fieldOfView
|
|
94
|
+
// _initialBottomRayDir.set(0, -Math.sin(fieldOfView), -Math.cos(fieldOfView));
|
|
95
|
+
// // 4. Calculate Final Bottom Ray (World)
|
|
96
|
+
// _fieldOfViewBottomRay.direction.copy(_initialBottomRayDir).applyQuaternion(_qOrient).normalize();
|
|
97
|
+
// _fieldOfViewBottomRay.origin.copy(_cameraPosition);
|
|
98
|
+
// // 5. Intersection and Plane
|
|
99
|
+
// const intersection = (_fieldOfViewBottomRay as any).intersectionSphere(_origin3d, 1); // Cast to any if method isn't standard
|
|
100
|
+
// if (intersection && intersection.length > 0) {
|
|
101
|
+
// // If ray intersects, use the closest point for the plane
|
|
102
|
+
// out.setFromNormalAndPoint(_lookFromOrigin, intersection[0]);
|
|
103
|
+
// } else {
|
|
104
|
+
// // If ray does not intersect (FOV covers globe or misses)
|
|
105
|
+
// // WARNING: This sets a plane through the globe's center.
|
|
106
|
+
// // This might not be the desired behavior for culling.
|
|
107
|
+
// // Consider what should happen if the whole globe *is* visible.
|
|
108
|
+
// out.set(_lookFromOrigin, 0.0);
|
|
109
|
+
// }
|
|
110
|
+
// return out;
|
|
111
|
+
// }
|
|
112
|
+
// export { calculateHorizonPlane };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.arcSlice = arcSlice;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const vec3_1 = require("../vec3");
|
|
6
|
+
const line_1 = require("../line");
|
|
7
|
+
const plane_1 = require("../plane");
|
|
8
|
+
const arc_1 = require("../arc");
|
|
9
|
+
const plane_plane_1 = require("./plane-plane");
|
|
10
|
+
const line_sphere_1 = require("./line-sphere");
|
|
11
|
+
const _intersectionLine = /*@__PURE__*/ line_1.line.create();
|
|
12
|
+
const _originPlane = /*@__PURE__*/ plane_1.plane.create();
|
|
13
|
+
_originPlane.distance = 0;
|
|
14
|
+
const _originSphere = /*@__PURE__*/ { center: vec3_1.vec3.create(0, 0, 0), radius: 1 };
|
|
15
|
+
const _intersectionPoints = /*@__PURE__*/ [vec3_1.vec3.create(), vec3_1.vec3.create()];
|
|
16
|
+
// TODO: out must be [Arc, Arc] there is a case where split into three arcs, visible by points or arcs but middle is not visible
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param out \
|
|
20
|
+
* @param inArc
|
|
21
|
+
* @param juctionPlane
|
|
22
|
+
* @returns number of arcs segments in the junction divided by the junction plane.
|
|
23
|
+
*/
|
|
24
|
+
function arcSlice(out, inArc, juctionPlane) {
|
|
25
|
+
// arc coverPlane and junctionPlane intersection exist in the range of unit sphere
|
|
26
|
+
const coverRadiusAngle = plane_1.plane.getUnitSphereRadiusAngle(inArc.coverPlane);
|
|
27
|
+
const visibleRadiusAngle = plane_1.plane.getUnitSphereRadiusAngle(juctionPlane);
|
|
28
|
+
// TODO: RESEARCH efficient approach --
|
|
29
|
+
const angleBetween_Cover_Visible = Math.acos(vec3_1.vec3.dot(inArc.coverPlane.normal, juctionPlane.normal));
|
|
30
|
+
if (coverRadiusAngle + visibleRadiusAngle < angleBetween_Cover_Visible - constants_1.EPSILON) { // case A: out of range
|
|
31
|
+
return 0; // No intersection
|
|
32
|
+
}
|
|
33
|
+
// ------------------------------------
|
|
34
|
+
// the case when the arc is completely covered by the juction plane
|
|
35
|
+
if (visibleRadiusAngle + constants_1.EPSILON >= angleBetween_Cover_Visible + coverRadiusAngle) { // case B: fully visible
|
|
36
|
+
arc_1.arc.copy(out[0], inArc);
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
// plane-plane intersection line should be calculated for the rest of the calculations
|
|
40
|
+
vec3_1.vec3.copy(_originPlane.normal, inArc.normal);
|
|
41
|
+
const isPlaneJunctions = (0, plane_plane_1.planePlaneJuction)(_intersectionLine, _originPlane, juctionPlane);
|
|
42
|
+
if (!isPlaneJunctions) { // case C: planes are parallel.
|
|
43
|
+
// case A covers opposite directions
|
|
44
|
+
// case B Covers they face each other
|
|
45
|
+
throw new Error("Unexpected case: planes are parallel, case A and B should Cover it");
|
|
46
|
+
}
|
|
47
|
+
// --- read until here ---
|
|
48
|
+
// calculate the intersection points
|
|
49
|
+
const isSphereIntersection = (0, line_sphere_1.lineSphereIntersection)(_intersectionPoints, _intersectionLine, _originSphere);
|
|
50
|
+
if (!isSphereIntersection) {
|
|
51
|
+
// other edge caes should be covered by now
|
|
52
|
+
return 0; // No intersection
|
|
53
|
+
}
|
|
54
|
+
const i0IsCovered = plane_1.plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[0]) > -constants_1.EPSILON;
|
|
55
|
+
const i1IsCovered = plane_1.plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[1]) > -constants_1.EPSILON;
|
|
56
|
+
const p0IsVisible = plane_1.plane.distanceToPoint(juctionPlane, inArc.p0) > -constants_1.EPSILON;
|
|
57
|
+
const p1IsVisible = plane_1.plane.distanceToPoint(juctionPlane, inArc.p1) > -constants_1.EPSILON;
|
|
58
|
+
if (!p0IsVisible && !p1IsVisible && !i0IsCovered && !i1IsCovered) {
|
|
59
|
+
return 0; // No intersection
|
|
60
|
+
}
|
|
61
|
+
if (i0IsCovered && i1IsCovered && p0IsVisible && p1IsVisible) {
|
|
62
|
+
// calculate which points are closer
|
|
63
|
+
const p0i0DistanceSquared = vec3_1.vec3.distanceSquared(inArc.p0, _intersectionPoints[0]);
|
|
64
|
+
const p0i1DistanceSquared = vec3_1.vec3.distanceSquared(inArc.p0, _intersectionPoints[1]);
|
|
65
|
+
const case0 = p0i0DistanceSquared < p0i1DistanceSquared;
|
|
66
|
+
arc_1.arc.set(out[0], inArc.p0, case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
|
|
67
|
+
arc_1.arc.set(out[1], inArc.p1, !case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
|
|
68
|
+
return 2;
|
|
69
|
+
}
|
|
70
|
+
if (i0IsCovered && i1IsCovered) {
|
|
71
|
+
arc_1.arc.set(out[0], _intersectionPoints[0], _intersectionPoints[1]);
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
if (p0IsVisible && p1IsVisible) {
|
|
75
|
+
arc_1.arc.copy(out[0], inArc);
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
if ((p0IsVisible || p1IsVisible) !== (i0IsCovered || i1IsCovered)) {
|
|
79
|
+
throw new Error("Unexpected case: one covered and one visible point must be present");
|
|
80
|
+
}
|
|
81
|
+
arc_1.arc.set(out[0], p0IsVisible ? inArc.p0 : inArc.p1, i0IsCovered ? _intersectionPoints[0] : _intersectionPoints[1]);
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lineSphereIntersection = lineSphereIntersection;
|
|
4
|
+
const vec3_1 = require("../vec3");
|
|
5
|
+
const line_1 = require("../line");
|
|
6
|
+
const _0vector = /*@__PURE__*/ vec3_1.vec3.create(0, 0, 0);
|
|
7
|
+
function lineSphereIntersection(out, inLine, inSphere) {
|
|
8
|
+
vec3_1.vec3.subtract(_0vector, inLine.origin, inSphere.center);
|
|
9
|
+
const distanceSquared = vec3_1.vec3.lengthSquared(_0vector);
|
|
10
|
+
const radiusSquared = inSphere.radius * inSphere.radius;
|
|
11
|
+
const dot = vec3_1.vec3.dot(_0vector, inLine.direction);
|
|
12
|
+
const dotSquared = dot * dot;
|
|
13
|
+
const _a = dotSquared + radiusSquared - distanceSquared;
|
|
14
|
+
if (_a < 0) {
|
|
15
|
+
return false; // no intersection
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const a = Math.sqrt(_a);
|
|
19
|
+
const t1 = dot - a;
|
|
20
|
+
const t2 = dot + a;
|
|
21
|
+
line_1.line.at(out[0], inLine, t1);
|
|
22
|
+
line_1.line.at(out[1], inLine, t2);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,66 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (
|
|
21
|
-
return false; //
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
|
|
60
|
-
} else {
|
|
61
|
-
return false; // No valid intersection point
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planePlaneJuction = planePlaneJuction;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const vec3_1 = require("../vec3");
|
|
6
|
+
const _normal1 = vec3_1.vec3.create();
|
|
7
|
+
const _normal2 = vec3_1.vec3.create();
|
|
8
|
+
function planePlaneJuction(out, plane1, plane2) {
|
|
9
|
+
vec3_1.vec3.copy(_normal1, plane1.normal);
|
|
10
|
+
vec3_1.vec3.copy(_normal2, plane2.normal);
|
|
11
|
+
const distance1 = plane1.distance;
|
|
12
|
+
const distance2 = plane2.distance;
|
|
13
|
+
const { origin, direction } = out;
|
|
14
|
+
const dot = vec3_1.vec3.dot(_normal1, _normal2);
|
|
15
|
+
if (Math.abs(dot) > 1 - constants_1.EPSILON) {
|
|
16
|
+
return false; // Planes are parallel, no intersection
|
|
17
|
+
}
|
|
18
|
+
vec3_1.vec3.cross(direction, _normal1, _normal2);
|
|
19
|
+
const magnitudeSquired = vec3_1.vec3.lengthSquared(out.direction);
|
|
20
|
+
if (magnitudeSquired < constants_1.EPSILON) {
|
|
21
|
+
return false; // No valid intersection line
|
|
22
|
+
}
|
|
23
|
+
const magnitude = Math.sqrt(magnitudeSquired);
|
|
24
|
+
direction[0] /= magnitude;
|
|
25
|
+
direction[1] /= magnitude;
|
|
26
|
+
direction[2] /= magnitude;
|
|
27
|
+
let determinant;
|
|
28
|
+
// Calculate the intersection point
|
|
29
|
+
// set z = 0
|
|
30
|
+
determinant = _normal1[0] * _normal2[1] - _normal1[1] * _normal2[0];
|
|
31
|
+
if (Math.abs(determinant) > constants_1.EPSILON) {
|
|
32
|
+
origin[0] = (distance1 * _normal2[1] - distance2 * _normal1[1]) / determinant;
|
|
33
|
+
origin[1] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
|
|
34
|
+
origin[2] = 0;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// set y = 0
|
|
38
|
+
determinant = _normal1[0] * _normal2[2] - _normal1[2] * _normal2[0];
|
|
39
|
+
if (Math.abs(determinant) > constants_1.EPSILON) {
|
|
40
|
+
origin[0] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
|
|
41
|
+
origin[1] = 0;
|
|
42
|
+
origin[2] = (distance2 * _normal1[0] - distance1 * _normal2[0]) / determinant;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// set x = 0
|
|
46
|
+
determinant = _normal1[1] * _normal2[2] - _normal1[2] * _normal2[1];
|
|
47
|
+
if (Math.abs(determinant) > constants_1.EPSILON) {
|
|
48
|
+
origin[0] = 0;
|
|
49
|
+
origin[1] = (distance1 * _normal2[2] - distance2 * _normal1[2]) / determinant;
|
|
50
|
+
origin[2] = (distance2 * _normal1[1] - distance1 * _normal2[1]) / determinant;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return false; // No valid intersection point
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|