@galacean/effects-plugin-editor-gizmo 1.0.0 → 1.1.0-alpha.0

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/index.mjs CHANGED
@@ -3,10 +3,10 @@
3
3
  * Description: Galacean Effects player editor gizmo plugin
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 茂安,旻诺
6
- * Version: v1.0.0
6
+ * Version: v1.1.0-alpha.0
7
7
  */
8
8
 
9
- import { GLGeometry, DestroyOptions, glContext, ShaderType, GLSLVersion, Material, Mesh, createShaderWithMarcos, Geometry, Transform, Texture, noop, assertExist, spec, HitTestType, intersectRayTriangle, intersectRaySphere, intersectRayBox, VFXItem, RenderPass, RenderPassPriorityPostprocess, TextureLoadAction, RenderPassPriorityPrepare, AbstractPlugin, registerPlugin } from '@galacean/effects';
9
+ import { math, GLGeometry, DestroyOptions, glContext, ShaderType, GLSLVersion, Material, Mesh, createShaderWithMarcos, Geometry, Transform, Texture, noop, assertExist, VFXItem, HitTestType, spec, RenderPass, RenderPassPriorityPostprocess, TextureLoadAction, RenderPassPriorityPrepare, AbstractPlugin, registerPlugin } from '@galacean/effects';
10
10
 
