@takram/three-geospatial 0.0.1-alpha.5 → 0.0.1-alpha.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.
@@ -0,0 +1,21 @@
1
+ // Taken from: https://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf
2
+ const vec2 poissonDisk[16] = vec2[16](
3
+ vec2(-0.94201624, -0.39906216),
4
+ vec2(0.94558609, -0.76890725),
5
+ vec2(-0.094184101, -0.9293887),
6
+ vec2(0.34495938, 0.2938776),
7
+ vec2(-0.91588581, 0.45771432),
8
+ vec2(-0.81544232, -0.87912464),
9
+ vec2(-0.38277543, 0.27676845),
10
+ vec2(0.97484398, 0.75648379),
11
+ vec2(0.44323325, -0.97511554),
12
+ vec2(0.53742981, -0.4737342),
13
+ vec2(-0.26496911, -0.41893023),
14
+ vec2(0.79197514, 0.19090188),
15
+ vec2(-0.2418884, 0.99706507),
16
+ vec2(-0.81409955, 0.9143759),
17
+ vec2(0.19984126, 0.78641367),
18
+ vec2(0.14383161, -0.1410079)
19
+ );
20
+
21
+ #define POISSON_DISK_COUNT (16)
@@ -0,0 +1,134 @@
1
+ float raySphereFirstIntersection(
2
+ const vec3 origin,
3
+ const vec3 direction,
4
+ const vec3 center,
5
+ const float radius
6
+ ) {
7
+ vec3 a = origin - center;
8
+ float b = 2.0 * dot(direction, a);
9
+ float c = dot(a, a) - radius * radius;
10
+ float discriminant = b * b - 4.0 * c;
11
+ return discriminant < 0.0
12
+ ? -1.0
13
+ : (-b - sqrt(discriminant)) * 0.5;
14
+ }
15
+
16
+ float raySphereFirstIntersection(const vec3 origin, const vec3 direction, const float radius) {
17
+ return raySphereFirstIntersection(origin, direction, vec3(0.0), radius);
18
+ }
19
+
20
+ vec4 raySphereFirstIntersection(
21
+ const vec3 origin,
22
+ const vec3 direction,
23
+ const vec3 center,
24
+ const vec4 radius
25
+ ) {
26
+ vec3 a = origin - center;
27
+ float b = 2.0 * dot(direction, a);
28
+ vec4 c = dot(a, a) - radius * radius;
29
+ vec4 discriminant = b * b - 4.0 * c;
30
+ vec4 mask = step(discriminant, vec4(0.0));
31
+ return mix((-b - sqrt(max(vec4(0.0), discriminant))) * 0.5, vec4(-1.0), mask);
32
+ }
33
+
34
+ vec4 raySphereFirstIntersection(const vec3 origin, const vec3 direction, const vec4 radius) {
35
+ return raySphereFirstIntersection(origin, direction, vec3(0.0), radius);
36
+ }
37
+
38
+ float raySphereSecondIntersection(
39
+ const vec3 origin,
40
+ const vec3 direction,
41
+ const vec3 center,
42
+ const float radius
43
+ ) {
44
+ vec3 a = origin - center;
45
+ float b = 2.0 * dot(direction, a);
46
+ float c = dot(a, a) - radius * radius;
47
+ float discriminant = b * b - 4.0 * c;
48
+ return discriminant < 0.0
49
+ ? -1.0
50
+ : (-b + sqrt(discriminant)) * 0.5;
51
+ }
52
+
53
+ float raySphereSecondIntersection(const vec3 origin, const vec3 direction, const float radius) {
54
+ return raySphereSecondIntersection(origin, direction, vec3(0.0), radius);
55
+ }
56
+
57
+ vec4 raySphereSecondIntersection(
58
+ const vec3 origin,
59
+ const vec3 direction,
60
+ const vec3 center,
61
+ const vec4 radius
62
+ ) {
63
+ vec3 a = origin - center;
64
+ float b = 2.0 * dot(direction, a);
65
+ vec4 c = dot(a, a) - radius * radius;
66
+ vec4 discriminant = b * b - 4.0 * c;
67
+ vec4 mask = step(discriminant, vec4(0.0));
68
+ return mix((-b + sqrt(max(vec4(0.0), discriminant))) * 0.5, vec4(-1.0), mask);
69
+ }
70
+
71
+ vec4 raySphereSecondIntersection(const vec3 origin, const vec3 direction, const vec4 radius) {
72
+ return raySphereSecondIntersection(origin, direction, vec3(0.0), radius);
73
+ }
74
+
75
+ void raySphereIntersections(
76
+ const vec3 origin,
77
+ const vec3 direction,
78
+ const vec3 center,
79
+ const float radius,
80
+ out float intersection1,
81
+ out float intersection2
82
+ ) {
83
+ vec3 a = origin - center;
84
+ float b = 2.0 * dot(direction, a);
85
+ float c = dot(a, a) - radius * radius;
86
+ float discriminant = b * b - 4.0 * c;
87
+ if (discriminant < 0.0) {
88
+ intersection1 = -1.0;
89
+ intersection2 = -1.0;
90
+ return;
91
+ } else {
92
+ float Q = sqrt(discriminant);
93
+ intersection1 = (-b - Q) * 0.5;
94
+ intersection2 = (-b + Q) * 0.5;
95
+ }
96
+ }
97
+
98
+ void raySphereIntersections(
99
+ const vec3 origin,
100
+ const vec3 direction,
101
+ const float radius,
102
+ out float intersection1,
103
+ out float intersection2
104
+ ) {
105
+ raySphereIntersections(origin, direction, vec3(0.0), radius, intersection1, intersection2);
106
+ }
107
+
108
+ void raySphereIntersections(
109
+ const vec3 origin,
110
+ const vec3 direction,
111
+ const vec3 center,
112
+ const vec4 radius,
113
+ out vec4 intersection1,
114
+ out vec4 intersection2
115
+ ) {
116
+ vec3 a = origin - center;
117
+ float b = 2.0 * dot(direction, a);
118
+ vec4 c = dot(a, a) - radius * radius;
119
+ vec4 discriminant = b * b - 4.0 * c;
120
+ vec4 mask = step(discriminant, vec4(0.0));
121
+ vec4 Q = sqrt(max(vec4(0.0), discriminant));
122
+ intersection1 = mix((-b - Q) * 0.5, vec4(-1.0), mask);
123
+ intersection2 = mix((-b + Q) * 0.5, vec4(-1.0), mask);
124
+ }
125
+
126
+ void raySphereIntersections(
127
+ const vec3 origin,
128
+ const vec3 direction,
129
+ const vec4 radius,
130
+ out vec4 intersection1,
131
+ out vec4 intersection2
132
+ ) {
133
+ raySphereIntersections(origin, direction, vec3(0.0), radius, intersection1, intersection2);
134
+ }
@@ -0,0 +1,9 @@
1
+ // A fifth-order polynomial approximation of Turbo color map.
2
+ // See: https://observablehq.com/@mbostock/turbo
3
+ // prettier-ignore
4
+ vec3 turbo(const float x) {
5
+ float r = 0.1357 + x * (4.5974 - x * (42.3277 - x * (130.5887 - x * (150.5666 - x * 58.1375))));
6
+ float g = 0.0914 + x * (2.1856 + x * (4.8052 - x * (14.0195 - x * (4.2109 + x * 2.7747))));
7
+ float b = 0.1067 + x * (12.5925 - x * (60.1097 - x * (109.0745 - x * (88.5066 - x * 26.8183))));
8
+ return vec3(r, g, b);
9
+ }
package/src/types.ts CHANGED
@@ -1,54 +1,8 @@
1
- import {
2
- type Matrix2,
3
- type Matrix3,
4
- type Matrix4,
5
- type Vector2,
6
- type Vector3,
7
- type Vector4
8
- } from 'three'
9
- import { type ReadonlyTuple } from 'type-fest'
1
+ import { type Uniform } from 'three'
10
2
 
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
3
  export type Callable = (...args: any) => any
