@woosh/meep-engine 2.119.38 → 2.119.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.119.38",
8
+ "version": "2.119.40",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"computeTriangleClosestPointToPointBarycentric.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAhBW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAgIhB"}
1
+ {"version":3,"file":"computeTriangleClosestPointToPointBarycentric.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAhBW,MAAM,EAAE,iBACR,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,IAAI,CAoJhB"}
@@ -24,7 +24,8 @@ export function computeTriangleClosestPointToPointBarycentric(
24
24
  ax, ay, az,
25
25
  bx, by, bz,
26
26
  cx, cy, cz
27
- ){
27
+ ) {
28
+ // adapted from https://github.com/mrdoob/three.js/blob/676e85dc7cd5971a6565c4152e9e6d8bdd20a2b7/src/math/Triangle.js#L222
28
29
 
29
30
  let v, w;
30
31
 
@@ -47,15 +48,15 @@ export function computeTriangleClosestPointToPointBarycentric(
47
48
  const _vap_y = py - ay;
48
49
  const _vap_z = pz - az;
49
50
 
50
- const d1 = v3_dot(_vab_x, _vab_y, _vab_z, _vap_x, _vap_y, _vap_z );
51
- const d2 = v3_dot(_vac_x, _vac_y, _vac_z, _vap_x, _vap_y, _vap_z );
51
+ const d1 = v3_dot(_vab_x, _vab_y, _vab_z, _vap_x, _vap_y, _vap_z);
52
+ const d2 = v3_dot(_vac_x, _vac_y, _vac_z, _vap_x, _vap_y, _vap_z);
52
53
 
53
- if ( d1 <= 0 && d2 <= 0 ) {
54
+ if (d1 <= 0 && d2 <= 0) {
54
55
 
55
56
  // vertex region of A; barycentric coords (1, 0, 0)
56
57
 
57
58
  result[result_offset] = 1;
58
- result[result_offset+1] = 0;
59
+ result[result_offset + 1] = 0;
59
60
 
60
61
  return;
61
62
 
@@ -65,28 +66,34 @@ export function computeTriangleClosestPointToPointBarycentric(
65
66
  const _vbp_y = py - by;
66
67
  const _vbp_z = pz - bz;
67
68
 
68
- const d3 = v3_dot(_vab_x, _vab_y, _vab_z, _vbp_x, _vbp_y, _vbp_z );
69
- const d4 = v3_dot(_vac_x, _vac_y, _vac_z, _vbp_x, _vbp_y, _vbp_z );
69
+ const d3 = v3_dot(_vab_x, _vab_y, _vab_z, _vbp_x, _vbp_y, _vbp_z);
70
+ const d4 = v3_dot(_vac_x, _vac_y, _vac_z, _vbp_x, _vbp_y, _vbp_z);
70
71
 
71
- if ( d3 >= 0 && d4 <= d3 ) {
72
+ if (d3 >= 0 && d4 <= d3) {
72
73
 
73
74
  // vertex region of B; barycentric coords (0, 1, 0)
74
75
 
75
76
  result[result_offset] = 0;
76
- result[result_offset+1] = 1;
77
+ result[result_offset + 1] = 1;
77
78
 
78
79
  return;
79
80
 
80
81
  }
81
82
 
82
83
  const vc = d1 * d4 - d3 * d2;
83
- if ( vc <= 0 && d1 >= 0 && d3 <= 0 && d1 !== d3) {
84
+ if (vc <= 0 && d1 >= 0 && d3 <= 0) {
84
85
 
85
- v = d1 / ( d1 - d3 );
86
+ const s = d1 - d3;
87
+
88
+ if (s !== 0) {
89
+ v = d1 / s;
90
+ } else {
91
+ v = 0;
92
+ }
86
93
  // edge region of AB; barycentric coords (1-v, v, 0)
87
94
 
88
- result[result_offset] = 1-v;
89
- result[result_offset+1] = v;
95
+ result[result_offset] = 1 - v;
96
+ result[result_offset + 1] = v;
90
97
 
91
98
  return;
92
99
 
@@ -96,52 +103,65 @@ export function computeTriangleClosestPointToPointBarycentric(
96
103
  const _vcp_y = py - cy;
97
104
  const _vcp_z = pz - cz;
98
105
 
99
- const d5 = v3_dot(_vab_x, _vab_y, _vab_z, _vcp_x, _vcp_y, _vcp_z );
100
- const d6 = v3_dot(_vac_x, _vac_y, _vac_z, _vcp_x, _vcp_y, _vcp_z );
106
+ const d5 = v3_dot(_vab_x, _vab_y, _vab_z, _vcp_x, _vcp_y, _vcp_z);
107
+ const d6 = v3_dot(_vac_x, _vac_y, _vac_z, _vcp_x, _vcp_y, _vcp_z);
101
108
 
102
- if ( d6 >= 0 && d5 <= d6 ) {
109
+ if (d6 >= 0 && d5 <= d6) {
103
110
 
104
111
  // vertex region of C; barycentric coords (0, 0, 1)
105
112
 
106
113
  result[result_offset] = 0;
107
- result[result_offset+1] = 0;
114
+ result[result_offset + 1] = 0;
108
115
 
109
116
  return;
110
117
 
111
118
  }
112
119
 
113
120
  const vb = d5 * d2 - d1 * d6;
114
- if ( vb <= 0 && d2 >= 0 && d6 <= 0 && d2 !== d6 ) {
121
+ if (vb <= 0 && d2 >= 0 && d6 <= 0) {
122
+
123
+ const s = d2 - d6;
115
124
 
116
- w = d2 / ( d2 - d6 );
125
+ if (s !== 0) {
126
+ w = d2 / s;
127
+ } else {
128
+ w = 0;
129
+ }
117
130
 
118
131
  // edge region of AC; barycentric coords (1-w, 0, w)
119
132
 
120
- result[result_offset] = 1-w;
121
- result[result_offset+1] = 0;
133
+ result[result_offset] = 1 - w;
134
+ result[result_offset + 1] = 0;
122
135
 
123
136
  return;
124
137
 
125
138
  }
126
139
 
127
140
  const va = d3 * d6 - d5 * d4;
128
- if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {
141
+ if (va <= 0 && (d4 - d3) >= 0 && (d5 - d6) >= 0) {
142
+
143
+ const s = (d4 - d3) + (d5 - d6);
144
+
145
+ if(s !== 0) {
146
+ w = (d4 - d3) / s;
147
+ }else{
148
+ w = 1;
149
+ }
129
150
 
130
- w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );
131
151
  // edge region of BC; barycentric coords (0, 1-w, w)
132
152
 
133
153
  result[result_offset] = 0;
134
- result[result_offset+1] = 1-w;
154
+ result[result_offset + 1] = 1 - w;
135
155
 
136
156
  return;
137
157
 
138
158
  }
139
159
 
140
160
  // face region
141
- const denom = 1 / ( va + vb + vc );
161
+ const denom = 1 / (va + vb + vc);
142
162
  const u = va * denom
143
163
  v = vb * denom;
144
164
 
145
165
  result[result_offset] = u;
146
- result[result_offset+1] = v;
166
+ result[result_offset + 1] = v;
147
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query_bvh_geometry_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;GAWG;AACH,uFARW,MAAM,EAAE,GAAC,YAAY,WACrB,MAAM,EAAE,GAAC,WAAW,GAAC,WAAW,KAChC,MAAM,KACN,MAAM,KACN,MAAM,gBACN,MAAM,GACL,OAAO,CA0KlB"}
1
+ {"version":3,"file":"query_bvh_geometry_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/geometry/buffered/query/query_bvh_geometry_nearest.js"],"names":[],"mappings":"AAwBA;;;;;;;;;;;GAWG;AACH,uFARW,MAAM,EAAE,GAAC,YAAY,WACrB,MAAM,EAAE,GAAC,WAAW,GAAC,WAAW,KAChC,MAAM,KACN,MAAM,KACN,MAAM,gBACN,MAAM,GACL,OAAO,CA8KlB"}
@@ -115,23 +115,23 @@ export function query_bvh_geometry_nearest(
115
115
 
116
116
  if (distance_sqr_to_child1 < distance_sqr_to_child2) {
117
117
 
118
- // if (distance_sqr_to_child2 < nearest_distance_sqr) {
118
+ if (distance_sqr_to_child2 < nearest_distance_sqr) {
119
119
  stack[pointer++] = child_2;
120
- // }
120
+ }
121
121
 
122
- // if (distance_sqr_to_child1 < nearest_distance_sqr) {
122
+ if (distance_sqr_to_child1 < nearest_distance_sqr) {
123
123
  stack[pointer++] = child_1;
124
- // }
124
+ }
125
125
 
126
126
  } else {
127
127
 
128
- // if (distance_sqr_to_child1 < nearest_distance_sqr) {
128
+ if (distance_sqr_to_child1 < nearest_distance_sqr) {
129
129
  stack[pointer++] = child_1;
130
- // }
130
+ }
131
131
 
132
- // if (distance_sqr_to_child2 < nearest_distance_sqr) {
132
+ if (distance_sqr_to_child2 < nearest_distance_sqr) {
133
133
  stack[pointer++] = child_2;
134
- // }
134
+ }
135
135
 
136
136
  }
137
137
 
@@ -172,14 +172,18 @@ export function query_bvh_geometry_nearest(
172
172
 
173
173
  const u = v3_scratch_0[0];
174
174
  const v = v3_scratch_0[1];
175
+ const w = 1 - u - v;
175
176
 
176
177
  // construct edge
177
178
 
178
- const contact_x = (bx - ax) * u + (cx - ax) * v + ax;
179
- const contact_y = (by - ay) * u + (cy - ay) * v + ay;
180
- const contact_z = (bz - az) * u + (cz - az) * v + az;
179
+ const contact_x = (bx - ax) * v + (cx - ax) * w + ax;
180
+ const contact_y = (by - ay) * v + (cy - ay) * w + ay;
181
+ const contact_z = (bz - az) * v + (cz - az) * w + az;
181
182
 
182
- const distance_to_triangle_sqr = v3_distance_sqr(contact_x, contact_y, contact_z, x, y, z);
183
+ const distance_to_triangle_sqr = v3_distance_sqr(
184
+ contact_x, contact_y, contact_z,
185
+ x, y, z
186
+ );
183
187
 
184
188
  if (distance_to_triangle_sqr >= nearest_distance_sqr) {
185
189
  continue;