11
11
  /******************************************************************************
12
12
  Copyright (c) Microsoft Corporation.
@@ -161,6 +161,7 @@ var GizmoSubType;
161
161
  GizmoSubType[GizmoSubType["floorGrid"] = 21] = "floorGrid";
162
162
  })(GizmoSubType || (GizmoSubType = {}));
163
163
 
164
+ var Vector4 = math.Vector4;
164
165
  var WireframeGeometryType;
165
166
  (function (WireframeGeometryType) {
166
167
  WireframeGeometryType[WireframeGeometryType["triangle"] = 0] = "triangle";
@@ -233,7 +234,7 @@ function createModeWireframe(engine, mesh, color) {
233
234
  };
234
235
  var material = Material.create(engine, materialOptions);
235
236
  material.depthTest = mesh.material.depthTest;
236
- material.setVector4('uPreviewColor', [color[0], color[1], color[2], 1]);
237
+ material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));
237
238
  return updateWireframeMesh(mesh, Mesh.create(engine, {
238
239
  geometry: geometry,
239
240
  material: material,
@@ -331,225 +332,13 @@ function createGizmoShader(marcos, shader, shaderType, level) {
331
332
  return createShaderWithMarcos(marcos, newShader, shaderType, level);
332
333
  }
333
334
 
334
- var d2r = Math.PI / 180;
335
- var cos = Math.cos;
336
- var sin = Math.sin;
337
- function vecAdd(out, a, b) {
338
- for (var i = 0, len = a.length; i < len; i++) {
339
- out[i] = a[i] + b[i];
340
- }
341
- return out;
342
- }
343
- function vecSub(out, a, b) {
344
- for (var i = 0, len = a.length; i < len; i++) {
345
- out[i] = a[i] - b[i];
346
- }
347
- return out;
348
- }
349
- function vecSquareDistance(v0, v1) {
350
- var sum = 0;
351
- for (var i = 0, len = v0.length; i < len; i++) {
352
- var d = v0[i] - v1[i];
353
- sum += d * d;
354
- }
355
- return sum;
356
- }
357
- function vecNormalize(a) {
358
- var sum = 0;
359
- for (var i = 0, len = a.length; i < len; i++) {
360
- sum += a[i] * a[i];
361
- }
362
- sum = Math.sqrt(sum);
363
- return sum === 0 ? a.slice() : a.map(function (b) { return b / sum; });
364
- }
365
- function vecMulScalar(out, vec, a) {
366
- for (var i = 0, len = vec.length; i < len; i++) {
367
- out[i] = vec[i] * a;
368
- }
369
- return out;
370
- }
371
- function vec3MulMat4(out, vec3, mat4) {
372
- var x = vec3[0], y = vec3[1], z = vec3[2];
373
- var w = mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15];
374
- w = w || 1.0;
375
- out[0] = (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]) / w;
376
- out[1] = (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]) / w;
377
- out[2] = (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]) / w;
378
- return out;
379
- }
380
- function vec4MulMat4(out, cartesian, mat4) {
381
- var vX = cartesian[0];
382
- var vY = cartesian[1];
383
- var vZ = cartesian[2];
384
- var vW = cartesian[3];
385
- var x = mat4[0] * vX + mat4[4] * vY + mat4[8] * vZ + mat4[12] * vW;
386
- var y = mat4[1] * vX + mat4[5] * vY + mat4[9] * vZ + mat4[13] * vW;
387
- var z = mat4[2] * vX + mat4[6] * vY + mat4[10] * vZ + mat4[14] * vW;
388
- var w = mat4[3] * vX + mat4[7] * vY + mat4[11] * vZ + mat4[15] * vW;
389
- out[0] = x;
390
- out[1] = y;
391
- out[2] = z;
392
- out[3] = w;
393
- return out;
394
- }
395
- function vec3MulMat3(out, a, m) {
396
- var x = a[0], y = a[1], z = a[2];
397
- out[0] = x * m[0] + y * m[3] + z * m[6];
398
- out[1] = x * m[1] + y * m[4] + z * m[7];
399
- out[2] = x * m[2] + y * m[5] + z * m[8];
400
- return out;
401
- }
402
- function vec3MulMat3ByPoint(out, a, m, c) {
403
- a[0]; a[1]; a[2];
404
- var deltaX = a[0] - c[0], deltaY = a[1] - c[1], deltaZ = a[2] - c[2];
405
- var deltaOut = vec3MulMat3([], [deltaX, deltaY, deltaZ], m);
406
- out[0] = deltaOut[0] + c[0];
407
- out[1] = deltaOut[1] + c[1];
408
- out[2] = deltaOut[2] + c[2];
409
- return out;
410
- }
411
- function mat3FromRotationZYX(ret, x, y, z) {
412
- var cosX = cos(x * d2r);
413
- var cosY = cos(y * d2r);
414
- var cosZ = cos(z * d2r);
415
- var sinX = sin(x * d2r);
416
- var sinY = sin(y * d2r);
417
- var sinZ = sin(z * d2r);
418
- ret[0] = cosY * cosZ;
419
- ret[1] = cosY * sinZ;
420
- ret[2] = -sinY;
421
- ret[3] = -cosX * sinZ + sinX * sinY * cosZ;
422
- ret[4] = cosX * cosZ + sinX * sinY * sinZ;
423
- ret[5] = sinX * cosY;
424
- ret[6] = sinZ * sinX + cosX * sinY * cosZ;
425
- ret[7] = -sinX * cosZ + cosX * sinY * sinZ;
426
- ret[8] = cosX * cosY;
427
- return ret;
428
- }
429
- function mat3FromRotation(ret, rotation) {
430
- return mat3FromRotationZYX(ret, -rotation[0], -rotation[1], -rotation[2]);
431
- }
432
- function mat4MulMat4(a, b) {
433
- var out = [];
434
- var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
435
- var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
436
- var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
437
- var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
438
- var b00 = b[0], b01 = b[1], b02 = b[2], b03 = b[3];
439
- var b10 = b[4], b11 = b[5], b12 = b[6], b13 = b[7];
440
- var b20 = b[8], b21 = b[9], b22 = b[10], b23 = b[11];
441
- var b30 = b[12], b31 = b[13], b32 = b[14], b33 = b[15];
442
- out[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;
443
- out[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;
444
- out[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;
445
- out[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;
446
- out[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;
447
- out[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;
448
- out[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;
449
- out[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;
450
- out[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;
451
- out[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;
452
- out[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;
453
- out[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;
454
- out[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;
455
- out[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;
456
- out[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;
457
- out[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;
458
- return out;
459
- }
460
- function vec3ToVec2(a) {
461
- return [a[0], a[1]];
462
- }
463
- function distanceOfPointAndLine(point, line) {
464
- //三角形三个边长
465
- var AC = [0, 0];
466
- var BC = [0, 0];
467
- var AB = [0, 0];
468
- vecSub(AC, point, line[0]);
469
- vecSub(BC, point, line[1]);
470
- vecSub(AB, line[1], line[0]);
471
- var lengthAC = Math.hypot.apply(Math, __spreadArray([], __read(AC), false));
472
- var lengthBC = Math.hypot.apply(Math, __spreadArray([], __read(BC), false));
473
- var lengthAB = Math.hypot.apply(Math, __spreadArray([], __read(AB), false));
474
- //利用海伦公式计算三角形面积
475
- //周长的一半
476
- var P = (lengthAC + lengthBC + lengthAB) / 2;
477
- var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
478
- //普通公式计算三角形面积反推点到线的垂直距离
479
- var distance = (2 * allArea) / lengthAB;
480
- var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
481
- var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
482
- var isInLine = false;
483
- if (l1 <= lengthAB && l2 <= lengthAB) {
484
- isInLine = true;
485
- }
486
- return {
487
- distance: distance,
488
- isInLine: isInLine,
489
- };
490
- }
491
- function projectionOfPointAndLine(point, line) {
492
- var AC = [0, 0];
493
- var BC = [0, 0];
494
- var AB = [0, 0];
495
- vecSub(AC, point, vec3ToVec2(line[0]));
496
- vecSub(BC, point, vec3ToVec2(line[1]));
497
- vecSub(AB, vec3ToVec2(line[1]), vec3ToVec2(line[0]));
498
- var lengthAC = Math.hypot.apply(Math, __spreadArray([], __read(AC), false));
499
- var lengthBC = Math.hypot.apply(Math, __spreadArray([], __read(BC), false));
500
- var lengthAB = Math.hypot.apply(Math, __spreadArray([], __read(AB), false));
501
- //利用海伦公式计算三角形面积
502
- //周长的一半
503
- var P = (lengthAC + lengthBC + lengthAB) / 2;
504
- var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
505
- //普通公式计算三角形面积反推点到线的垂直距离
506
- var distance = (2 * allArea) / lengthAB;
507
- var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
508
- var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
509
- var worldAB = [0, 0, 0];
510
- vecSub(worldAB, line[1], line[0]);
511
- var worldAP = [0, 0, 0];
512
- vecMulScalar(worldAP, worldAB, l1 / (l1 + l2));
513
- var worldP = [0, 0, 0];
514
- vecAdd(worldP, line[0], worldAP);
515
- return worldP;
516
- }
517
- function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
518
- var a = 1.0 / (right - left);
519
- var b = 1.0 / (top - bottom);
520
- var c = 1.0 / (far - near);
521
- var tx = -(right + left) * a;
522
- var ty = -(top + bottom) * b;
523
- var tz = -(far + near) * c;
524
- a *= 2.0;
525
- b *= 2.0;
526
- c *= -2.0;
527
- var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
528
- result[0] = a;
529
- result[1] = 0.0;
530
- result[2] = 0.0;
531
- result[3] = 0.0;
532
- result[4] = 0.0;
533
- result[5] = b;
534
- result[6] = 0.0;
535
- result[7] = 0.0;
536
- result[8] = 0.0;
537
- result[9] = 0.0;
538
- result[10] = c;
539
- result[11] = 0.0;
540
- result[12] = tx;
541
- result[13] = ty;
542
- result[14] = tz;
543
- result[15] = 1.0;
544
- return result;
545
- }
546
-
335
+ var Euler$1 = math.Euler, Vector3$7 = math.Vector3, Matrix4$5 = math.Matrix4;
547
336
  var rectSize = 0.04;
548
337
  var DEG2RAD = Math.PI / 180;
549
338
  function arcPath(radius, arc, options) {
550
339
  if (options === void 0) { options = {}; }
551
340
  var plane = options.plane, _a = options.translate, translate = _a === void 0 ? [0, 0, 0] : _a, _b = options.rotate, rotate = _b === void 0 ? [0, 0, 0] : _b;
552
- var rotation = mat3FromRotation([], rotate);
341
+ var rotMat4 = Euler$1.fromArray(rotate).negate().toMatrix4(new Matrix4$5());
553
342
  var points = [];
554
343
  var indices = [];
555
344
  addPoint(radius, 0);
@@ -564,23 +353,26 @@ function arcPath(radius, arc, options) {
564
353
  indices: indices,
565
354
  };
566
355
  function addPoint(cos, sin) {
567
- var point;
356
+ var point = new Vector3$7();
568
357
  if (plane === 'xz') {
569
- point = [cos, 0, sin];
358
+ point.set(cos, 0, sin);
570
359
  }
571
360
  else if (plane === 'yz') {
572
- point = [0, cos, sin];
361
+ point.set(0, cos, sin);
573
362
  }
574
363
  else {
575
- point = [cos, sin, 0];
364
+ point.set(cos, sin, 0);
576
365
  }
577
- point = vec3MulMat3(point, point, rotation);
578
- points.push(vecAdd(point, point, translate));
366
+ rotMat4.transformNormal(point);
367
+ points.push(point.add(translate));
579
368
  }
580
369
  }
581
370
  function line(p0, p1) {
582
371
  return {
583
- points: [p0, p1],
372
+ points: [
373
+ Vector3$7.fromArray(p0),
374
+ Vector3$7.fromArray(p1),
375
+ ],
584
376
  indices: [0, 1],
585
377
  };
586
378
  }
@@ -593,7 +385,7 @@ function box(width, height, depth, center) {
593
385
  [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],
594
386
  [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],
595
387
  ].map(function (item) {
596
- return [item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]];
388
+ return new Vector3$7(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);
597
389
  });
598
390
  return {
599
391
  points: points,
@@ -607,12 +399,15 @@ function box(width, height, depth, center) {
607
399
  function rect(width, height, pos) {
608
400
  var w = width / 2;
609
401
  var h = height / 2;
610
- var points = [[-w, h, 0], [w, h, 0], [w, -h, 0], [-w, -h, 0]];
402
+ var points = [
403
+ new Vector3$7(-w, h, 0),
404
+ new Vector3$7(w, h, 0),
405
+ new Vector3$7(w, -h, 0),
406
+ new Vector3$7(-w, -h, 0),
407
+ ];
611
408
  if (pos) {
612
409
  points.forEach(function (vec) {
613
- vec[0] += pos[0];
614
- vec[1] += pos[1];
615
- vec[2] += pos[2];
410
+ vec.add(pos);
616
411
  });
617
412
  }
618
413
  return {
@@ -629,7 +424,7 @@ function combineGeometries(geometries) {
629
424
  var geometry = geometries[i];
630
425
  if (geometry) {
631
426
  geometry.points.forEach(function (point) {
632
- points.push(point[0], point[1], point[2]);
427
+ points.push(point.x, point.y, point.z);
633
428
  });
634
429
  geometry.indices.forEach(function (index) { return indices.push(index + indicesBase); });
635
430
  indicesBase += geometry.points.length;
@@ -797,8 +592,8 @@ function createMesh(engine, points, indices, color, depthTest, name) {
797
592
  vertex: "precision highp float;\n\n attribute vec3 a_Position;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixVP;\n uniform vec4 uEditorTransform;\n void main(){\n gl_Position = effects_MatrixVP * u_model * vec4(a_Position,1.0);\n gl_Position = vec4(gl_Position.xy * uEditorTransform.xy + uEditorTransform.zw * gl_Position.w,gl_Position.zw);\n }",
798
593
  },
799
594
  });
800
- material.setVector3('u_color', color);
801
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
595
+ material.setVector3('u_color', Vector3$7.fromArray(color));
596
+ material.setMatrix('u_model', Matrix4$5.IDENTITY);
802
597
  material.depthTest = depthTest;
803
598
  material.stencilTest = false;
804
599
  material.blending = false;
@@ -897,6 +692,7 @@ var GeometryData = /** @class */ (function () {
897
692
  return GeometryData;
898
693
  }());