13
4
 
14
- export type ReadonlyTuple2<T = number> = ReadonlyTuple<T, 2>
15
- export type ReadonlyTuple3<T = number> = ReadonlyTuple<T, 3>
16
- export type ReadonlyTuple4<T = number> = ReadonlyTuple<T, 4>
17
-
18
- // Non-readonly version of ReadonlyTuple. This is not type-safe because mutable
19
- // methods still exist in the type.
20
- // See https://github.com/sindresorhus/type-fest/blob/main/source/readonly-tuple.d.ts
21
- type BuildTupleHelper<
22
- Element,
23
- Length extends number,
24
- Rest extends Element[]
25
- > = Rest['length'] extends Length
26
- ? [...Rest]
27
- : BuildTupleHelper<Element, Length, [Element, ...Rest]>
28
-
29
- export type Tuple<T, Length extends number> = number extends Length
30
- ? readonly T[]
31
- : BuildTupleHelper<T, Length, []>
32
-
33
- export type Tuple2<T = number> = BuildTupleHelper<T, 2, []>
34
- export type Tuple3<T = number> = BuildTupleHelper<T, 3, []>
35
- export type Tuple4<T = number> = BuildTupleHelper<T, 4, []>
36
-
37
- // Suppose return type of the mutable methods of classes like Vector3 is `this`.
38
- // TODO: How can we specify `this` as a constraint?
39
- type ReadonlyThreeInstance<T> = Readonly<{
40
- [K in keyof T as T[K] extends Callable
41
- ? ReturnType<T[K]> extends T
42
- ? K extends 'clone'
43
- ? K
44
- : never
45
- : K
46
- : K]: T[K]
47
- }>
48
-
49
- export type ReadonlyVector2 = ReadonlyThreeInstance<Vector2>
50
- export type ReadonlyVector3 = ReadonlyThreeInstance<Vector3>
51
- export type ReadonlyVector4 = ReadonlyThreeInstance<Vector4>
52
- export type ReadonlyMatrix2 = ReadonlyThreeInstance<Matrix2>
53
- export type ReadonlyMatrix3 = ReadonlyThreeInstance<Matrix3>
54
- export type ReadonlyMatrix4 = ReadonlyThreeInstance<Matrix4>
5
+ export type UniformMap<T> = Omit<Map<string, Uniform>, 'get'> & {
6
+ get: <K extends keyof T>(key: K) => T[K]
7
+ set: <K extends keyof T>(key: K, value: T[K]) => void
8
+ }
@@ -0,0 +1,23 @@
1
+ // Based on: https://github.com/mrdoob/three.js/blob/r170/src/renderers/webgl/WebGLProgram.js#L294
2
+
3
+ const unrollLoopPattern =
4
+ /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*(?:i\s*\+\+|\+\+\s*i)\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g
5
+
6
+ function loopReplacer(
7
+ match: string,
8
+ start: string,
9
+ end: string,
10
+ snippet: string
11
+ ): string {
12
+ let string = ''
13
+ for (let i = parseInt(start); i < parseInt(end); ++i) {
14
+ string += snippet
15
+ .replace(/\[\s*i\s*\]/g, '[' + i + ']')
16
+ .replace(/UNROLLED_LOOP_INDEX/g, `${i}`)
17
+ }
18
+ return string
19
+ }
20
+
21
+ export function unrollLoops(string: string): string {
22
+ return string.replace(unrollLoopPattern, loopReplacer)
23
+ }
@@ -27,11 +27,11 @@ export declare function createDataTextureLoaderClass<T extends TypedArray>(parse
27
27
  export declare function createData3DTextureLoader<T extends TypedArray>(parser: TypedArrayParser<T>, parameters?: Data3DTextureParameters): DataLoader<Data3DTexture, T>;
28
28
  export declare function createDataTextureLoader<T extends TypedArray>(parser: TypedArrayParser<T>, parameters?: DataTextureParameters): DataLoader<DataTexture, T>;
29
29
  /** @deprecated Use createDataTextureLoaderClass instead. */
30
- export declare const Int16Data2DLoader: Class<DataLoader<DataTexture, Int16Array>>;
30
+ export declare const Int16Data2DLoader: Class<DataLoader<DataTexture, Int16Array<ArrayBufferLike>>>;
31
31
  /** @deprecated Use createDataTextureLoaderClass instead. */
32
- export declare const Uint16Data2DLoader: Class<DataLoader<DataTexture, Uint16Array>>;
32
+ export declare const Uint16Data2DLoader: Class<DataLoader<DataTexture, Uint16Array<ArrayBufferLike>>>;
33
33
  /** @deprecated Use createDataTextureLoaderClass instead. */
34
- export declare const Float32Data2DLoader: Class<DataLoader<DataTexture, Float32Array>>;
34
+ export declare const Float32Data2DLoader: Class<DataLoader<DataTexture, Float32Array<ArrayBufferLike>>>;
35
35
  /** @deprecated Use createData3DTextureLoaderClass instead. */
36
- export declare const Float32Data3DLoader: Class<DataLoader<Data3DTexture, Float32Array>>;
36
+ export declare const Float32Data3DLoader: Class<DataLoader<Data3DTexture, Float32Array<ArrayBufferLike>>>;
37
37
  export {};
@@ -0,0 +1,5 @@
1
+ import { Data3DTexture, Loader } from 'three';
2
+
3
+ export declare class Texture3DLoader extends Loader<Data3DTexture> {
4
+ load(url: string, onLoad: (data: Data3DTexture) => void, onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
5
+ }
@@ -9,8 +9,8 @@ export declare abstract class TypedArrayLoader<T extends TypedArray> extends Loa
9
9
  export declare function createTypedArrayLoaderClass<T extends TypedArray>(parser: TypedArrayParser<T>): Class<TypedArrayLoader<T>>;
10
10
  export declare function createTypedArrayLoader<T extends TypedArray>(parser: TypedArrayParser<T>): TypedArrayLoader<T>;
11
11
  /** @deprecated Use createTypedArrayLoaderClass instead. */
12
- export declare const Int16ArrayLoader: Class<TypedArrayLoader<Int16Array>>;
12
+ export declare const Int16ArrayLoader: Class<TypedArrayLoader<Int16Array<ArrayBufferLike>>>;
13
13
  /** @deprecated Use createTypedArrayLoaderClass instead. */
14
- export declare const Uint16ArrayLoader: Class<TypedArrayLoader<Uint16Array>>;
14
+ export declare const Uint16ArrayLoader: Class<TypedArrayLoader<Uint16Array<ArrayBufferLike>>>;
15
15
  /** @deprecated Use createTypedArrayLoaderClass instead. */
16
- export declare const Float32ArrayLoader: Class<TypedArrayLoader<Float32Array>>;
16
+ export declare const Float32ArrayLoader: Class<TypedArrayLoader<Float32Array<ArrayBufferLike>>>;
@@ -0,0 +1,3 @@
1
+ export declare const STBN_TEXTURE_WIDTH = 128;
2
+ export declare const STBN_TEXTURE_HEIGHT = 128;
3
+ export declare const STBN_TEXTURE_DEPTH = 64;
package/types/index.d.ts CHANGED
@@ -1,9 +1,7 @@
1
- export declare const depthShader: string;
2
- export declare const packingShader: string;
3
- export declare const transformShader: string;
4
1
  export * from './ArrayBufferLoader';
5
2
  export * from './assertions';
6
3
  export * from './bufferGeometry';
4
+ export * from './constants';
7
5
  export * from './DataLoader';
8
6
  export * from './Ellipsoid';
9
7
  export * from './EllipsoidGeometry';
@@ -11,9 +9,11 @@ export * from './Geodetic';
11
9
  export * from './math';
12
10
  export * from './PointOfView';
13
11
  export * from './Rectangle';
12
+ export * from './resolveIncludes';
14
13
  export * from './TileCoordinate';
15
14
  export * from './TilingScheme';
16
15
  export * from './typedArray';
17
16
  export * from './TypedArrayLoader';
18
17
  export * from './typedArrayParsers';
19
18
  export * from './types';
19
+ export * from './unrollLoops';
@@ -1,2 +1,3 @@
1
1
  export * from './EastNorthUpFrame';
2
2
  export * from './EllipsoidMesh';
3
+ export * from './types';
@@ -0,0 +1,22 @@
1
+ import { Callable } from '../types';
2
+ import { WritableKeysOf } from 'type-fest';
3
+ import { Vector2 as Vector2Impl, Vector3 as Vector3Impl, Vector4 as Vector4Impl } from 'three';
4
+ import { Color, ExtendedColors, NodeProps, Overwrite, Vector2, Vector3, Vector4 } from '@react-three/fiber';
5
+
6
+ export type ExtendedVectors<T> = {
7
+ [K in keyof T]: Vector2Impl extends T[K] ? Vector2 | T[K] : Vector3Impl extends T[K] ? Vector3 | T[K] : Vector4Impl extends T[K] ? Vector4 | T[K] : T[K];
8
+ };
9
+ export type ExtendedProps<T> = ExtendedColors<ExtendedVectors<T>>;
10
+ type NonFunctionKeys<T> = keyof {
11
+ [K in keyof T as Callable extends T[K] ? never : K]: any;
12
+ };
13
+ type WritableNonExtendableKeysOf<T> = WritableKeysOf<T> | keyof {
14
+ [K in keyof T as Vector2Impl extends T[K] ? K : Vector3Impl extends T[K] ? K : Vector4Impl extends T[K] ? K : Color extends T[K] ? K : never]: any;
15
+ };
16
+ export type PassThoughInstanceProps<RefType, Args extends readonly any[], Props> = Overwrite<ExtendedProps<{
17
+ [K in NonFunctionKeys<Props> as K extends WritableNonExtendableKeysOf<Props> ? K : never]: Props[K];
18
+ }>, NodeProps<RefType, Args>>;
19
+ export type ExpandNestedProps<T, Prop extends keyof T & string> = {
20
+ [K in keyof T[Prop] as K extends string ? `${Prop}-${K}` : never]: T[Prop][K];
21
+ };
22
+ export {};
@@ -0,0 +1,5 @@
1
+ interface Includes {
2
+ [key: string]: string | Includes;
3
+ }
4
+ export declare function resolveIncludes(source: string, includes: Includes): string;
5
+ export {};
@@ -0,0 +1,8 @@
1
+ export declare const depth: string;
2
+ export declare const generators: string;
3
+ export declare const math: string;
4
+ export declare const packing: string;
5
+ export declare const poissonDisk: string;
6
+ export declare const raySphereIntersection: string;
7
+ export declare const transform: string;
8
+ export declare const turbo: string;
package/types/types.d.ts CHANGED
@@ -1,22 +1,7 @@
1
- import { ReadonlyTuple } from 'type-fest';
2
- import { Matrix2, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
1
+ import { Uniform } from 'three';
3
2
 
4
3
  export type Callable = (...args: any) => any;
5
- export type ReadonlyTuple2<T = number> = ReadonlyTuple<T, 2>;
6
- export type ReadonlyTuple3<T = number> = ReadonlyTuple<T, 3>;
7
- export type ReadonlyTuple4<T = number> = ReadonlyTuple<T, 4>;
8
- type BuildTupleHelper<Element, Length extends number, Rest extends Element[]> = Rest['length'] extends Length ? [...Rest] : BuildTupleHelper<Element, Length, [Element, ...Rest]>;
9
- export type Tuple<T, Length extends number> = number extends Length ? readonly T[] : BuildTupleHelper<T, Length, []>;
10
- export type Tuple2<T = number> = BuildTupleHelper<T, 2, []>;
11
- export type Tuple3<T = number> = BuildTupleHelper<T, 3, []>;
12
- export type Tuple4<T = number> = BuildTupleHelper<T, 4, []>;
13
- type ReadonlyThreeInstance<T> = Readonly<{
14
- [K in keyof T as T[K] extends Callable ? ReturnType<T[K]> extends T ? K extends 'clone' ? K : never : K : K]: T[K];
15
- }>;
16
- export type ReadonlyVector2 = ReadonlyThreeInstance<Vector2>;
17
- export type ReadonlyVector3 = ReadonlyThreeInstance<Vector3>;
18
- export type ReadonlyVector4 = ReadonlyThreeInstance<Vector4>;
19
- export type ReadonlyMatrix2 = ReadonlyThreeInstance<Matrix2>;
20
- export type ReadonlyMatrix3 = ReadonlyThreeInstance<Matrix3>;
21
- export type ReadonlyMatrix4 = ReadonlyThreeInstance<Matrix4>;
22
- export {};
4
+ export type UniformMap<T> = Omit<Map<string, Uniform>, 'get'> & {
5
+ get: <K extends keyof T>(key: K) => T[K];
6
+ set: <K extends keyof T>(key: K, value: T[K]) => void;
7
+ };
@@ -0,0 +1 @@
1
+ export declare function unrollLoops(string: string): string;