@shapediver/viewer.rendering-engine.intersection-engine 1.15.6 → 2.0.1
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/dist/implementation/IntersectionEngine.d.ts +2 -2
- package/dist/implementation/IntersectionEngine.d.ts.map +1 -1
- package/dist/implementation/IntersectionEngine.js +12 -8
- package/dist/implementation/IntersectionEngine.js.map +1 -1
- package/dist/interfaces/IIntersection.d.ts +2 -2
- package/dist/interfaces/IIntersection.d.ts.map +1 -1
- package/dist/interfaces/IIntersectionEngine.d.ts +2 -2
- package/dist/interfaces/IIntersectionEngine.d.ts.map +1 -1
- package/dist/interfaces/IIntersectionFilter.d.ts +2 -2
- package/dist/interfaces/IIntersectionFilter.d.ts.map +1 -1
- package/package.json +15 -11
- package/src/implementation/IntersectionEngine.ts +291 -0
- package/src/index.ts +13 -0
- package/src/interfaces/IIntersection.ts +8 -0
- package/src/interfaces/IIntersectionEngine.ts +8 -0
- package/src/interfaces/IIntersectionFilter.ts +5 -0
- package/src/interfaces/IRay.ts +6 -0
- package/tsconfig.json +17 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
2
|
import { IIntersection } from "../interfaces/IIntersection";
|
|
3
3
|
import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
|
|
4
4
|
import { IIntersectionFilter } from "../interfaces/IIntersectionFilter";
|
|
5
5
|
import { IRay } from "../interfaces/IRay";
|
|
6
6
|
export declare class IntersectionEngine implements IIntersectionEngine {
|
|
7
7
|
private readonly _tree;
|
|
8
|
-
intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?:
|
|
8
|
+
intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
|
|
9
9
|
private checkIntersection;
|
|
10
10
|
private checkLineIntersection;
|
|
11
11
|
private checkPointIntersection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"IntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,SAAS,EAAkB,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,qBACa,kBAAmB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyC;IAE/D,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,GAAE,mBAAmB,EAAO,EAAE,IAAI,GAAE,SAA2B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IA8BvI,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,aAAa;CA6JxB"}
|
|
@@ -20,9 +20,9 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
20
20
|
let intersections = [];
|
|
21
21
|
const intersectNode = (node) => {
|
|
22
22
|
if (viewerID !== undefined) {
|
|
23
|
-
if (node.
|
|
23
|
+
if (node.excludeViewports.includes(viewerID))
|
|
24
24
|
return;
|
|
25
|
-
if (node.
|
|
25
|
+
if (node.restrictViewports.length > 0 && !node.restrictViewports.includes(viewerID))
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
for (let i = 0; i < filterCriteria.length; i++) {
|
|
@@ -125,7 +125,7 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
intersectNode(node, rayIn) {
|
|
128
|
-
const inverseMatrix = gl_matrix_1.mat4.invert(gl_matrix_1.mat4.create(), node.
|
|
128
|
+
const inverseMatrix = gl_matrix_1.mat4.invert(gl_matrix_1.mat4.create(), node.worldMatrix);
|
|
129
129
|
const ray = {
|
|
130
130
|
origin: gl_matrix_1.vec3.transformMat4(gl_matrix_1.vec3.create(), rayIn.origin, inverseMatrix),
|
|
131
131
|
direction: gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(inverseMatrix[0] * rayIn.direction[0] + inverseMatrix[4] * rayIn.direction[1] + inverseMatrix[8] * rayIn.direction[2], inverseMatrix[1] * rayIn.direction[0] + inverseMatrix[5] * rayIn.direction[1] + inverseMatrix[9] * rayIn.direction[2], inverseMatrix[2] * rayIn.direction[0] + inverseMatrix[6] * rayIn.direction[1] + inverseMatrix[10] * rayIn.direction[2]))
|
|
@@ -140,7 +140,7 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
140
140
|
if (!geometryData) {
|
|
141
141
|
let intersections = [];
|
|
142
142
|
for (let i = 0; i < node.children.length; i++) {
|
|
143
|
-
let intersection = this.intersectNode(node.children[i],
|
|
143
|
+
let intersection = this.intersectNode(node.children[i], rayIn);
|
|
144
144
|
if (intersection)
|
|
145
145
|
intersections = intersections.concat(intersection);
|
|
146
146
|
}
|
|
@@ -152,7 +152,7 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
152
152
|
}
|
|
153
153
|
else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINES) {
|
|
154
154
|
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
155
|
-
if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
|
|
155
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
|
|
156
156
|
return;
|
|
157
157
|
const index = geometryData.primitive.indices;
|
|
158
158
|
const position = geometryData.primitive.attributes['POSITION'];
|
|
@@ -179,11 +179,12 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
intersections.sort((a, b) => a.distance - b.distance);
|
|
182
|
+
intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
182
183
|
return intersections;
|
|
183
184
|
}
|
|
184
185
|
else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_LOOP || geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.LINE_STRIP) {
|
|
185
186
|
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
186
|
-
if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
|
|
187
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
|
|
187
188
|
return;
|
|
188
189
|
const index = geometryData.primitive.indices;
|
|
189
190
|
const position = geometryData.primitive.attributes['POSITION'];
|
|
@@ -210,6 +211,7 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
210
211
|
}
|
|
211
212
|
}
|
|
212
213
|
intersections.sort((a, b) => a.distance - b.distance);
|
|
214
|
+
intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
213
215
|
return intersections;
|
|
214
216
|
}
|
|
215
217
|
else if (geometryData.primitive.mode === viewer_shared_types_1.PRIMITIVE_MODE.POINTS) {
|
|
@@ -225,11 +227,12 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
225
227
|
}
|
|
226
228
|
}
|
|
227
229
|
intersections.sort((a, b) => a.distance - b.distance);
|
|
230
|
+
intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
228
231
|
return intersections;
|
|
229
232
|
}
|
|
230
233
|
else {
|
|
231
234
|
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
232
|
-
if (node.boundingBox.intersect(rayIn.origin, rayIn.direction) === null)
|
|
235
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null)
|
|
233
236
|
return;
|
|
234
237
|
const material = geometryData.primitive.material;
|
|
235
238
|
const index = geometryData.primitive.indices;
|
|
@@ -258,12 +261,13 @@ let IntersectionEngine = class IntersectionEngine {
|
|
|
258
261
|
}
|
|
259
262
|
}
|
|
260
263
|
intersections.sort((a, b) => a.distance - b.distance);
|
|
264
|
+
intersections.forEach(i => i.point = gl_matrix_1.vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
261
265
|
return intersections;
|
|
262
266
|
}
|
|
263
267
|
}
|
|
264
268
|
};
|
|
265
269
|
IntersectionEngine = __decorate([
|
|
266
|
-
tsyringe_1.singleton()
|
|
270
|
+
(0, tsyringe_1.singleton)()
|
|
267
271
|
], IntersectionEngine);
|
|
268
272
|
exports.IntersectionEngine = IntersectionEngine;
|
|
269
273
|
//# sourceMappingURL=IntersectionEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IntersectionEngine.js","sourceRoot":"","sources":["../../src/implementation/IntersectionEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { vec3 } from "gl-matrix";
|
|
2
|
-
import {
|
|
2
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
3
3
|
export interface IIntersection {
|
|
4
4
|
distance: number;
|
|
5
5
|
point: vec3;
|
|
6
|
-
node:
|
|
6
|
+
node: ITreeNode;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=IIntersection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IIntersection.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"IIntersection.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,SAAS,CAAA;CAClB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
2
|
import { IIntersection } from "./IIntersection";
|
|
3
3
|
import { IIntersectionFilter } from "./IIntersectionFilter";
|
|
4
4
|
import { IRay } from "./IRay";
|
|
5
5
|
export interface IIntersectionEngine {
|
|
6
|
-
intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?:
|
|
6
|
+
intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=IIntersectionEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IIntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"IIntersectionEngine.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,mBAAmB,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;CACtH"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
2
|
export interface IIntersectionFilter {
|
|
3
|
-
(node:
|
|
3
|
+
(node: ITreeNode): boolean;
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=IIntersectionFilter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IIntersectionFilter.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"IIntersectionFilter.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIntersectionFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAChC,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC9B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapediver/viewer.rendering-engine.intersection-engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"author": "Michael Oppitz <michael@shapediver.com>",
|
|
@@ -10,7 +10,11 @@
|
|
|
10
10
|
"test": "__tests__"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"dist"
|
|
13
|
+
"dist",
|
|
14
|
+
"src",
|
|
15
|
+
"package.json",
|
|
16
|
+
"README.md",
|
|
17
|
+
"tsconfig.json"
|
|
14
18
|
],
|
|
15
19
|
"publishConfig": {
|
|
16
20
|
"access": "public"
|
|
@@ -20,11 +24,10 @@
|
|
|
20
24
|
"url": "git+https://github.com/shapediver/Viewer.git"
|
|
21
25
|
},
|
|
22
26
|
"scripts": {
|
|
23
|
-
"test": "bash ../../scripts/test.sh",
|
|
24
27
|
"check": "tsc --noEmit",
|
|
25
|
-
"build": "bash ../../scripts/build.sh",
|
|
26
|
-
"build-watch": "bash ../../scripts/build-watch.sh",
|
|
27
|
-
"build-dep": "bash ../../scripts/build-dep.sh"
|
|
28
|
+
"build": "bash ../../scripts/building/build.sh",
|
|
29
|
+
"build-watch": "bash ../../scripts/building/build-watch.sh",
|
|
30
|
+
"build-dep": "bash ../../scripts/building/build-dep.sh"
|
|
28
31
|
},
|
|
29
32
|
"bugs": {
|
|
30
33
|
"url": "https://github.com/shapediver/Viewer/issues"
|
|
@@ -36,13 +39,14 @@
|
|
|
36
39
|
"testEnvironment": "node"
|
|
37
40
|
},
|
|
38
41
|
"dependencies": {
|
|
39
|
-
"@shapediver/viewer.
|
|
40
|
-
"@shapediver/viewer.shared.
|
|
41
|
-
"@shapediver/viewer.shared.
|
|
42
|
-
"@shapediver/viewer.shared.
|
|
42
|
+
"@shapediver/viewer.rendering-engine.rendering-engine": "2.0.1",
|
|
43
|
+
"@shapediver/viewer.shared.math": "2.0.1",
|
|
44
|
+
"@shapediver/viewer.shared.node-tree": "2.0.1",
|
|
45
|
+
"@shapediver/viewer.shared.services": "2.0.1",
|
|
46
|
+
"@shapediver/viewer.shared.types": "2.0.1",
|
|
43
47
|
"detect-it": "4.0.1",
|
|
44
48
|
"gl-matrix": "3.3.0",
|
|
45
49
|
"tsyringe": "^4.5.0"
|
|
46
50
|
},
|
|
47
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "439d43d5219976059b89ab173d54cdafdd1f5c20"
|
|
48
52
|
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { GeometryData, IMaterialAbstractData, MATERIAL_SIDE, PRIMITIVE_MODE } from "@shapediver/viewer.shared.types";
|
|
2
|
+
import { mat4, vec3 } from "gl-matrix";
|
|
3
|
+
import { Triangle } from "@shapediver/viewer.shared.math";
|
|
4
|
+
import { ITree, ITreeNode, Tree, TreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
5
|
+
import { IIntersection } from "../interfaces/IIntersection";
|
|
6
|
+
import { IIntersectionEngine } from "../interfaces/IIntersectionEngine";
|
|
7
|
+
import { IIntersectionFilter } from "../interfaces/IIntersectionFilter";
|
|
8
|
+
import { IRay } from "../interfaces/IRay";
|
|
9
|
+
import { container, singleton } from "tsyringe";
|
|
10
|
+
|
|
11
|
+
@singleton()
|
|
12
|
+
export class IntersectionEngine implements IIntersectionEngine {
|
|
13
|
+
private readonly _tree: ITree = <ITree>container.resolve(Tree);
|
|
14
|
+
|
|
15
|
+
intersect(ray: IRay, filterCriteria: IIntersectionFilter[] = [], root: ITreeNode = this._tree.root, viewerID?: string): IIntersection[] {
|
|
16
|
+
let intersections: IIntersection[] = [];
|
|
17
|
+
const intersectNode = (node: ITreeNode) => {
|
|
18
|
+
if(viewerID !== undefined) {
|
|
19
|
+
if(node.excludeViewports.includes(viewerID)) return;
|
|
20
|
+
if(node.restrictViewports.length > 0 && !node.restrictViewports.includes(viewerID)) return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
for (let i = 0; i < filterCriteria.length; i++) {
|
|
24
|
+
if (filterCriteria[i](node)) {
|
|
25
|
+
const intersection = this.intersectNode(node, ray)
|
|
26
|
+
if (intersection) {
|
|
27
|
+
intersection.forEach(i => i.node = node);
|
|
28
|
+
intersections = intersections.concat(intersection);
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
for (let i = 0; i < node.children.length; i++)
|
|
35
|
+
intersectNode(node.children[i])
|
|
36
|
+
}
|
|
37
|
+
intersectNode(root);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
41
|
+
return intersections;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
private checkIntersection(node: ITreeNode, material: IMaterialAbstractData | null, ray: IRay, pA: vec3, pB: vec3, pC: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
|
|
46
|
+
let point: vec3 | null;
|
|
47
|
+
|
|
48
|
+
if (material && material.side === MATERIAL_SIDE.BACK) {
|
|
49
|
+
const triangle = new Triangle(pC, pB, pA);
|
|
50
|
+
point = triangle.intersect(ray.origin, ray.direction);
|
|
51
|
+
} else {
|
|
52
|
+
const triangle = new Triangle(pA, pB, pC);
|
|
53
|
+
point = triangle.intersect(ray.origin, ray.direction);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (point === null) return;
|
|
57
|
+
|
|
58
|
+
const distance = vec3.distance(ray.origin, point);
|
|
59
|
+
return {
|
|
60
|
+
distance: distance,
|
|
61
|
+
point: vec3.clone(point),
|
|
62
|
+
node
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private checkLineIntersection(node: ITreeNode, ray: IRay, radius: number, pA: vec3, pB: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
|
|
67
|
+
const direction = vec3.sub(vec3.create(), pB, pA);
|
|
68
|
+
const lineLength = vec3.length(direction);
|
|
69
|
+
const lineRay = {
|
|
70
|
+
origin: pA,
|
|
71
|
+
direction: vec3.divide(vec3.create(), direction, vec3.fromValues(lineLength, lineLength, lineLength))
|
|
72
|
+
};
|
|
73
|
+
const planeNormal = vec3.cross(vec3.create(), ray.direction, lineRay.direction);
|
|
74
|
+
|
|
75
|
+
const Na = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), ray.direction, planeNormal));
|
|
76
|
+
const Nb = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), lineRay.direction, planeNormal));
|
|
77
|
+
|
|
78
|
+
const da = vec3.dot(vec3.sub(vec3.create(), pA, ray.origin), Nb) / vec3.dot(ray.direction, Nb);
|
|
79
|
+
const db = vec3.dot(vec3.sub(vec3.create(), ray.origin, pA), Na) / vec3.dot(lineRay.direction, Na);
|
|
80
|
+
|
|
81
|
+
let pointA: vec3 = vec3.create();
|
|
82
|
+
if (da < 0) {
|
|
83
|
+
vec3.copy(pointA, ray.origin);
|
|
84
|
+
} else {
|
|
85
|
+
pointA = vec3.add(vec3.create(), ray.origin, vec3.mul(vec3.create(), ray.direction, vec3.fromValues(da, da, da)));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let pointB: vec3 = vec3.create();
|
|
89
|
+
if (db < 0) {
|
|
90
|
+
vec3.copy(pointB, pA);
|
|
91
|
+
} else if (db < lineLength) {
|
|
92
|
+
pointB = vec3.add(vec3.create(), pA, vec3.mul(vec3.create(), lineRay.direction, vec3.fromValues(db, db, db)));
|
|
93
|
+
} else {
|
|
94
|
+
vec3.copy(pointB, pB);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const distance = vec3.distance(pointA, pointB);
|
|
98
|
+
if (distance < radius) {
|
|
99
|
+
return {
|
|
100
|
+
distance: distance,
|
|
101
|
+
point: vec3.clone(pointB),
|
|
102
|
+
node
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
private checkPointIntersection(node: ITreeNode, ray: IRay, radius: number, p: vec3): { distance: number, point: vec3, node: ITreeNode } | undefined {
|
|
111
|
+
const closestPoint = vec3.sub(vec3.create(), p, ray.origin);
|
|
112
|
+
const directionDistance = vec3.dot(closestPoint, ray.direction);
|
|
113
|
+
|
|
114
|
+
if (directionDistance < 0) {
|
|
115
|
+
vec3.copy(closestPoint, ray.origin);
|
|
116
|
+
} else {
|
|
117
|
+
vec3.multiply(closestPoint, vec3.copy(closestPoint, ray.direction), vec3.fromValues(directionDistance, directionDistance, directionDistance));
|
|
118
|
+
vec3.add(closestPoint, closestPoint, ray.origin);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const distance = vec3.distance(closestPoint, p);
|
|
122
|
+
if (distance < radius) {
|
|
123
|
+
return {
|
|
124
|
+
distance: distance,
|
|
125
|
+
point: vec3.clone(closestPoint),
|
|
126
|
+
node
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
private intersectNode(node: ITreeNode, rayIn: IRay): IIntersection[] | undefined {
|
|
135
|
+
const inverseMatrix = mat4.invert(mat4.create(), node.worldMatrix);
|
|
136
|
+
const ray = {
|
|
137
|
+
origin: vec3.transformMat4(vec3.create(), rayIn.origin, inverseMatrix),
|
|
138
|
+
direction: vec3.normalize(vec3.create(), vec3.fromValues(
|
|
139
|
+
inverseMatrix[0] * rayIn.direction[0] + inverseMatrix[4] * rayIn.direction[1] + inverseMatrix[8] * rayIn.direction[2],
|
|
140
|
+
inverseMatrix[1] * rayIn.direction[0] + inverseMatrix[5] * rayIn.direction[1] + inverseMatrix[9] * rayIn.direction[2],
|
|
141
|
+
inverseMatrix[2] * rayIn.direction[0] + inverseMatrix[6] * rayIn.direction[1] + inverseMatrix[10] * rayIn.direction[2]
|
|
142
|
+
))
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
let geometryData: GeometryData | undefined;
|
|
146
|
+
for (let i = 0; i < node.data.length; i++) {
|
|
147
|
+
if (node.data[i] instanceof GeometryData) {
|
|
148
|
+
geometryData = <GeometryData>node.data[i];
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!geometryData) {
|
|
154
|
+
let intersections: IIntersection[] = [];
|
|
155
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
156
|
+
let intersection = this.intersectNode(node.children[i], rayIn);
|
|
157
|
+
if (intersection)
|
|
158
|
+
intersections = intersections.concat(intersection);
|
|
159
|
+
}
|
|
160
|
+
if (intersections.length > 0) {
|
|
161
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
162
|
+
return intersections;
|
|
163
|
+
}
|
|
164
|
+
return;
|
|
165
|
+
} else if (geometryData.primitive.mode === PRIMITIVE_MODE.LINES) {
|
|
166
|
+
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
167
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
|
|
168
|
+
|
|
169
|
+
const index = geometryData.primitive.indices;
|
|
170
|
+
const position = geometryData.primitive.attributes['POSITION'];
|
|
171
|
+
const radius = 0.1;
|
|
172
|
+
let intersections = [];
|
|
173
|
+
if (index !== null) {
|
|
174
|
+
// indexed buffer geometry
|
|
175
|
+
for (let i = 0, il = +index.count; i < il; i += 2) {
|
|
176
|
+
const a = index.array[(i) * index.itemSize];
|
|
177
|
+
const b = index.array[(i + 1) * index.itemSize];
|
|
178
|
+
|
|
179
|
+
let intersection = this.checkLineIntersection(node, ray, radius,
|
|
180
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
181
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]));
|
|
182
|
+
if (intersection) intersections.push(intersection)
|
|
183
|
+
}
|
|
184
|
+
} else if (position !== undefined) {
|
|
185
|
+
// non-indexed buffer geometry
|
|
186
|
+
for (let i = 0, il = +position.count; i < il; i += 2) {
|
|
187
|
+
const a = i;
|
|
188
|
+
const b = i + 1;
|
|
189
|
+
let intersection = this.checkLineIntersection(node, ray, radius,
|
|
190
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
191
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2])); if (intersection) intersections.push(intersection)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
196
|
+
intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
197
|
+
return intersections;
|
|
198
|
+
} else if (geometryData.primitive.mode === PRIMITIVE_MODE.LINE_LOOP || geometryData.primitive.mode === PRIMITIVE_MODE.LINE_STRIP) {
|
|
199
|
+
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
200
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
|
|
201
|
+
|
|
202
|
+
const index = geometryData.primitive.indices;
|
|
203
|
+
const position = geometryData.primitive.attributes['POSITION'];
|
|
204
|
+
const radius = 0.1;
|
|
205
|
+
let intersections = [];
|
|
206
|
+
if (index !== null) {
|
|
207
|
+
// indexed buffer geometry
|
|
208
|
+
for (let i = 0, il = +index.count - 1; i < il; i++) {
|
|
209
|
+
const a = index.array[(i) * index.itemSize];
|
|
210
|
+
const b = index.array[(i + 1) * index.itemSize];
|
|
211
|
+
|
|
212
|
+
let intersection = this.checkLineIntersection(node, ray, radius,
|
|
213
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
214
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]));
|
|
215
|
+
if (intersection) intersections.push(intersection)
|
|
216
|
+
}
|
|
217
|
+
} else if (position !== undefined) {
|
|
218
|
+
// non-indexed buffer geometry
|
|
219
|
+
for (let i = 0, il = +position.count; i < il; i += 2) {
|
|
220
|
+
const a = i;
|
|
221
|
+
const b = i + 1;
|
|
222
|
+
let intersection = this.checkLineIntersection(node, ray, radius,
|
|
223
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
224
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2])); if (intersection) intersections.push(intersection)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
229
|
+
intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
230
|
+
return intersections;
|
|
231
|
+
} else if (geometryData.primitive.mode === PRIMITIVE_MODE.POINTS) {
|
|
232
|
+
const position = geometryData.primitive.attributes['POSITION'];
|
|
233
|
+
const radius = 0.1;
|
|
234
|
+
let intersections = [];
|
|
235
|
+
if (position !== undefined) {
|
|
236
|
+
// non-indexed buffer geometry
|
|
237
|
+
for (let i = 0, il = +position.count; i < il; i++) {
|
|
238
|
+
let intersection = this.checkPointIntersection(node, ray, radius,
|
|
239
|
+
vec3.fromValues(position.array[i * position.itemSize], position.array[i * position.itemSize + 1], position.array[i * position.itemSize + 2]));
|
|
240
|
+
if (intersection) intersections.push(intersection)
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
245
|
+
intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
246
|
+
return intersections;
|
|
247
|
+
} else {
|
|
248
|
+
|
|
249
|
+
// if (node.boundingBox.boundingSphere.intersect(ray.origin, ray.direction) === null) return;
|
|
250
|
+
if (node.boundingBox.clone().applyMatrix(node.worldMatrix).intersect(rayIn.origin, rayIn.direction) === null) return;
|
|
251
|
+
|
|
252
|
+
const material = geometryData.primitive.material;
|
|
253
|
+
const index = geometryData.primitive.indices;
|
|
254
|
+
const position = geometryData.primitive.attributes['POSITION'];
|
|
255
|
+
|
|
256
|
+
let intersections = [];
|
|
257
|
+
|
|
258
|
+
if (index !== null) {
|
|
259
|
+
// indexed buffer geometry
|
|
260
|
+
for (let i = 0, il = +index.count; i < il; i += 3) {
|
|
261
|
+
const a = index.array[(i) * index.itemSize];
|
|
262
|
+
const b = index.array[(i + 1) * index.itemSize];
|
|
263
|
+
const c = index.array[(i + 2) * index.itemSize];
|
|
264
|
+
|
|
265
|
+
let intersection = this.checkIntersection(node, material, ray,
|
|
266
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
267
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]),
|
|
268
|
+
vec3.fromValues(position.array[c * position.itemSize], position.array[c * position.itemSize + 1], position.array[c * position.itemSize + 2]));
|
|
269
|
+
if (intersection) intersections.push(intersection)
|
|
270
|
+
}
|
|
271
|
+
} else if (position !== undefined) {
|
|
272
|
+
// non-indexed buffer geometry
|
|
273
|
+
for (let i = 0, il = +position.count; i < il; i += 3) {
|
|
274
|
+
const a = i;
|
|
275
|
+
const b = i + 1;
|
|
276
|
+
const c = i + 2;
|
|
277
|
+
let intersection = this.checkIntersection(node, material, ray,
|
|
278
|
+
vec3.fromValues(position.array[a * position.itemSize], position.array[a * position.itemSize + 1], position.array[a * position.itemSize + 2]),
|
|
279
|
+
vec3.fromValues(position.array[b * position.itemSize], position.array[b * position.itemSize + 1], position.array[b * position.itemSize + 2]),
|
|
280
|
+
vec3.fromValues(position.array[c * position.itemSize], position.array[c * position.itemSize + 1], position.array[c * position.itemSize + 2]));
|
|
281
|
+
if (intersection) intersections.push(intersection)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
intersections.sort((a, b) => a.distance - b.distance);
|
|
286
|
+
intersections.forEach(i => i.point = vec3.transformMat4(i.point, i.point, node.worldMatrix));
|
|
287
|
+
return intersections;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IntersectionEngine } from "./implementation/IntersectionEngine"
|
|
2
|
+
import { IIntersection } from "./interfaces/IIntersection"
|
|
3
|
+
import { IIntersectionEngine } from "./interfaces/IIntersectionEngine"
|
|
4
|
+
import { IIntersectionFilter } from "./interfaces/IIntersectionFilter"
|
|
5
|
+
import { IRay } from "./interfaces/IRay"
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
IRay, IIntersection, IIntersectionFilter, IIntersectionEngine
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
IntersectionEngine
|
|
13
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ITreeNode, TreeNode } from "@shapediver/viewer.shared.node-tree";
|
|
2
|
+
import { IIntersection } from "./IIntersection";
|
|
3
|
+
import { IIntersectionFilter } from "./IIntersectionFilter";
|
|
4
|
+
import { IRay } from "./IRay";
|
|
5
|
+
|
|
6
|
+
export interface IIntersectionEngine {
|
|
7
|
+
intersect(ray: IRay, filterCriteria?: IIntersectionFilter[], root?: ITreeNode, viewerID?: string): IIntersection[];
|
|
8
|
+
}
|
package/tsconfig.json
ADDED