899
694
 
695
+ var Vector3$6 = math.Vector3;
900
696
  /**
901
697
  *
902
698
  */
@@ -946,8 +742,8 @@ var SphereGeometryData = /** @class */ (function (_super) {
946
742
  var z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);
947
743
  _this.points.push(x, y, z);
948
744
  // normal
949
- var normal = vecNormalize([x, y, z]);
950
- (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal), false));
745
+ var normal = new Vector3$6(x, y, z).normalize();
746
+ (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal.toArray()), false));
951
747
  // uv
952
748
  _this.uvs.push(u + uOffset, 1 - v);
953
749
  verticesRow.push(index++);
@@ -1035,6 +831,7 @@ var BoxGeometryData = /** @class */ (function (_super) {
1035
831
  return BoxGeometryData;
1036
832
  }(GeometryData));
1037
833
 
834
+ var Vector3$5 = math.Vector3;
1038
835
  /**
1039
836
  *
1040
837
  */
@@ -1091,8 +888,8 @@ var CylinderGeometryData = /** @class */ (function (_super) {
1091
888
  var py = -v * height + halfHeight;
1092
889
  var pz = radius * cosTheta;
1093
890
  points.push(px, py, pz);
1094
- var normal = vecNormalize([sinTheta, slope, cosTheta]);
1095
- normals.push.apply(normals, __spreadArray([], __read(normal), false));
891
+ var normal = new Vector3$5(sinTheta, slope, cosTheta).normalize();
892
+ normals.push.apply(normals, __spreadArray([], __read(normal.toArray()), false));
1096
893
  uvs.push(u, 1 - v);
1097
894
  indexRow.push(index++);
1098
895
  }
@@ -1179,6 +976,7 @@ var ConeGeometryData = /** @class */ (function (_super) {
1179
976
  return ConeGeometryData;
1180
977
  }(CylinderGeometryData));
1181
978
 
979
+ var Vector3$4 = math.Vector3;
1182
980
  /**
1183
981
  *
1184
982
  */
@@ -1212,8 +1010,10 @@ var TorusGeometryData = /** @class */ (function (_super) {
1212
1010
  _this.points.push(px, py, pz);
1213
1011
  var cx = radius * Math.cos(u);
1214
1012
  var cy = radius * Math.sin(u);
1215
- var normal = vecNormalize(vecSub([], [px, py, pz], [cx, cy, 0]));
1216
- (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal), false));
1013
+ var p = new Vector3$4(px, py, pz);
1014
+ var c = new Vector3$4(cx, cy, 0);
1015
+ var normal = p.subtract(c).normalize();
1016
+ (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal.toArray()), false));
1217
1017
  _this.uvs.push(i / tubularSegments);
1218
1018
  _this.uvs.push(j / radialSegments);
1219
1019
  }
@@ -1284,6 +1084,7 @@ var PlaneGeometryData = /** @class */ (function (_super) {
1284
1084
  return PlaneGeometryData;
1285
1085
  }(GeometryData));
1286
1086
 
1087
+ var Euler = math.Euler, Vector3$3 = math.Vector3, Matrix4$4 = math.Matrix4;
1287
1088
  /**
1288
1089
  *
1289
1090
  */
@@ -1305,16 +1106,16 @@ var FrustumGeometryData = /** @class */ (function (_super) {
1305
1106
  var ratio = aspect;
1306
1107
  var halfY = far * Math.tan(fovY / 2);
1307
1108
  var halfX = halfY * ratio;
1308
- var point1 = vecAdd([], position, [halfX, halfY, far]);
1309
- var point2 = vecAdd([], position, [-halfX, halfY, far]);
1310
- var point3 = vecAdd([], position, [-halfX, -halfY, far]);
1311
- var point4 = vecAdd([], position, [halfX, -halfY, far]);
1312
- var matrix = mat3FromRotationZYX([], rotation[0], rotation[1], rotation[2]);
1313
- var result1 = vec3MulMat3ByPoint([], point1, matrix, position);
1314
- var result2 = vec3MulMat3ByPoint([], point2, matrix, position);
1315
- var result3 = vec3MulMat3ByPoint([], point3, matrix, position);
1316
- var result4 = vec3MulMat3ByPoint([], point4, matrix, position);
1317
- (_a = _this.points).push.apply(_a, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(position), false), __read(result1), false), __read(result2), false), __read(result3), false), __read(result4), false));
1109
+ var point1 = new Vector3$3(halfX, halfY, far);
1110
+ var point2 = new Vector3$3(-halfX, halfY, far);
1111
+ var point3 = new Vector3$3(-halfX, -halfY, far);
1112
+ var point4 = new Vector3$3(halfX, -halfY, far);
1113
+ var matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4$4());
1114
+ var result1 = matrix.transformPoint(point1).add(position);
1115
+ var result2 = matrix.transformPoint(point2).add(position);
1116
+ var result3 = matrix.transformPoint(point3).add(position);
1117
+ var result4 = matrix.transformPoint(point4).add(position);
1118
+ (_a = _this.points).push.apply(_a, __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(position), false), __read(result1.toArray()), false), __read(result2.toArray()), false), __read(result3.toArray()), false), __read(result4.toArray()), false));
1318
1119
  _this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);
