three-stdlib 2.35.0 → 2.35.1
Sign up to get free protection for your applications and to get access to all the features.
- package/helpers/RaycasterHelper.cjs +134 -0
- package/helpers/RaycasterHelper.cjs.map +1 -0
- package/helpers/RaycasterHelper.js +134 -0
- package/helpers/RaycasterHelper.js.map +1 -0
- package/index.cjs +2 -0
- package/index.cjs.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +1 -1
@@ -0,0 +1,134 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
4
|
+
var __publicField = (obj, key, value) => {
|
5
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
6
|
+
return value;
|
7
|
+
};
|
8
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
9
|
+
const THREE = require("three");
|
10
|
+
const _o = new THREE.Object3D();
|
11
|
+
const _v = new THREE.Vector3();
|
12
|
+
class RaycasterHelper extends THREE.Object3D {
|
13
|
+
constructor(raycaster, numberOfHitsToVisualize = 20) {
|
14
|
+
super();
|
15
|
+
__publicField(this, "raycaster");
|
16
|
+
__publicField(this, "hits");
|
17
|
+
__publicField(this, "origin");
|
18
|
+
__publicField(this, "near");
|
19
|
+
__publicField(this, "far");
|
20
|
+
__publicField(this, "nearToFar");
|
21
|
+
__publicField(this, "originToNear");
|
22
|
+
__publicField(this, "hitPoints");
|
23
|
+
__publicField(this, "colors", {
|
24
|
+
near: 16777215,
|
25
|
+
far: 16777215,
|
26
|
+
originToNear: 3355443,
|
27
|
+
nearToFar: 16777215,
|
28
|
+
origin: [978050, 16711771]
|
29
|
+
});
|
30
|
+
__publicField(this, "setColors", (colors) => {
|
31
|
+
const _colors = {
|
32
|
+
...this.colors,
|
33
|
+
...colors
|
34
|
+
};
|
35
|
+
this.near.material.color.set(_colors.near);
|
36
|
+
this.far.material.color.set(_colors.far);
|
37
|
+
this.nearToFar.material.color.set(_colors.nearToFar);
|
38
|
+
this.originToNear.material.color.set(_colors.originToNear);
|
39
|
+
});
|
40
|
+
__publicField(this, "update", () => {
|
41
|
+
var _a;
|
42
|
+
const origin = this.raycaster.ray.origin;
|
43
|
+
const direction = this.raycaster.ray.direction;
|
44
|
+
this.origin.position.copy(origin);
|
45
|
+
this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near));
|
46
|
+
this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far));
|
47
|
+
this.far.lookAt(origin);
|
48
|
+
this.near.lookAt(origin);
|
49
|
+
let pos = this.nearToFar.geometry.getAttribute("position");
|
50
|
+
pos.set([...this.near.position.toArray(), ...this.far.position.toArray()]);
|
51
|
+
pos.needsUpdate = true;
|
52
|
+
pos = this.originToNear.geometry.getAttribute("position");
|
53
|
+
pos.set([...origin.toArray(), ...this.near.position.toArray()]);
|
54
|
+
pos.needsUpdate = true;
|
55
|
+
for (let i = 0; i < this.numberOfHitsToVisualize; i++) {
|
56
|
+
const hit = (_a = this.hits) == null ? void 0 : _a[i];
|
57
|
+
if (hit) {
|
58
|
+
const { point } = hit;
|
59
|
+
_o.position.copy(point);
|
60
|
+
_o.scale.setScalar(1);
|
61
|
+
} else {
|
62
|
+
_o.scale.setScalar(0);
|
63
|
+
}
|
64
|
+
_o.updateMatrix();
|
65
|
+
this.hitPoints.setMatrixAt(i, _o.matrix);
|
66
|
+
}
|
67
|
+
this.hitPoints.instanceMatrix.needsUpdate = true;
|
68
|
+
this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1]);
|
69
|
+
});
|
70
|
+
__publicField(this, "dispose", () => {
|
71
|
+
this.origin.geometry.dispose();
|
72
|
+
this.origin.material.dispose();
|
73
|
+
this.near.geometry.dispose();
|
74
|
+
this.near.material.dispose();
|
75
|
+
this.far.geometry.dispose();
|
76
|
+
this.far.material.dispose();
|
77
|
+
this.nearToFar.geometry.dispose();
|
78
|
+
this.nearToFar.material.dispose();
|
79
|
+
this.originToNear.geometry.dispose();
|
80
|
+
this.originToNear.material.dispose();
|
81
|
+
this.hitPoints.dispose();
|
82
|
+
});
|
83
|
+
this.numberOfHitsToVisualize = numberOfHitsToVisualize;
|
84
|
+
this.raycaster = raycaster;
|
85
|
+
this.hits = [];
|
86
|
+
this.origin = new THREE.Mesh(new THREE.SphereGeometry(0.04, 32), new THREE.MeshBasicMaterial());
|
87
|
+
this.origin.name = "RaycasterHelper_origin";
|
88
|
+
this.origin.raycast = () => null;
|
89
|
+
const size = 0.1;
|
90
|
+
let geometry = new THREE.BufferGeometry();
|
91
|
+
geometry.setAttribute("position", new THREE.Float32BufferAttribute([
|
92
|
+
-size,
|
93
|
+
size,
|
94
|
+
0,
|
95
|
+
size,
|
96
|
+
size,
|
97
|
+
0,
|
98
|
+
size,
|
99
|
+
-size,
|
100
|
+
0,
|
101
|
+
-size,
|
102
|
+
-size,
|
103
|
+
0,
|
104
|
+
-size,
|
105
|
+
size,
|
106
|
+
0
|
107
|
+
], 3));
|
108
|
+
this.near = new THREE.Line(geometry, new THREE.LineBasicMaterial());
|
109
|
+
this.near.name = "RaycasterHelper_near";
|
110
|
+
this.near.raycast = () => null;
|
111
|
+
this.far = new THREE.Line(geometry, new THREE.LineBasicMaterial());
|
112
|
+
this.far.name = "RaycasterHelper_far";
|
113
|
+
this.far.raycast = () => null;
|
114
|
+
this.nearToFar = new THREE.Line(new THREE.BufferGeometry(), new THREE.LineBasicMaterial());
|
115
|
+
this.nearToFar.name = "RaycasterHelper_nearToFar";
|
116
|
+
this.nearToFar.raycast = () => null;
|
117
|
+
this.nearToFar.geometry.setFromPoints([_v, _v]);
|
118
|
+
this.originToNear = new THREE.Line(this.nearToFar.geometry.clone(), new THREE.LineBasicMaterial());
|
119
|
+
this.originToNear.name = "RaycasterHelper_originToNear";
|
120
|
+
this.originToNear.raycast = () => null;
|
121
|
+
this.hitPoints = new THREE.InstancedMesh(new THREE.SphereGeometry(0.04), new THREE.MeshBasicMaterial(), this.numberOfHitsToVisualize);
|
122
|
+
this.hitPoints.name = "RaycasterHelper_hits";
|
123
|
+
this.hitPoints.raycast = () => null;
|
124
|
+
this.add(this.nearToFar);
|
125
|
+
this.add(this.originToNear);
|
126
|
+
this.add(this.near);
|
127
|
+
this.add(this.far);
|
128
|
+
this.add(this.origin);
|
129
|
+
this.add(this.hitPoints);
|
130
|
+
this.setColors();
|
131
|
+
}
|
132
|
+
}
|
133
|
+
exports.RaycasterHelper = RaycasterHelper;
|
134
|
+
//# sourceMappingURL=RaycasterHelper.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"RaycasterHelper.cjs","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = new Object3D()\nconst _v = new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":["Object3D","Vector3","Mesh","SphereGeometry","MeshBasicMaterial","BufferGeometry","Float32BufferAttribute","Line","LineBasicMaterial","InstancedMesh"],"mappings":"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"}
|
@@ -0,0 +1,134 @@
|
|
1
|
+
var __defProp = Object.defineProperty;
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
3
|
+
var __publicField = (obj, key, value) => {
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
5
|
+
return value;
|
6
|
+
};
|
7
|
+
import { Object3D, Vector3, Mesh, SphereGeometry, MeshBasicMaterial, BufferGeometry, Float32BufferAttribute, Line, LineBasicMaterial, InstancedMesh } from "three";
|
8
|
+
const _o = new Object3D();
|
9
|
+
const _v = new Vector3();
|
10
|
+
class RaycasterHelper extends Object3D {
|
11
|
+
constructor(raycaster, numberOfHitsToVisualize = 20) {
|
12
|
+
super();
|
13
|
+
__publicField(this, "raycaster");
|
14
|
+
__publicField(this, "hits");
|
15
|
+
__publicField(this, "origin");
|
16
|
+
__publicField(this, "near");
|
17
|
+
__publicField(this, "far");
|
18
|
+
__publicField(this, "nearToFar");
|
19
|
+
__publicField(this, "originToNear");
|
20
|
+
__publicField(this, "hitPoints");
|
21
|
+
__publicField(this, "colors", {
|
22
|
+
near: 16777215,
|
23
|
+
far: 16777215,
|
24
|
+
originToNear: 3355443,
|
25
|
+
nearToFar: 16777215,
|
26
|
+
origin: [978050, 16711771]
|
27
|
+
});
|
28
|
+
__publicField(this, "setColors", (colors) => {
|
29
|
+
const _colors = {
|
30
|
+
...this.colors,
|
31
|
+
...colors
|
32
|
+
};
|
33
|
+
this.near.material.color.set(_colors.near);
|
34
|
+
this.far.material.color.set(_colors.far);
|
35
|
+
this.nearToFar.material.color.set(_colors.nearToFar);
|
36
|
+
this.originToNear.material.color.set(_colors.originToNear);
|
37
|
+
});
|
38
|
+
__publicField(this, "update", () => {
|
39
|
+
var _a;
|
40
|
+
const origin = this.raycaster.ray.origin;
|
41
|
+
const direction = this.raycaster.ray.direction;
|
42
|
+
this.origin.position.copy(origin);
|
43
|
+
this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near));
|
44
|
+
this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far));
|
45
|
+
this.far.lookAt(origin);
|
46
|
+
this.near.lookAt(origin);
|
47
|
+
let pos = this.nearToFar.geometry.getAttribute("position");
|
48
|
+
pos.set([...this.near.position.toArray(), ...this.far.position.toArray()]);
|
49
|
+
pos.needsUpdate = true;
|
50
|
+
pos = this.originToNear.geometry.getAttribute("position");
|
51
|
+
pos.set([...origin.toArray(), ...this.near.position.toArray()]);
|
52
|
+
pos.needsUpdate = true;
|
53
|
+
for (let i = 0; i < this.numberOfHitsToVisualize; i++) {
|
54
|
+
const hit = (_a = this.hits) == null ? void 0 : _a[i];
|
55
|
+
if (hit) {
|
56
|
+
const { point } = hit;
|
57
|
+
_o.position.copy(point);
|
58
|
+
_o.scale.setScalar(1);
|
59
|
+
} else {
|
60
|
+
_o.scale.setScalar(0);
|
61
|
+
}
|
62
|
+
_o.updateMatrix();
|
63
|
+
this.hitPoints.setMatrixAt(i, _o.matrix);
|
64
|
+
}
|
65
|
+
this.hitPoints.instanceMatrix.needsUpdate = true;
|
66
|
+
this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1]);
|
67
|
+
});
|
68
|
+
__publicField(this, "dispose", () => {
|
69
|
+
this.origin.geometry.dispose();
|
70
|
+
this.origin.material.dispose();
|
71
|
+
this.near.geometry.dispose();
|
72
|
+
this.near.material.dispose();
|
73
|
+
this.far.geometry.dispose();
|
74
|
+
this.far.material.dispose();
|
75
|
+
this.nearToFar.geometry.dispose();
|
76
|
+
this.nearToFar.material.dispose();
|
77
|
+
this.originToNear.geometry.dispose();
|
78
|
+
this.originToNear.material.dispose();
|
79
|
+
this.hitPoints.dispose();
|
80
|
+
});
|
81
|
+
this.numberOfHitsToVisualize = numberOfHitsToVisualize;
|
82
|
+
this.raycaster = raycaster;
|
83
|
+
this.hits = [];
|
84
|
+
this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial());
|
85
|
+
this.origin.name = "RaycasterHelper_origin";
|
86
|
+
this.origin.raycast = () => null;
|
87
|
+
const size = 0.1;
|
88
|
+
let geometry = new BufferGeometry();
|
89
|
+
geometry.setAttribute("position", new Float32BufferAttribute([
|
90
|
+
-size,
|
91
|
+
size,
|
92
|
+
0,
|
93
|
+
size,
|
94
|
+
size,
|
95
|
+
0,
|
96
|
+
size,
|
97
|
+
-size,
|
98
|
+
0,
|
99
|
+
-size,
|
100
|
+
-size,
|
101
|
+
0,
|
102
|
+
-size,
|
103
|
+
size,
|
104
|
+
0
|
105
|
+
], 3));
|
106
|
+
this.near = new Line(geometry, new LineBasicMaterial());
|
107
|
+
this.near.name = "RaycasterHelper_near";
|
108
|
+
this.near.raycast = () => null;
|
109
|
+
this.far = new Line(geometry, new LineBasicMaterial());
|
110
|
+
this.far.name = "RaycasterHelper_far";
|
111
|
+
this.far.raycast = () => null;
|
112
|
+
this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial());
|
113
|
+
this.nearToFar.name = "RaycasterHelper_nearToFar";
|
114
|
+
this.nearToFar.raycast = () => null;
|
115
|
+
this.nearToFar.geometry.setFromPoints([_v, _v]);
|
116
|
+
this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial());
|
117
|
+
this.originToNear.name = "RaycasterHelper_originToNear";
|
118
|
+
this.originToNear.raycast = () => null;
|
119
|
+
this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize);
|
120
|
+
this.hitPoints.name = "RaycasterHelper_hits";
|
121
|
+
this.hitPoints.raycast = () => null;
|
122
|
+
this.add(this.nearToFar);
|
123
|
+
this.add(this.originToNear);
|
124
|
+
this.add(this.near);
|
125
|
+
this.add(this.far);
|
126
|
+
this.add(this.origin);
|
127
|
+
this.add(this.hitPoints);
|
128
|
+
this.setColors();
|
129
|
+
}
|
130
|
+
}
|
131
|
+
export {
|
132
|
+
RaycasterHelper
|
133
|
+
};
|
134
|
+
//# sourceMappingURL=RaycasterHelper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"RaycasterHelper.js","sources":["../../src/helpers/RaycasterHelper.ts"],"sourcesContent":["/**\n * from https://github.com/gsimone/things/tree/main/packages/three-raycaster-helper\n */\n\nimport {\n BufferAttribute,\n BufferGeometry,\n Float32BufferAttribute,\n InstancedMesh,\n Intersection,\n Line,\n LineBasicMaterial,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Raycaster,\n SphereGeometry,\n Vector3,\n} from 'three'\n\nconst _o = new Object3D()\nconst _v = new Vector3()\n\nclass RaycasterHelper extends Object3D {\n raycaster: Raycaster\n hits: Intersection[]\n\n origin: Mesh<SphereGeometry, MeshBasicMaterial>\n near: Line<BufferGeometry, LineBasicMaterial>\n far: Line<BufferGeometry, LineBasicMaterial>\n\n nearToFar: Line<BufferGeometry, LineBasicMaterial>\n originToNear: Line<BufferGeometry, LineBasicMaterial>\n\n hitPoints: InstancedMesh\n\n colors = {\n near: 0xffffff,\n far: 0xffffff,\n originToNear: 0x333333,\n nearToFar: 0xffffff,\n origin: [0x0eec82, 0xff005b],\n }\n\n constructor(raycaster: Raycaster, public numberOfHitsToVisualize = 20) {\n super()\n this.raycaster = raycaster\n\n this.hits = []\n\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial())\n this.origin.name = 'RaycasterHelper_origin'\n this.origin.raycast = () => null\n\n const size = 0.1\n let geometry = new BufferGeometry()\n // prettier-ignore\n geometry.setAttribute( 'position', new Float32BufferAttribute( [\n - size, size, 0,\n size, size, 0,\n size, - size, 0,\n - size, - size, 0,\n - size, size, 0\n ], 3 ) );\n\n this.near = new Line(geometry, new LineBasicMaterial())\n this.near.name = 'RaycasterHelper_near'\n this.near.raycast = () => null\n\n this.far = new Line(geometry, new LineBasicMaterial())\n this.far.name = 'RaycasterHelper_far'\n this.far.raycast = () => null\n\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial())\n this.nearToFar.name = 'RaycasterHelper_nearToFar'\n this.nearToFar.raycast = () => null\n\n this.nearToFar.geometry.setFromPoints([_v, _v])\n\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial())\n this.originToNear.name = 'RaycasterHelper_originToNear'\n this.originToNear.raycast = () => null\n\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize)\n this.hitPoints.name = 'RaycasterHelper_hits'\n this.hitPoints.raycast = () => null\n\n this.add(this.nearToFar)\n this.add(this.originToNear)\n\n this.add(this.near)\n this.add(this.far)\n\n this.add(this.origin)\n this.add(this.hitPoints)\n\n this.setColors()\n }\n\n setColors = (colors?: Partial<typeof this.colors>) => {\n const _colors = {\n ...this.colors,\n ...colors,\n }\n\n this.near.material.color.set(_colors.near)\n this.far.material.color.set(_colors.far)\n this.nearToFar.material.color.set(_colors.nearToFar)\n this.originToNear.material.color.set(_colors.originToNear)\n }\n\n update = () => {\n const origin = this.raycaster.ray.origin\n const direction = this.raycaster.ray.direction\n\n this.origin.position.copy(origin)\n\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near))\n\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far))\n\n this.far.lookAt(origin)\n this.near.lookAt(origin)\n\n let pos = this.nearToFar.geometry.getAttribute('position') as BufferAttribute\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()])\n pos.needsUpdate = true\n\n pos = this.originToNear.geometry.getAttribute('position') as BufferAttribute\n pos.set([...origin.toArray(), ...this.near.position.toArray()])\n pos.needsUpdate = true\n\n /**\n * Update hit points visualization\n */\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = this.hits?.[i]\n\n if (hit) {\n const { point } = hit\n _o.position.copy(point)\n _o.scale.setScalar(1)\n } else {\n _o.scale.setScalar(0)\n }\n\n _o.updateMatrix()\n\n this.hitPoints.setMatrixAt(i, _o.matrix)\n }\n\n this.hitPoints.instanceMatrix.needsUpdate = true\n\n /**\n * Update the color of the origin based on wether there are hits.\n */\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1])\n }\n\n dispose = () => {\n this.origin.geometry.dispose()\n this.origin.material.dispose()\n this.near.geometry.dispose()\n this.near.material.dispose()\n this.far.geometry.dispose()\n this.far.material.dispose()\n this.nearToFar.geometry.dispose()\n this.nearToFar.material.dispose()\n this.originToNear.geometry.dispose()\n this.originToNear.material.dispose()\n this.hitPoints.dispose()\n }\n}\n\nexport { RaycasterHelper }\n"],"names":[],"mappings":"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"}
|
package/index.cjs
CHANGED
@@ -247,6 +247,7 @@ const Line2 = require("./lines/Line2.cjs");
|
|
247
247
|
const LineMaterial = require("./lines/LineMaterial.cjs");
|
248
248
|
const LineSegments2 = require("./lines/LineSegments2.cjs");
|
249
249
|
const LightProbeHelper = require("./helpers/LightProbeHelper.cjs");
|
250
|
+
const RaycasterHelper = require("./helpers/RaycasterHelper.cjs");
|
250
251
|
const VertexTangentsHelper = require("./helpers/VertexTangentsHelper.cjs");
|
251
252
|
const PositionalAudioHelper = require("./helpers/PositionalAudioHelper.cjs");
|
252
253
|
const VertexNormalsHelper = require("./helpers/VertexNormalsHelper.cjs");
|
@@ -574,6 +575,7 @@ exports.Line2 = Line2.Line2;
|
|
574
575
|
exports.LineMaterial = LineMaterial.LineMaterial;
|
575
576
|
exports.LineSegments2 = LineSegments2.LineSegments2;
|
576
577
|
exports.LightProbeHelper = LightProbeHelper.LightProbeHelper;
|
578
|
+
exports.RaycasterHelper = RaycasterHelper.RaycasterHelper;
|
577
579
|
exports.VertexTangentsHelper = VertexTangentsHelper.VertexTangentsHelper;
|
578
580
|
exports.PositionalAudioHelper = PositionalAudioHelper.PositionalAudioHelper;
|
579
581
|
exports.VertexNormalsHelper = VertexNormalsHelper.VertexNormalsHelper;
|
package/index.cjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.d.ts
CHANGED
@@ -246,6 +246,7 @@ export * from './lines/Line2';
|
|
246
246
|
export * from './lines/LineMaterial';
|
247
247
|
export * from './lines/LineSegments2';
|
248
248
|
export * from './helpers/LightProbeHelper';
|
249
|
+
export * from './helpers/RaycasterHelper';
|
249
250
|
export * from './helpers/VertexTangentsHelper';
|
250
251
|
export * from './helpers/PositionalAudioHelper';
|
251
252
|
export * from './helpers/VertexNormalsHelper';
|
package/index.js
CHANGED
@@ -245,6 +245,7 @@ import { Line2 } from "./lines/Line2.js";
|
|
245
245
|
import { LineMaterial } from "./lines/LineMaterial.js";
|
246
246
|
import { LineSegments2 } from "./lines/LineSegments2.js";
|
247
247
|
import { LightProbeHelper } from "./helpers/LightProbeHelper.js";
|
248
|
+
import { RaycasterHelper } from "./helpers/RaycasterHelper.js";
|
248
249
|
import { VertexTangentsHelper } from "./helpers/VertexTangentsHelper.js";
|
249
250
|
import { PositionalAudioHelper } from "./helpers/PositionalAudioHelper.js";
|
250
251
|
import { VertexNormalsHelper } from "./helpers/VertexNormalsHelper.js";
|
@@ -459,6 +460,7 @@ export {
|
|
459
460
|
RGBELoader,
|
460
461
|
RGBMLoader,
|
461
462
|
RGBShiftShader,
|
463
|
+
RaycasterHelper,
|
462
464
|
RectAreaLightHelper,
|
463
465
|
RectAreaLightUniformsLib,
|
464
466
|
Reflector,
|
package/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|