1319
1120
  return _this;
1320
1121
  }
@@ -1584,6 +1385,7 @@ axisIconMap.set('negX', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmC
1584
1385
  axisIconMap.set('negY', "data:image/png;base64,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\n 5ErkJggg==");
1585
1386
  axisIconMap.set('negZ', "data:image/png;base64,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");
1586
1387
 
1388
+ var Vector2$2 = math.Vector2, Vector3$2 = math.Vector3, Matrix4$3 = math.Matrix4;
1587
1389
  /**
1588
1390
  * 根据 gizmoSubType 类型创建几何体 Mesh
1589
1391
  * @param subType - gizmoSubType 类型
@@ -1732,15 +1534,19 @@ function getTriangle(geometry, transform) {
1732
1534
  var points = geometry.getAttributeData('a_Position');
1733
1535
  var mat4 = transform.getWorldMatrix();
1734
1536
  if (points && indices && indices.length > 0) {
1735
- indices === null || indices === void 0 ? void 0 : indices.forEach(function (index, i) {
1736
- var position = [points[index * 3], points[index * 3 + 1], points[index * 3 + 2]];
1737
- var localPosition = [0, 0, 0];
1738
- vec3MulMat4(localPosition, position, mat4);
1739
- if (result[Math.floor(i / 3)] === undefined) {
1740
- result[Math.floor(i / 3)] = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
1741
- }
1742
- result[Math.floor(i / 3)][i % 3] = localPosition;
1743
- });
1537
+ for (var i = 0; i < indices.length; i += 3) {
1538
+ var i0 = indices[i] * 3;
1539
+ var i1 = indices[i + 1] * 3;
1540
+ var i2 = indices[i + 2] * 3;
1541
+ var p0 = new Vector3$2(points[i0], points[i0 + 1], points[i0 + 2]);
1542
+ var p1 = new Vector3$2(points[i1], points[i1 + 1], points[i1 + 2]);
1543
+ var p2 = new Vector3$2(points[i2], points[i2 + 1], points[i2 + 2]);
1544
+ result.push({
1545
+ p0: mat4.projectPoint(p0),
1546
+ p1: mat4.projectPoint(p1),
1547
+ p2: mat4.projectPoint(p2),
1548
+ });
1549
+ }
1744
1550
  }
1745
1551
  return result;
1746
1552
  }
@@ -1965,7 +1771,7 @@ function createScaleMesh(engine, options, boundingMap) {
1965
1771
  createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);
1966
1772
  boundingMap.set('center', {
1967
1773
  type: BoundingType.sphere,
1968
- center: [0, 0, 0],
1774
+ center: new Vector3$2(),
1969
1775
  radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,
1970
1776
  });
1971
1777
  return result;
@@ -2231,11 +2037,11 @@ function createSpriteMesh(engine, options, texture, boundingMap) {
2231
2037
  * @returns 纯色材质,无光照,无透明
2232
2038
  */
2233
2039
  function createMaterial(engine, color, depthTest) {
2234
- var myColor = color ? color : [255, 255, 255];
2040
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2235
2041
  var myDepthTest = depthTest ? depthTest : false;
2236
2042
  var material = Material.create(engine, {
2237
2043
  uniformValues: {
2238
- u_color: new Float32Array(myColor),
2044
+ u_color: new Float32Array(myColor.toArray()),
2239
2045
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2240
2046
  },
2241
2047
  uniformSemantics: {
@@ -2251,7 +2057,7 @@ function createMaterial(engine, color, depthTest) {
2251
2057
  },
2252
2058
  });
2253
2059
  material.setVector3('u_color', myColor);
2254
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2060
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2255
2061
  material.depthTest = myDepthTest;
2256
2062
  material.stencilTest = false;
2257
2063
  material.blending = false;
@@ -2266,11 +2072,11 @@ function createMaterial(engine, color, depthTest) {
2266
2072
  * @returns
2267
2073
  */
2268
2074
  function createHideBackMaterial(engine, color, depthTest) {
2269
- var myColor = color ? color : [255, 255, 255];
2075
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2270
2076
  var myDepthTest = depthTest ? depthTest : false;
2271
2077
  var material = Material.create(engine, {
2272
2078
  uniformValues: {
2273
- u_color: new Float32Array(myColor),
2079
+ u_color: new Float32Array(myColor.toArray()),
2274
2080
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2275
2081
  u_cameraPos: new Float32Array([0, 0, 0]),
2276
2082
  u_center: new Float32Array([0, 0, 0]),
@@ -2288,9 +2094,9 @@ function createHideBackMaterial(engine, color, depthTest) {
2288
2094
  },
2289
2095
  });
2290
2096
  material.setVector3('u_color', myColor);
2291
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2292
- material.setVector3('u_cameraPos', [0, 0, 0]);
2293
- material.setVector3('u_center', [0, 0, 0]);
2097
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2098
+ material.setVector3('u_cameraPos', Vector3$2.ZERO);
2099
+ material.setVector3('u_center', Vector3$2.ZERO);
2294
2100
  material.depthTest = myDepthTest;
2295
2101
  material.stencilTest = false;
2296
2102
  material.blending = false;
@@ -2306,12 +2112,12 @@ function createHideBackMaterial(engine, color, depthTest) {
2306
2112
  * @returns
2307
2113
  */
2308
2114
  function createBlendMaterial(engine, color, depthTest, alpha) {
2309
- var myColor = color ? color : [255, 255, 255];
2115
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2310
2116
  var myDepthTest = depthTest ? depthTest : false;
2311
2117
  var myAlpha = alpha ? alpha : 1;
2312
2118
  var material = Material.create(engine, {
2313
2119
  uniformValues: {
2314
- u_color: new Float32Array(myColor),
2120
+ u_color: new Float32Array(myColor.toArray()),
2315
2121
  u_alpha: new Float32Array([myAlpha, 0]),
2316
2122
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2317
2123
  },
@@ -2328,8 +2134,8 @@ function createBlendMaterial(engine, color, depthTest, alpha) {
2328
2134
  },
2329
2135
  });
2330
2136
  material.setVector3('u_color', myColor);
2331
- material.setVector2('u_alpha', [myAlpha, 0]);
2332
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2137
+ material.setVector2('u_alpha', new Vector2$2(myAlpha, 0));
2138
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2333
2139
  material.depthTest = myDepthTest;
2334
2140
  material.stencilTest = false;
2335
2141
  material.blending = true;
@@ -2358,8 +2164,8 @@ function createSpriteMaterial(engine, data, depthTest) {
2358
2164
  vertex: "\n precision highp float;\n\n attribute vec3 a_Position;\n attribute vec2 a_UV1;\n\n uniform mat4 u_model;\n uniform mat4 effects_MatrixV;\n uniform mat4 _MatrixP;\n uniform mat4 effects_MatrixInvV;\n uniform vec4 uEditorTransform;\n varying vec2 v_uv;\n\n void main(){\n v_uv = a_UV1;\n vec4 pos = u_model * vec4(0., 0., 0., 1.0);\n // vec4 pos = u_model * vec4(a_Position,1.0);\n\n pos.xyz += effects_MatrixInvV[0].xyz * a_Position.x + effects_MatrixInvV[1].xyz * a_Position.y;\n gl_Position = _MatrixP * effects_MatrixV * pos;\n gl_Position = vec4(gl_Position.xy * uEditorTransform.xy + uEditorTransform.zw * gl_Position.w,gl_Position.zw);\n }",
2359
2165
  },
2360
2166
  });
2361
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2362
- material.setVector2('u_alpha', [1, 0]);
2167
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2168
+ material.setVector2('u_alpha', new Vector2$2(1, 0));
2363
2169
  if (data instanceof Texture) {
2364
2170
  material.setTexture('u_iconTex', data);
2365
2171
  // uniformValues.u_iconTex = data;
@@ -2367,10 +2173,10 @@ function createSpriteMaterial(engine, data, depthTest) {
2367
2173
  else {
2368
2174
  var color_1;
2369
2175
  if (data === undefined) {
2370
- color_1 = [255, 255, 255];
2176
+ color_1 = new Vector3$2(255, 255, 255);
2371
2177
  }
2372
2178
  else {
2373
- color_1 = data;
2179
+ color_1 = Vector3$2.fromArray(data);
2374
2180
  }
2375
2181
  material.setVector3('u_color', color_1);
2376
2182
  // uniformValues.u_color = new Float32Array(color);
@@ -2391,21 +2197,95 @@ function createSpriteMaterial(engine, data, depthTest) {
2391
2197
  function createAxisBounding(size, boundingMap) {
2392
2198
  boundingMap.set('xAxis', {
2393
2199
  type: BoundingType.line,
2394
- points: [[0, 0, 0], [size.length, 0, 0]],
2200
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(size.length, 0, 0)],
2395
2201
  width: size.width,
2396
2202
  });
2397
2203
  boundingMap.set('yAxis', {
2398
2204
  type: BoundingType.line,
2399
- points: [[0, 0, 0], [0, size.length, 0]],
2205
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(0, size.length, 0)],
2400
2206
  width: size.width,
2401
2207
  });
2402
2208
  boundingMap.set('zAxis', {
2403
2209
  type: BoundingType.line,
2404
- points: [[0, 0, 0], [0, 0, size.length]],
2210
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(0, 0, size.length)],
2405
2211
  width: size.width,
2406
2212
  });
2407
2213
  }
2408
2214
 
2215
+ var Matrix4$2 = math.Matrix4, Vector2$1 = math.Vector2;
2216
+ function distanceOfPointAndLine(point, line) {
2217
+ //三角形三个边长
2218
+ var AC = new Vector2$1();
2219
+ var BC = new Vector2$1();
2220
+ var AB = new Vector2$1();
2221
+ AC.subtractVectors(point, line[0]);
2222
+ BC.subtractVectors(point, line[1]);
2223
+ AB.subtractVectors(line[1], line[0]);
2224
+ var lengthAC = AC.length();
2225
+ var lengthBC = BC.length();
2226
+ var lengthAB = AB.length();
2227
+ //利用海伦公式计算三角形面积
2228
+ //周长的一半
2229
+ var P = (lengthAC + lengthBC + lengthAB) / 2;
2230
+ var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
2231
+ //普通公式计算三角形面积反推点到线的垂直距离
2232
+ var distance = (2 * allArea) / lengthAB;
2233
+ var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
2234
+ var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
2235
+ var isInLine = false;
2236
+ if (l1 <= lengthAB && l2 <= lengthAB) {
2237
+ isInLine = true;
2238
+ }
2239
+ return {
2240
+ distance: distance,
2241
+ isInLine: isInLine,
2242
+ };
2243
+ }
2244
+ function projectionOfPointAndLine(point, line) {
2245
+ var AC = new Vector2$1();
2246
+ var BC = new Vector2$1();
2247
+ var AB = new Vector2$1();
2248
+ var line0 = line[0].toVector2();
2249
+ var line1 = line[1].toVector2();
2250
+ AC.subtractVectors(point, line0);
2251
+ BC.subtractVectors(point, line1);
2252
+ AB.subtractVectors(line1, line0);
2253
+ var lengthAC = AC.length();
2254
+ var lengthBC = BC.length();
2255
+ var lengthAB = AB.length();
2256
+ //利用海伦公式计算三角形面积
2257
+ //周长的一半
2258
+ var P = (lengthAC + lengthBC + lengthAB) / 2;
2259
+ var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
2260
+ //普通公式计算三角形面积反推点到线的垂直距离
2261
+ var distance = (2 * allArea) / lengthAB;
2262
+ var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
2263
+ var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
2264
+ var worldAB = line[1].clone().subtract(line[0]);
2265
+ var worldAP = worldAB.clone().multiply(l1 / (l1 + l2));
2266
+ var worldP = line[0].clone().add(worldAP);
2267
+ return worldP;
2268
+ }
2269
+ function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
2270
+ var a = 1.0 / (right - left);
2271
+ var b = 1.0 / (top - bottom);
2272
+ var c = 1.0 / (far - near);
2273
+ var tx = -(right + left) * a;
2274
+ var ty = -(top + bottom) * b;
2275
+ var tz = -(far + near) * c;
2276
+ a *= 2.0;
2277
+ b *= 2.0;
2278
+ c *= -2.0;
2279
+ return new Matrix4$2(a, 0.0, 0.0, 0.0,
2280
+ //
2281
+ 0.0, b, 0.0, 0.0,
2282
+ //
2283
+ 0.0, 0.0, c, 0.0,
2284
+ //
2285
+ tx, ty, tz, 1.0);
2286
+ }
2287
+
2288
+ var Matrix4$1 = math.Matrix4; math.Vector2; var Vector3$1 = math.Vector3;
2409
2289
  /**
2410
2290
  * 线条包围盒射线检测算法
2411
2291
  * @param out - 射线与包围盒交点位置
@@ -2413,40 +2293,29 @@ function createAxisBounding(size, boundingMap) {
2413
2293
  * @param points - 线条包围盒两端点位置
2414
2294
  * @param radius - 线条包围盒辐射半径
2415
2295
  * @param camera - 相机对象
2416
- * @returns 射线与包围盒交点位置 | null
2296
+ * @returns 射线与包围盒交点位置 | undefined
2417
2297
  */
2418
2298
  function intersectRayLine(out, pointInCanvas, points, radius, worldMat4, camera) {
2419
2299
  // 构造一个辐射半径边缘的点 radiusPoint
2420
- var radiusPoint = [0, 0, 0];
2421
- var up = [
2422
- worldMat4[1],
2423
- worldMat4[5],
2424
- worldMat4[9],
2425
- ];
2426
- vecMulScalar(radiusPoint, vecNormalize(up), radius);
2427
- vecAdd(radiusPoint, points[0], radiusPoint);
2300
+ var up = new Vector3$1(worldMat4.elements[1], worldMat4.elements[5], worldMat4.elements[9]).normalize();
2301
+ var radiusPoint = up.clone().multiply(radius);
2302
+ radiusPoint.add(points[0]);
2428
2303
  // 计算 start、end、radius 在屏幕空间上的投影
2429
- var mvpMat4 = camera.getModelViewProjection([], worldMat4);
2430
- var screenStart = [0, 0, 0];
2431
- var screenEnd = [0, 0, 0];
2432
- var screenRadiusPoint = [0, 0, 0];
2433
- vec3MulMat4(screenStart, points[0], mvpMat4);
2434
- vec3MulMat4(screenEnd, points[1], mvpMat4);
2435
- vec3MulMat4(screenRadiusPoint, radiusPoint, mvpMat4);
2436
- var screenRadiusVector = [0, 0, 0];
2437
- vecSub(screenRadiusVector, screenRadiusPoint, screenStart);
2438
- var screenRadius = Math.hypot.apply(Math, __spreadArray([], __read(screenRadiusVector), false));
2304
+ var mvpMat4 = camera.getModelViewProjection(new Matrix4$1(), worldMat4);
2305
+ var screenStart = mvpMat4.projectPoint(points[0], new Vector3$1());
2306
+ var screenEnd = mvpMat4.projectPoint(points[1], new Vector3$1());
2307
+ var screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3$1());
2308
+ var screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);
2309
+ var screenRadius = screenRadiusVector.length();
2439
2310
  // 计算屏幕交互点与线条的距离
2440
- var _a = distanceOfPointAndLine(pointInCanvas, [vec3ToVec2(screenStart), vec3ToVec2(screenEnd)]), distance = _a.distance, isInLine = _a.isInLine;
2311
+ var _a = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]), distance = _a.distance, isInLine = _a.isInLine;
2441
2312
  if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内
2442
2313
  // 计算交互点在线条上的投影并转换为世界坐标
2443
2314
  var screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);
2444
2315
  var inverseViewProjection = camera.getInverseViewProjectionMatrix();
2445
- var worldPosition = [0, 0, 0];
2446
- vec3MulMat4(worldPosition, screenPosition, inverseViewProjection);
2447
- return worldPosition;
2316
+ inverseViewProjection.projectPoint(screenPosition, out);
2317
+ return out;
2448
2318
  }
2449
- return null;
2450
2319
  }
2451
2320
 
2452
2321
  /**
@@ -2489,21 +2358,16 @@ function createTexture(engine, image, hookDestroy) {
2489
2358
  * @returns 指定点
2490
2359
  */
2491
2360
  function moveToPointWidthFixDistance(targetPos, currentPos) {
2492
- var vecCameraItem = [0, 0, 0];
2493
- vecSub(vecCameraItem, currentPos, targetPos);
2494
- var normalVecCameraItem = vecNormalize(vecCameraItem);
2495
- var newPos = [0, 0, 0];
2496
- var scalerVecCameraItem = [0, 0, 0];
2497
- vecMulScalar(scalerVecCameraItem, normalVecCameraItem, 20);
2498
- var vecScalerItem = [0, 0, 0];
2499
- var vecItemScaler = [0, 0, 0];
2500
- vecSub(vecScalerItem, vecCameraItem, scalerVecCameraItem);
2501
- vecMulScalar(vecItemScaler, vecScalerItem, -1);
2502
- vecAdd(newPos, currentPos, vecItemScaler);
2503
- return newPos;
2361
+ var vecCameraItem = currentPos.clone().subtract(targetPos);
2362
+ var normalVecCameraItem = vecCameraItem.clone().normalize();
2363
+ var scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);
2364
+ var vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);
2365
+ var vecItemScaler = vecScalerItem.clone().multiply(-1);
2366
+ return currentPos.clone().add(vecItemScaler);
2504
2367
  }
2505
2368
 
2506
2369
  var constants = glContext;
2370
+ var Vector2 = math.Vector2, Vector3 = math.Vector3, Matrix4 = math.Matrix4; math.Ray; var Quaternion = math.Quaternion;
2507
2371
  /**
2508
2372
  * 包围盒类型
2509
2373
  */
@@ -2522,7 +2386,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2522
2386
  function GizmoVFXItem() {
2523
2387
  var _this = _super !== null && _super.apply(this, arguments) || this;
2524
2388
  _this.boundingMap = new Map();
2525
- _this.mat = [];
2389
+ _this.mat = Matrix4.fromIdentity();
2526
2390
  return _this;
2527
2391
  }
2528
2392
  Object.defineProperty(GizmoVFXItem.prototype, "type", {
@@ -2632,7 +2496,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2632
2496
  // const mesh = this.wireframeMesh = createParticleWireframe(engine, item.content.particleMesh.mesh, this.color);
2633
2497
  // meshesToAdd.push(mesh);
2634
2498
  // }
2635
- if (item.type === spec.ItemType.sprite || item.type === spec.ItemType.filter) {
2499
+ if (VFXItem.isSprite(item) || VFXItem.isFilterSprite(item)) {
2636
2500
  var color = this.color.slice();
2637
2501
  var mesh = this.spriteMesh = item.createWireframeMesh(item.content, color);
2638
2502
  this.wireframeMesh = mesh.mesh;
@@ -2746,32 +2610,32 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2746
2610
  if (this.targetItem) {
2747
2611
  if (this.contents) { // 组合几何体
2748
2612
  // const targetTransform = this.targetItem.transform.clone();
2749
- var worldPos = [0, 0, 0];
2750
- var worldQuat = [0, 0, 0, 0];
2751
- var worldSca = [1, 1, 1];
2613
+ var worldPos = new Vector3();
2614
+ var worldQuat = new Quaternion();
2615
+ var worldScale = new Vector3(1, 1, 1);
2752
2616
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2753
2617
  var targetTransform = new Transform({
2754
2618
  position: worldPos,
2755
2619
  quat: worldQuat,
2756
- scale: worldSca,
2620
+ scale: worldScale,
2757
2621
  valid: true,
2758
2622
  });
2759
2623
  // 移动\旋转\缩放gizmo去除近大远小
2760
2624
  if (this.subType === GizmoSubType.rotation || this.subType === GizmoSubType.scale || this.subType === GizmoSubType.translation) {
2761
2625
  var camera = this.composition.camera;
2762
- var cameraPos = camera.position || [0, 0, 0];
2626
+ var cameraPos = camera.position || new Vector3();
2763
2627
  var itemPos = targetTransform.position;
2764
2628
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2765
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2629
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2766
2630
  }
2767
2631
  this.mat = targetTransform.getWorldMatrix();
2768
2632
  var center = targetTransform.position;
2769
2633
  try {
2770
2634
  for (var _b = __values(this.contents), _c = _b.next(); !_c.done; _c = _b.next()) {
2771
2635
  var _d = __read(_c.value, 2), mesh = _d[0], transform = _d[1];
2772
- var worldMat4 = [];
2636
+ var worldMat4 = void 0;
2773
2637
  transform.parentTransform = targetTransform;
2774
- var position = [0, 0, 0];
2638
+ var position = new Vector3();
2775
2639
  transform.assignWorldTRS(position);
2776
2640
  // 物体和中心点在屏幕空间上投影的距离
2777
2641
  var distanceToCneter = 100;
@@ -2779,7 +2643,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2779
2643
  if (this.subType === GizmoSubType.viewHelper) {
2780
2644
  // 正交投影只需要计算物体在XY平面上的投影与中心点的距离
2781
2645
  if (mesh.name === 'sprite') {
2782
- distanceToCneter = Math.pow(vecSquareDistance(vec3ToVec2(position), vec3ToVec2(center)), 0.5);
2646
+ distanceToCneter = position.toVector2().distance(center.toVector2());
2783
2647
  theta = this.boundingMap.get('posX').radius;
2784
2648
  }
2785
2649
  // 将物体挂到相机的transform上
@@ -2792,15 +2656,15 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2792
2656
  var height = width / aspect;
2793
2657
  var cameraModelMat4 = this.composition.camera.getInverseViewMatrix();
2794
2658
  var padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
2795
- var localMat = [];
2659
+ var localMat = void 0;
2796
2660
  localMat = transform.getWorldMatrix();
2797
2661
  var worldTransform = new Transform({
2798
2662
  valid: true,
2799
2663
  });
2800
2664
  worldTransform.cloneFromMatrix(localMat);
2801
- worldTransform.setPosition((position[0] + width / 2) - padding, (position[1] + height / 2) - padding, position[2]);
2665
+ worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);
2802
2666
  localMat = worldTransform.getWorldMatrix();
2803
- worldMat4 = mat4MulMat4(cameraModelMat4, localMat);
2667
+ worldMat4 = cameraModelMat4.clone().multiply(localMat);
2804
2668
  // 正交投影到屏幕上
2805
2669
  var proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);
2806
2670
  mesh.material.setMatrix('_MatrixP', proMat5);
@@ -2818,10 +2682,10 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2818
2682
  // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题
2819
2683
  if (distanceToCneter < theta) {
2820
2684
  if (distanceToCneter < theta * 0.5) {
2821
- mesh.material.setVector2('u_alpha', [0, 0]);
2685
+ mesh.material.setVector2('u_alpha', new Vector2(0, 0));
2822
2686
  }
2823
2687
  else {
2824
- mesh.material.setVector2('u_alpha', [(2 / theta) * distanceToCneter - 1, 0]);
2688
+ mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));
2825
2689
  }
2826
2690
  }
2827
2691
  }
@@ -2835,9 +2699,9 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2835
2699
  }
2836
2700
  }
2837
2701
  if (this.content) { // 基础几何体
2838
- var worldPos = [0, 0, 0];
2839
- var worldQuat = [0, 0, 0, 0];
2840
- var worldSca = [1, 1, 1];
2702
+ var worldPos = new Vector3();
2703
+ var worldQuat = new Quaternion();
2704
+ var worldSca = new Vector3(1, 1, 1);
2841
2705
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2842
2706
  var targetTransform = new Transform({
2843
2707
  position: worldPos,
@@ -2847,10 +2711,10 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2847
2711
  });
2848
2712
  if (this.subType === GizmoSubType.light || this.subType === GizmoSubType.camera) {
2849
2713
  var camera = this.composition.camera;
2850
- var cameraPos = camera.position || [0, 0, 0];
2714
+ var cameraPos = camera.position || new Vector3(0, 0, 0);
2851
2715
  var itemPos = targetTransform.position;
2852
2716
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2853
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2717
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2854
2718
  }
2855
2719
  this.mat = targetTransform.getWorldMatrix();
2856
2720
  this.content.material.setMatrix('u_model', targetTransform.getWorldMatrix());
@@ -2866,13 +2730,13 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2866
2730
  var boundingMap = this.boundingMap;
2867
2731
  if (boundingMap.size > 0) {
2868
2732
  var boundingKeys_1 = boundingMap.keys();
2869
- var worldMat4_1 = [];
2733
+ var worldMat4_1;
2870
2734
  worldMat4_1 = this.transform.getWorldMatrix();
2871
2735
  if (this.targetItem) {
2872
2736
  //const targetTransform = this.targetItem.transform.clone();
2873
- var worldPos = [0, 0, 0];
2874
- var worldQuat = [0, 0, 0, 0];
2875
- var worldSca = [1, 1, 1];
2737
+ var worldPos = new Vector3();
2738
+ var worldQuat = new Quaternion();
2739
+ var worldSca = new Vector3(1, 1, 1);
2876
2740
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2877
2741
  var targetTransform = new Transform({
2878
2742
  position: worldPos,
@@ -2890,7 +2754,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2890
2754
  var cameraPos = camera.position || [0, 0, 0];
2891
2755
  var itemPos = targetTransform.position;
2892
2756
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2893
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2757
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2894
2758
  worldMat4_1 = targetTransform.getWorldMatrix();
2895
2759
  }
2896
2760
  else {
@@ -2913,16 +2777,23 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2913
2777
  self_1.hitBounding = undefined;
2914
2778
  var _loop_1 = function (key) {
2915
2779
  var bounding = boundingMap.get(key);
2916
- var center = [0, 0, 0];
2917
- var worldCenter = [0, 0, 0];
2780
+ var center = new Vector3();
2781
+ var worldCenter = new Vector3();
2918
2782
  if ((bounding === null || bounding === void 0 ? void 0 : bounding.type) === BoundingType.box || (bounding === null || bounding === void 0 ? void 0 : bounding.type) === BoundingType.sphere) {
2919
- center = (bounding === null || bounding === void 0 ? void 0 : bounding.center) ? bounding.center.slice() : [0, 0, 0];
2920
- vec3MulMat4(worldCenter, center, worldMat4_1);
2783
+ if (bounding === null || bounding === void 0 ? void 0 : bounding.center) {
2784
+ center.copyFrom(bounding === null || bounding === void 0 ? void 0 : bounding.center);
2785
+ }
2786
+ worldMat4_1.projectPoint(center, worldCenter);
2921
2787
  }
2922
2788
  var position;
2923
2789
  switch (bounding === null || bounding === void 0 ? void 0 : bounding.type) {
2924
2790
  case BoundingType.box: // 立方体包围盒
2925
- position = intersectRayBox([], ray.center, ray.direction, worldCenter, bounding === null || bounding === void 0 ? void 0 : bounding.size);
2791
+ {
2792
+ var boxHalfSize = bounding.size.clone().multiply(0.5);
2793
+ var boxMax = center.clone().add(boxHalfSize);
2794
+ var boxMin = center.clone().subtract(boxHalfSize);
2795
+ position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());
2796
+ }
2926
2797
  break;
2927
2798
  case BoundingType.sphere: // 球体包围盒
2928
2799
  // viewHelper 使用了正交投影,使用屏幕投影点计算
@@ -2942,45 +2813,37 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2942
2813
  var localTransform = new Transform({
2943
2814
  valid: true,
2944
2815
  });
2945
- var localMat4 = [];
2946
2816
  localTransform.cloneFromMatrix(worldMat4_1);
2947
2817
  var pos = localTransform.position;
2948
2818
  var padding = self_1.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
2949
- localTransform.setPosition((pos[0] + width / 2) - padding, (pos[1] + height / 2) - padding, pos[2]);
2950
- localMat4 = localTransform.getWorldMatrix();
2951
- var modelMat4 = mat4MulMat4(cameraModelMat4, localMat4);
2952
- vec3MulMat4(worldCenter, center, modelMat4);
2819
+ localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);
2820
+ var localMat4 = localTransform.getWorldMatrix();
2821
+ var modelMat4 = cameraModelMat4.clone().multiply(localMat4);
2822
+ modelMat4.projectPoint(center, worldCenter);
2953
2823
  // 包围球中心点正交投影到屏幕上
2954
- var screenCenter = [0, 0, 0, 0];
2955
- var vpMat4 = mat4MulMat4(proMat4, viewMat4);
2956
- var mvpMat4 = mat4MulMat4(vpMat4, modelMat4);
2957
- vec4MulMat4(screenCenter, __spreadArray(__spreadArray([], __read(center), false), [1.0], false), mvpMat4);
2958
- var screenCenterX = screenCenter[0] / screenCenter[3];
2959
- var screenCenterY = screenCenter[1] / screenCenter[3];
2824
+ var vpMat4 = proMat4.clone().multiply(viewMat4);
2825
+ var mvpMat4 = vpMat4.clone().multiply(modelMat4);
2826
+ var screenCenter = mvpMat4.projectPoint(center, new Vector3());
2827
+ screenCenter.x;
2828
+ screenCenter.y;
2960
2829
  // 包围球上的点正交投影到屏幕上
2961
2830
  var radius = bounding.radius;
2962
- var point = [0, 0, 0];
2963
- var up = [
2964
- localMat4[1],
2965
- localMat4[5],
2966
- localMat4[9],
2967
- ];
2968
- vecMulScalar(point, vecNormalize(up), radius);
2969
- vecAdd(point, center, point);
2970
- var screenPoint = [0, 0, 0, 0];
2971
- vec4MulMat4(screenPoint, __spreadArray(__spreadArray([], __read(point), false), [1.0], false), mvpMat4);
2972
- var screenPointX = screenPoint[0] / screenPoint[3];
2973
- var screenPointY = screenPoint[1] / screenPoint[3];
2831
+ var up = new Vector3(localMat4.elements[1], localMat4.elements[5], localMat4.elements[9]).normalize();
2832
+ var point = up.clone().multiply(radius);
2833
+ point.add(center);
2834
+ var screenPoint = mvpMat4.projectPoint(point, new Vector3());
2835
+ screenPoint.x;
2836
+ screenPoint.y;
2974
2837
  // 计算正交投影到屏幕上的包围球的半径
2975
- var vecRadius = [0, 0];
2976
- vecSub(vecRadius, [screenCenterX, screenCenterY], [screenPointX, screenPointY]);
2977
- var screenRadius = Math.hypot.apply(Math, __spreadArray([], __read(vecRadius), false));
2978
- if (Math.pow(vecSquareDistance(pointInCanvas, [screenCenterX, screenCenterY]), 0.5) < screenRadius * 1.2) {
2838
+ var screenCenter2 = screenCenter.toVector2();
2839
+ var screenPoint2 = screenPoint.toVector2();
2840
+ var screenRadius = screenCenter2.distance(screenPoint2);
2841
+ if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {
2979
2842
  position = worldCenter;
2980
2843
  }
2981
2844
  }
2982
2845
  else {
2983
- position = intersectRaySphere([], ray.center, ray.direction, worldCenter, bounding === null || bounding === void 0 ? void 0 : bounding.radius);
2846
+ position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());
2984
2847
  }
2985
2848
  break;
2986
2849
  case BoundingType.triangle: { // 三角数组包围盒
@@ -2989,14 +2852,12 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2989
2852
  var tmpPosition = void 0;
2990
2853
  for (var j = 0; j < triangles.length; j++) {
2991
2854
  var triangle = triangles[j];
2992
- var worldTriangle = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
2993
- // 坐标转换为世界坐标
2994
- for (var i = 0; i < 3; i++) {
2995
- var worldPosition = [0, 0, 0];
2996
- vec3MulMat4(worldPosition, triangle[i], worldMat4_1);
2997
- worldTriangle[i] = worldPosition;
2998
- }
2999
- tmpPosition = intersectRayTriangle([], ray.center, ray.direction, worldTriangle, backfaceCulling);
2855
+ var worldTriangle = {
2856
+ p0: worldMat4_1.projectPoint(triangle.p0, new Vector3()),
2857
+ p1: worldMat4_1.projectPoint(triangle.p1, new Vector3()),
2858
+ p2: worldMat4_1.projectPoint(triangle.p2, new Vector3()),
2859
+ };
2860
+ tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);
3000
2861
  if (tmpPosition) {
3001
2862
  tmpPositions.push(tmpPosition);
3002
2863
  }
@@ -3005,7 +2866,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3005
2866
  if (tmpPositions.length > 0) {
3006
2867
  var lastDistance_1;
3007
2868
  tmpPositions.forEach(function (item) {
3008
- var distance = vecSquareDistance(ray.center, item);
2869
+ var distance = ray.origin.distanceSquared(item);
3009
2870
  if (!lastDistance_1 || distance < lastDistance_1) {
3010
2871
  lastDistance_1 = distance;
3011
2872
  position = item;
@@ -3016,7 +2877,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3016
2877
  }
3017
2878
  case BoundingType.line: { // 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中
3018
2879
  var points = bounding.points, width = bounding.width;
3019
- position = intersectRayLine([], pointInCanvas, points, width / 2, worldMat4_1, self_1.composition.camera);
2880
+ position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4_1, self_1.composition.camera);
3020
2881
  break;
3021
2882
  }
3022
2883
  }
@@ -3024,8 +2885,8 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3024
2885
  hitPositions.push(position);
3025
2886
  // 缓存距离相机最近的 BoundingKey
3026
2887
  if (self_1.hitBounding) {
3027
- var distance = vecSquareDistance(ray.center, position);
3028
- var lastDistance = vecSquareDistance(ray.center, self_1.hitBounding.position);
2888
+ var distance = ray.origin.distanceSquared(position);
2889
+ var lastDistance = ray.origin.distanceSquared(self_1.hitBounding.position);
3029
2890
  if (distance < lastDistance) {
3030
2891
  self_1.hitBounding.key = key;
3031
2892
  self_1.hitBounding.position = position;
@@ -3332,7 +3193,7 @@ var EditorGizmoPlugin = /** @class */ (function (_super) {
3332
3193
  return EditorGizmoPlugin;
3333
3194
  }(AbstractPlugin));
3334
3195
 
3335
- var version = "1.0.0";
3196
+ var version = "1.1.0-alpha.0";
3336
3197
  console.info('[Galacean Effects Plugin Editor Gizmo] version: ' + version);
3337
3198
  registerPlugin('editor-gizmo', EditorGizmoPlugin, GizmoVFXItem);
3338
3199