@galacean/effects-plugin-editor-gizmo 1.0.0 → 1.1.0-alpha.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/index.js CHANGED
@@ -3,7 +3,7 @@
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.1
7
7
  */
8
8
 
9
9
  'use strict';
@@ -165,6 +165,7 @@ exports.GizmoSubType = void 0;
165
165
  GizmoSubType[GizmoSubType["floorGrid"] = 21] = "floorGrid";
166
166
  })(exports.GizmoSubType || (exports.GizmoSubType = {}));
167
167
 
168
+ var Vector4 = effects.math.Vector4;
168
169
  var WireframeGeometryType;
169
170
  (function (WireframeGeometryType) {
170
171
  WireframeGeometryType[WireframeGeometryType["triangle"] = 0] = "triangle";
@@ -237,7 +238,7 @@ function createModeWireframe(engine, mesh, color) {
237
238
  };
238
239
  var material = effects.Material.create(engine, materialOptions);
239
240
  material.depthTest = mesh.material.depthTest;
240
- material.setVector4('uPreviewColor', [color[0], color[1], color[2], 1]);
241
+ material.setVector4('uPreviewColor', new Vector4(color[0], color[1], color[2], 1));
241
242
  return updateWireframeMesh(mesh, effects.Mesh.create(engine, {
242
243
  geometry: geometry,
243
244
  material: material,
@@ -335,225 +336,13 @@ function createGizmoShader(marcos, shader, shaderType, level) {
335
336
  return effects.createShaderWithMarcos(marcos, newShader, shaderType, level);
336
337
  }
337
338
 
338
- var d2r = Math.PI / 180;
339
- var cos = Math.cos;
340
- var sin = Math.sin;
341
- function vecAdd(out, a, b) {
342
- for (var i = 0, len = a.length; i < len; i++) {
343
- out[i] = a[i] + b[i];
344
- }
345
- return out;
346
- }
347
- function vecSub(out, a, b) {
348
- for (var i = 0, len = a.length; i < len; i++) {
349
- out[i] = a[i] - b[i];
350
- }
351
- return out;
352
- }
353
- function vecSquareDistance(v0, v1) {
354
- var sum = 0;
355
- for (var i = 0, len = v0.length; i < len; i++) {
356
- var d = v0[i] - v1[i];
357
- sum += d * d;
358
- }
359
- return sum;
360
- }
361
- function vecNormalize(a) {
362
- var sum = 0;
363
- for (var i = 0, len = a.length; i < len; i++) {
364
- sum += a[i] * a[i];
365
- }
366
- sum = Math.sqrt(sum);
367
- return sum === 0 ? a.slice() : a.map(function (b) { return b / sum; });
368
- }
369
- function vecMulScalar(out, vec, a) {
370
- for (var i = 0, len = vec.length; i < len; i++) {
371
- out[i] = vec[i] * a;
372
- }
373
- return out;
374
- }
375
- function vec3MulMat4(out, vec3, mat4) {
376
- var x = vec3[0], y = vec3[1], z = vec3[2];
377
- var w = mat4[3] * x + mat4[7] * y + mat4[11] * z + mat4[15];
378
- w = w || 1.0;
379
- out[0] = (mat4[0] * x + mat4[4] * y + mat4[8] * z + mat4[12]) / w;
380
- out[1] = (mat4[1] * x + mat4[5] * y + mat4[9] * z + mat4[13]) / w;
381
- out[2] = (mat4[2] * x + mat4[6] * y + mat4[10] * z + mat4[14]) / w;
382
- return out;
383
- }
384
- function vec4MulMat4(out, cartesian, mat4) {
385
- var vX = cartesian[0];
386
- var vY = cartesian[1];
387
- var vZ = cartesian[2];
388
- var vW = cartesian[3];
389
- var x = mat4[0] * vX + mat4[4] * vY + mat4[8] * vZ + mat4[12] * vW;
390
- var y = mat4[1] * vX + mat4[5] * vY + mat4[9] * vZ + mat4[13] * vW;
391
- var z = mat4[2] * vX + mat4[6] * vY + mat4[10] * vZ + mat4[14] * vW;
392
- var w = mat4[3] * vX + mat4[7] * vY + mat4[11] * vZ + mat4[15] * vW;
393
- out[0] = x;
394
- out[1] = y;
395
- out[2] = z;
396
- out[3] = w;
397
- return out;
398
- }
399
- function vec3MulMat3(out, a, m) {
400
- var x = a[0], y = a[1], z = a[2];
401
- out[0] = x * m[0] + y * m[3] + z * m[6];
402
- out[1] = x * m[1] + y * m[4] + z * m[7];
403
- out[2] = x * m[2] + y * m[5] + z * m[8];
404
- return out;
405
- }
406
- function vec3MulMat3ByPoint(out, a, m, c) {
407
- a[0]; a[1]; a[2];
408
- var deltaX = a[0] - c[0], deltaY = a[1] - c[1], deltaZ = a[2] - c[2];
409
- var deltaOut = vec3MulMat3([], [deltaX, deltaY, deltaZ], m);
410
- out[0] = deltaOut[0] + c[0];
411
- out[1] = deltaOut[1] + c[1];
412
- out[2] = deltaOut[2] + c[2];
413
- return out;
414
- }
415
- function mat3FromRotationZYX(ret, x, y, z) {
416
- var cosX = cos(x * d2r);
417
- var cosY = cos(y * d2r);
418
- var cosZ = cos(z * d2r);
419
- var sinX = sin(x * d2r);
420
- var sinY = sin(y * d2r);
421
- var sinZ = sin(z * d2r);
422
- ret[0] = cosY * cosZ;
423
- ret[1] = cosY * sinZ;
424
- ret[2] = -sinY;
425
- ret[3] = -cosX * sinZ + sinX * sinY * cosZ;
426
- ret[4] = cosX * cosZ + sinX * sinY * sinZ;
427
- ret[5] = sinX * cosY;
428
- ret[6] = sinZ * sinX + cosX * sinY * cosZ;
429
- ret[7] = -sinX * cosZ + cosX * sinY * sinZ;
430
- ret[8] = cosX * cosY;
431
- return ret;
432
- }
433
- function mat3FromRotation(ret, rotation) {
434
- return mat3FromRotationZYX(ret, -rotation[0], -rotation[1], -rotation[2]);
435
- }
436
- function mat4MulMat4(a, b) {
437
- var out = [];
438
- var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];
439
- var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];
440
- var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];
441
- var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];
442
- var b00 = b[0], b01 = b[1], b02 = b[2], b03 = b[3];
443
- var b10 = b[4], b11 = b[5], b12 = b[6], b13 = b[7];
444
- var b20 = b[8], b21 = b[9], b22 = b[10], b23 = b[11];
445
- var b30 = b[12], b31 = b[13], b32 = b[14], b33 = b[15];
446
- out[0] = b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30;
447
- out[1] = b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31;
448
- out[2] = b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32;
449
- out[3] = b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33;
450
- out[4] = b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30;
451
- out[5] = b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31;
452
- out[6] = b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32;
453
- out[7] = b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33;
454
- out[8] = b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30;
455
- out[9] = b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31;
456
- out[10] = b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32;
457
- out[11] = b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33;
458
- out[12] = b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30;
459
- out[13] = b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31;
460
- out[14] = b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32;
461
- out[15] = b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33;
462
- return out;
463
- }
464
- function vec3ToVec2(a) {
465
- return [a[0], a[1]];
466
- }
467
- function distanceOfPointAndLine(point, line) {
468
- //三角形三个边长
469
- var AC = [0, 0];
470
- var BC = [0, 0];
471
- var AB = [0, 0];
472
- vecSub(AC, point, line[0]);
473
- vecSub(BC, point, line[1]);
474
- vecSub(AB, line[1], line[0]);
475
- var lengthAC = Math.hypot.apply(Math, __spreadArray([], __read(AC), false));
476
- var lengthBC = Math.hypot.apply(Math, __spreadArray([], __read(BC), false));
477
- var lengthAB = Math.hypot.apply(Math, __spreadArray([], __read(AB), false));
478
- //利用海伦公式计算三角形面积
479
- //周长的一半
480
- var P = (lengthAC + lengthBC + lengthAB) / 2;
481
- var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
482
- //普通公式计算三角形面积反推点到线的垂直距离
483
- var distance = (2 * allArea) / lengthAB;
484
- var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
485
- var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
486
- var isInLine = false;
487
- if (l1 <= lengthAB && l2 <= lengthAB) {
488
- isInLine = true;
489
- }
490
- return {
491
- distance: distance,
492
- isInLine: isInLine,
493
- };
494
- }
495
- function projectionOfPointAndLine(point, line) {
496
- var AC = [0, 0];
497
- var BC = [0, 0];
498
- var AB = [0, 0];
499
- vecSub(AC, point, vec3ToVec2(line[0]));
500
- vecSub(BC, point, vec3ToVec2(line[1]));
501
- vecSub(AB, vec3ToVec2(line[1]), vec3ToVec2(line[0]));
502
- var lengthAC = Math.hypot.apply(Math, __spreadArray([], __read(AC), false));
503
- var lengthBC = Math.hypot.apply(Math, __spreadArray([], __read(BC), false));
504
- var lengthAB = Math.hypot.apply(Math, __spreadArray([], __read(AB), false));
505
- //利用海伦公式计算三角形面积
506
- //周长的一半
507
- var P = (lengthAC + lengthBC + lengthAB) / 2;
508
- var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
509
- //普通公式计算三角形面积反推点到线的垂直距离
510
- var distance = (2 * allArea) / lengthAB;
511
- var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
512
- var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
513
- var worldAB = [0, 0, 0];
514
- vecSub(worldAB, line[1], line[0]);
515
- var worldAP = [0, 0, 0];
516
- vecMulScalar(worldAP, worldAB, l1 / (l1 + l2));
517
- var worldP = [0, 0, 0];
518
- vecAdd(worldP, line[0], worldAP);
519
- return worldP;
520
- }
521
- function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
522
- var a = 1.0 / (right - left);
523
- var b = 1.0 / (top - bottom);
524
- var c = 1.0 / (far - near);
525
- var tx = -(right + left) * a;
526
- var ty = -(top + bottom) * b;
527
- var tz = -(far + near) * c;
528
- a *= 2.0;
529
- b *= 2.0;
530
- c *= -2.0;
531
- var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
532
- result[0] = a;
533
- result[1] = 0.0;
534
- result[2] = 0.0;
535
- result[3] = 0.0;
536
- result[4] = 0.0;
537
- result[5] = b;
538
- result[6] = 0.0;
539
- result[7] = 0.0;
540
- result[8] = 0.0;
541
- result[9] = 0.0;
542
- result[10] = c;
543
- result[11] = 0.0;
544
- result[12] = tx;
545
- result[13] = ty;
546
- result[14] = tz;
547
- result[15] = 1.0;
548
- return result;
549
- }
550
-
339
+ var Euler$1 = effects.math.Euler, Vector3$7 = effects.math.Vector3, Matrix4$5 = effects.math.Matrix4;
551
340
  var rectSize = 0.04;
552
341
  var DEG2RAD = Math.PI / 180;
553
342
  function arcPath(radius, arc, options) {
554
343
  if (options === void 0) { options = {}; }
555
344
  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;
556
- var rotation = mat3FromRotation([], rotate);
345
+ var rotMat4 = Euler$1.fromArray(rotate).negate().toMatrix4(new Matrix4$5());
557
346
  var points = [];
558
347
  var indices = [];
559
348
  addPoint(radius, 0);
@@ -568,23 +357,26 @@ function arcPath(radius, arc, options) {
568
357
  indices: indices,
569
358
  };
570
359
  function addPoint(cos, sin) {
571
- var point;
360
+ var point = new Vector3$7();
572
361
  if (plane === 'xz') {
573
- point = [cos, 0, sin];
362
+ point.set(cos, 0, sin);
574
363
  }
575
364
  else if (plane === 'yz') {
576
- point = [0, cos, sin];
365
+ point.set(0, cos, sin);
577
366
  }
578
367
  else {
579
- point = [cos, sin, 0];
368
+ point.set(cos, sin, 0);
580
369
  }
581
- point = vec3MulMat3(point, point, rotation);
582
- points.push(vecAdd(point, point, translate));
370
+ rotMat4.transformNormal(point);
371
+ points.push(point.add(translate));
583
372
  }
584
373
  }
585
374
  function line(p0, p1) {
586
375
  return {
587
- points: [p0, p1],
376
+ points: [
377
+ Vector3$7.fromArray(p0),
378
+ Vector3$7.fromArray(p1),
379
+ ],
588
380
  indices: [0, 1],
589
381
  };
590
382
  }
@@ -597,7 +389,7 @@ function box(width, height, depth, center) {
597
389
  [-w, h, -d], [-w, -h, -d], [-w, h, d], [-w, -h, d],
598
390
  [w, h, -d], [w, -h, -d], [w, h, d], [w, -h, d],
599
391
  ].map(function (item) {
600
- return [item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]];
392
+ return new Vector3$7(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);
601
393
  });
602
394
  return {
603
395
  points: points,
@@ -611,12 +403,15 @@ function box(width, height, depth, center) {
611
403
  function rect(width, height, pos) {
612
404
  var w = width / 2;
613
405
  var h = height / 2;
614
- var points = [[-w, h, 0], [w, h, 0], [w, -h, 0], [-w, -h, 0]];
406
+ var points = [
407
+ new Vector3$7(-w, h, 0),
408
+ new Vector3$7(w, h, 0),
409
+ new Vector3$7(w, -h, 0),
410
+ new Vector3$7(-w, -h, 0),
411
+ ];
615
412
  if (pos) {
616
413
  points.forEach(function (vec) {
617
- vec[0] += pos[0];
618
- vec[1] += pos[1];
619
- vec[2] += pos[2];
414
+ vec.add(pos);
620
415
  });
621
416
  }
622
417
  return {
@@ -633,7 +428,7 @@ function combineGeometries(geometries) {
633
428
  var geometry = geometries[i];
634
429
  if (geometry) {
635
430
  geometry.points.forEach(function (point) {
636
- points.push(point[0], point[1], point[2]);
431
+ points.push(point.x, point.y, point.z);
637
432
  });
638
433
  geometry.indices.forEach(function (index) { return indices.push(index + indicesBase); });
639
434
  indicesBase += geometry.points.length;
@@ -801,8 +596,8 @@ function createMesh(engine, points, indices, color, depthTest, name) {
801
596
  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 }",
802
597
  },
803
598
  });
804
- material.setVector3('u_color', color);
805
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
599
+ material.setVector3('u_color', Vector3$7.fromArray(color));
600
+ material.setMatrix('u_model', Matrix4$5.IDENTITY);
806
601
  material.depthTest = depthTest;
807
602
  material.stencilTest = false;
808
603
  material.blending = false;
@@ -901,6 +696,7 @@ var GeometryData = /** @class */ (function () {
901
696
  return GeometryData;
902
697
  }());
903
698
 
699
+ var Vector3$6 = effects.math.Vector3;
904
700
  /**
905
701
  *
906
702
  */
@@ -950,8 +746,8 @@ var SphereGeometryData = /** @class */ (function (_super) {
950
746
  var z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);
951
747
  _this.points.push(x, y, z);
952
748
  // normal
953
- var normal = vecNormalize([x, y, z]);
954
- (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal), false));
749
+ var normal = new Vector3$6(x, y, z).normalize();
750
+ (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal.toArray()), false));
955
751
  // uv
956
752
  _this.uvs.push(u + uOffset, 1 - v);
957
753
  verticesRow.push(index++);
@@ -1039,6 +835,7 @@ var BoxGeometryData = /** @class */ (function (_super) {
1039
835
  return BoxGeometryData;
1040
836
  }(GeometryData));
1041
837
 
838
+ var Vector3$5 = effects.math.Vector3;
1042
839
  /**
1043
840
  *
1044
841
  */
@@ -1095,8 +892,8 @@ var CylinderGeometryData = /** @class */ (function (_super) {
1095
892
  var py = -v * height + halfHeight;
1096
893
  var pz = radius * cosTheta;
1097
894
  points.push(px, py, pz);
1098
- var normal = vecNormalize([sinTheta, slope, cosTheta]);
1099
- normals.push.apply(normals, __spreadArray([], __read(normal), false));
895
+ var normal = new Vector3$5(sinTheta, slope, cosTheta).normalize();
896
+ normals.push.apply(normals, __spreadArray([], __read(normal.toArray()), false));
1100
897
  uvs.push(u, 1 - v);
1101
898
  indexRow.push(index++);
1102
899
  }
@@ -1183,6 +980,7 @@ var ConeGeometryData = /** @class */ (function (_super) {
1183
980
  return ConeGeometryData;
1184
981
  }(CylinderGeometryData));
1185
982
 
983
+ var Vector3$4 = effects.math.Vector3;
1186
984
  /**
1187
985
  *
1188
986
  */
@@ -1216,8 +1014,10 @@ var TorusGeometryData = /** @class */ (function (_super) {
1216
1014
  _this.points.push(px, py, pz);
1217
1015
  var cx = radius * Math.cos(u);
1218
1016
  var cy = radius * Math.sin(u);
1219
- var normal = vecNormalize(vecSub([], [px, py, pz], [cx, cy, 0]));
1220
- (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal), false));
1017
+ var p = new Vector3$4(px, py, pz);
1018
+ var c = new Vector3$4(cx, cy, 0);
1019
+ var normal = p.subtract(c).normalize();
1020
+ (_a = _this.normals).push.apply(_a, __spreadArray([], __read(normal.toArray()), false));
1221
1021
  _this.uvs.push(i / tubularSegments);
1222
1022
  _this.uvs.push(j / radialSegments);
1223
1023
  }
@@ -1288,6 +1088,7 @@ var PlaneGeometryData = /** @class */ (function (_super) {
1288
1088
  return PlaneGeometryData;
1289
1089
  }(GeometryData));
1290
1090
 
1091
+ var Euler = effects.math.Euler, Vector3$3 = effects.math.Vector3, Matrix4$4 = effects.math.Matrix4;
1291
1092
  /**
1292
1093
  *
1293
1094
  */
@@ -1309,16 +1110,16 @@ var FrustumGeometryData = /** @class */ (function (_super) {
1309
1110
  var ratio = aspect;
1310
1111
  var halfY = far * Math.tan(fovY / 2);
1311
1112
  var halfX = halfY * ratio;
1312
- var point1 = vecAdd([], position, [halfX, halfY, far]);
1313
- var point2 = vecAdd([], position, [-halfX, halfY, far]);
1314
- var point3 = vecAdd([], position, [-halfX, -halfY, far]);
1315
- var point4 = vecAdd([], position, [halfX, -halfY, far]);
1316
- var matrix = mat3FromRotationZYX([], rotation[0], rotation[1], rotation[2]);
1317
- var result1 = vec3MulMat3ByPoint([], point1, matrix, position);
1318
- var result2 = vec3MulMat3ByPoint([], point2, matrix, position);
1319
- var result3 = vec3MulMat3ByPoint([], point3, matrix, position);
1320
- var result4 = vec3MulMat3ByPoint([], point4, matrix, position);
1321
- (_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));
1113
+ var point1 = new Vector3$3(halfX, halfY, far);
1114
+ var point2 = new Vector3$3(-halfX, halfY, far);
1115
+ var point3 = new Vector3$3(-halfX, -halfY, far);
1116
+ var point4 = new Vector3$3(halfX, -halfY, far);
1117
+ var matrix = Euler.fromArray(rotation).toMatrix4(new Matrix4$4());
1118
+ var result1 = matrix.transformPoint(point1).add(position);
1119
+ var result2 = matrix.transformPoint(point2).add(position);
1120
+ var result3 = matrix.transformPoint(point3).add(position);
1121
+ var result4 = matrix.transformPoint(point4).add(position);
1122
+ (_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));
1322
1123
  _this.indices.push(0, 1, 0, 2, 0, 3, 0, 4, 1, 2, 2, 3, 3, 4, 4, 1);
1323
1124
  return _this;
1324
1125
  }
@@ -1588,6 +1389,7 @@ axisIconMap.set('negX', "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABmC
1588
1389
  axisIconMap.set('negY', "data:image/png;base64,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\n 5ErkJggg==");
1589
1390
  axisIconMap.set('negZ', "data:image/png;base64,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");
1590
1391
 
1392
+ var Vector2$2 = effects.math.Vector2, Vector3$2 = effects.math.Vector3, Matrix4$3 = effects.math.Matrix4;
1591
1393
  /**
1592
1394
  * 根据 gizmoSubType 类型创建几何体 Mesh
1593
1395
  * @param subType - gizmoSubType 类型
@@ -1736,15 +1538,19 @@ function getTriangle(geometry, transform) {
1736
1538
  var points = geometry.getAttributeData('a_Position');
1737
1539
  var mat4 = transform.getWorldMatrix();
1738
1540
  if (points && indices && indices.length > 0) {
1739
- indices === null || indices === void 0 ? void 0 : indices.forEach(function (index, i) {
1740
- var position = [points[index * 3], points[index * 3 + 1], points[index * 3 + 2]];
1741
- var localPosition = [0, 0, 0];
1742
- vec3MulMat4(localPosition, position, mat4);
1743
- if (result[Math.floor(i / 3)] === undefined) {
1744
- result[Math.floor(i / 3)] = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
1745
- }
1746
- result[Math.floor(i / 3)][i % 3] = localPosition;
1747
- });
1541
+ for (var i = 0; i < indices.length; i += 3) {
1542
+ var i0 = indices[i] * 3;
1543
+ var i1 = indices[i + 1] * 3;
1544
+ var i2 = indices[i + 2] * 3;
1545
+ var p0 = new Vector3$2(points[i0], points[i0 + 1], points[i0 + 2]);
1546
+ var p1 = new Vector3$2(points[i1], points[i1 + 1], points[i1 + 2]);
1547
+ var p2 = new Vector3$2(points[i2], points[i2 + 1], points[i2 + 2]);
1548
+ result.push({
1549
+ p0: mat4.projectPoint(p0),
1550
+ p1: mat4.projectPoint(p1),
1551
+ p2: mat4.projectPoint(p2),
1552
+ });
1553
+ }
1748
1554
  }
1749
1555
  return result;
1750
1556
  }
@@ -1969,7 +1775,7 @@ function createScaleMesh(engine, options, boundingMap) {
1969
1775
  createAxisBounding({ width: boxSize.width * 1.2, length: axisSize.width + boxSize.width / 2 }, boundingMap);
1970
1776
  boundingMap.set('center', {
1971
1777
  type: BoundingType.sphere,
1972
- center: [0, 0, 0],
1778
+ center: new Vector3$2(),
1973
1779
  radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2,
1974
1780
  });
1975
1781
  return result;
@@ -2235,11 +2041,11 @@ function createSpriteMesh(engine, options, texture, boundingMap) {
2235
2041
  * @returns 纯色材质,无光照,无透明
2236
2042
  */
2237
2043
  function createMaterial(engine, color, depthTest) {
2238
- var myColor = color ? color : [255, 255, 255];
2044
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2239
2045
  var myDepthTest = depthTest ? depthTest : false;
2240
2046
  var material = effects.Material.create(engine, {
2241
2047
  uniformValues: {
2242
- u_color: new Float32Array(myColor),
2048
+ u_color: new Float32Array(myColor.toArray()),
2243
2049
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2244
2050
  },
2245
2051
  uniformSemantics: {
@@ -2255,7 +2061,7 @@ function createMaterial(engine, color, depthTest) {
2255
2061
  },
2256
2062
  });
2257
2063
  material.setVector3('u_color', myColor);
2258
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2064
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2259
2065
  material.depthTest = myDepthTest;
2260
2066
  material.stencilTest = false;
2261
2067
  material.blending = false;
@@ -2270,11 +2076,11 @@ function createMaterial(engine, color, depthTest) {
2270
2076
  * @returns
2271
2077
  */
2272
2078
  function createHideBackMaterial(engine, color, depthTest) {
2273
- var myColor = color ? color : [255, 255, 255];
2079
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2274
2080
  var myDepthTest = depthTest ? depthTest : false;
2275
2081
  var material = effects.Material.create(engine, {
2276
2082
  uniformValues: {
2277
- u_color: new Float32Array(myColor),
2083
+ u_color: new Float32Array(myColor.toArray()),
2278
2084
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2279
2085
  u_cameraPos: new Float32Array([0, 0, 0]),
2280
2086
  u_center: new Float32Array([0, 0, 0]),
@@ -2292,9 +2098,9 @@ function createHideBackMaterial(engine, color, depthTest) {
2292
2098
  },
2293
2099
  });
2294
2100
  material.setVector3('u_color', myColor);
2295
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2296
- material.setVector3('u_cameraPos', [0, 0, 0]);
2297
- material.setVector3('u_center', [0, 0, 0]);
2101
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2102
+ material.setVector3('u_cameraPos', Vector3$2.ZERO);
2103
+ material.setVector3('u_center', Vector3$2.ZERO);
2298
2104
  material.depthTest = myDepthTest;
2299
2105
  material.stencilTest = false;
2300
2106
  material.blending = false;
@@ -2310,12 +2116,12 @@ function createHideBackMaterial(engine, color, depthTest) {
2310
2116
  * @returns
2311
2117
  */
2312
2118
  function createBlendMaterial(engine, color, depthTest, alpha) {
2313
- var myColor = color ? color : [255, 255, 255];
2119
+ var myColor = color ? Vector3$2.fromArray(color) : new Vector3$2(255, 255, 255);
2314
2120
  var myDepthTest = depthTest ? depthTest : false;
2315
2121
  var myAlpha = alpha ? alpha : 1;
2316
2122
  var material = effects.Material.create(engine, {
2317
2123
  uniformValues: {
2318
- u_color: new Float32Array(myColor),
2124
+ u_color: new Float32Array(myColor.toArray()),
2319
2125
  u_alpha: new Float32Array([myAlpha, 0]),
2320
2126
  u_model: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
2321
2127
  },
@@ -2332,8 +2138,8 @@ function createBlendMaterial(engine, color, depthTest, alpha) {
2332
2138
  },
2333
2139
  });
2334
2140
  material.setVector3('u_color', myColor);
2335
- material.setVector2('u_alpha', [myAlpha, 0]);
2336
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2141
+ material.setVector2('u_alpha', new Vector2$2(myAlpha, 0));
2142
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2337
2143
  material.depthTest = myDepthTest;
2338
2144
  material.stencilTest = false;
2339
2145
  material.blending = true;
@@ -2362,8 +2168,8 @@ function createSpriteMaterial(engine, data, depthTest) {
2362
2168
  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 }",
2363
2169
  },
2364
2170
  });
2365
- material.setMatrix('u_model', [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
2366
- material.setVector2('u_alpha', [1, 0]);
2171
+ material.setMatrix('u_model', Matrix4$3.IDENTITY);
2172
+ material.setVector2('u_alpha', new Vector2$2(1, 0));
2367
2173
  if (data instanceof effects.Texture) {
2368
2174
  material.setTexture('u_iconTex', data);
2369
2175
  // uniformValues.u_iconTex = data;
@@ -2371,10 +2177,10 @@ function createSpriteMaterial(engine, data, depthTest) {
2371
2177
  else {
2372
2178
  var color_1;
2373
2179
  if (data === undefined) {
2374
- color_1 = [255, 255, 255];
2180
+ color_1 = new Vector3$2(255, 255, 255);
2375
2181
  }
2376
2182
  else {
2377
- color_1 = data;
2183
+ color_1 = Vector3$2.fromArray(data);
2378
2184
  }
2379
2185
  material.setVector3('u_color', color_1);
2380
2186
  // uniformValues.u_color = new Float32Array(color);
@@ -2395,21 +2201,95 @@ function createSpriteMaterial(engine, data, depthTest) {
2395
2201
  function createAxisBounding(size, boundingMap) {
2396
2202
  boundingMap.set('xAxis', {
2397
2203
  type: BoundingType.line,
2398
- points: [[0, 0, 0], [size.length, 0, 0]],
2204
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(size.length, 0, 0)],
2399
2205
  width: size.width,
2400
2206
  });
2401
2207
  boundingMap.set('yAxis', {
2402
2208
  type: BoundingType.line,
2403
- points: [[0, 0, 0], [0, size.length, 0]],
2209
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(0, size.length, 0)],
2404
2210
  width: size.width,
2405
2211
  });
2406
2212
  boundingMap.set('zAxis', {
2407
2213
  type: BoundingType.line,
2408
- points: [[0, 0, 0], [0, 0, size.length]],
2214
+ points: [new Vector3$2(0, 0, 0), new Vector3$2(0, 0, size.length)],
2409
2215
  width: size.width,
2410
2216
  });
2411
2217
  }
2412
2218
 
2219
+ var Matrix4$2 = effects.math.Matrix4, Vector2$1 = effects.math.Vector2;
2220
+ function distanceOfPointAndLine(point, line) {
2221
+ //三角形三个边长
2222
+ var AC = new Vector2$1();
2223
+ var BC = new Vector2$1();
2224
+ var AB = new Vector2$1();
2225
+ AC.subtractVectors(point, line[0]);
2226
+ BC.subtractVectors(point, line[1]);
2227
+ AB.subtractVectors(line[1], line[0]);
2228
+ var lengthAC = AC.length();
2229
+ var lengthBC = BC.length();
2230
+ var lengthAB = AB.length();
2231
+ //利用海伦公式计算三角形面积
2232
+ //周长的一半
2233
+ var P = (lengthAC + lengthBC + lengthAB) / 2;
2234
+ var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
2235
+ //普通公式计算三角形面积反推点到线的垂直距离
2236
+ var distance = (2 * allArea) / lengthAB;
2237
+ var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
2238
+ var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
2239
+ var isInLine = false;
2240
+ if (l1 <= lengthAB && l2 <= lengthAB) {
2241
+ isInLine = true;
2242
+ }
2243
+ return {
2244
+ distance: distance,
2245
+ isInLine: isInLine,
2246
+ };
2247
+ }
2248
+ function projectionOfPointAndLine(point, line) {
2249
+ var AC = new Vector2$1();
2250
+ var BC = new Vector2$1();
2251
+ var AB = new Vector2$1();
2252
+ var line0 = line[0].toVector2();
2253
+ var line1 = line[1].toVector2();
2254
+ AC.subtractVectors(point, line0);
2255
+ BC.subtractVectors(point, line1);
2256
+ AB.subtractVectors(line1, line0);
2257
+ var lengthAC = AC.length();
2258
+ var lengthBC = BC.length();
2259
+ var lengthAB = AB.length();
2260
+ //利用海伦公式计算三角形面积
2261
+ //周长的一半
2262
+ var P = (lengthAC + lengthBC + lengthAB) / 2;
2263
+ var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
2264
+ //普通公式计算三角形面积反推点到线的垂直距离
2265
+ var distance = (2 * allArea) / lengthAB;
2266
+ var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
2267
+ var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
2268
+ var worldAB = line[1].clone().subtract(line[0]);
2269
+ var worldAP = worldAB.clone().multiply(l1 / (l1 + l2));
2270
+ var worldP = line[0].clone().add(worldAP);
2271
+ return worldP;
2272
+ }
2273
+ function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
2274
+ var a = 1.0 / (right - left);
2275
+ var b = 1.0 / (top - bottom);
2276
+ var c = 1.0 / (far - near);
2277
+ var tx = -(right + left) * a;
2278
+ var ty = -(top + bottom) * b;
2279
+ var tz = -(far + near) * c;
2280
+ a *= 2.0;
2281
+ b *= 2.0;
2282
+ c *= -2.0;
2283
+ return new Matrix4$2(a, 0.0, 0.0, 0.0,
2284
+ //
2285
+ 0.0, b, 0.0, 0.0,
2286
+ //
2287
+ 0.0, 0.0, c, 0.0,
2288
+ //
2289
+ tx, ty, tz, 1.0);
2290
+ }
2291
+
2292
+ var Matrix4$1 = effects.math.Matrix4; effects.math.Vector2; var Vector3$1 = effects.math.Vector3;
2413
2293
  /**
2414
2294
  * 线条包围盒射线检测算法
2415
2295
  * @param out - 射线与包围盒交点位置
@@ -2417,40 +2297,29 @@ function createAxisBounding(size, boundingMap) {
2417
2297
  * @param points - 线条包围盒两端点位置
2418
2298
  * @param radius - 线条包围盒辐射半径
2419
2299
  * @param camera - 相机对象
2420
- * @returns 射线与包围盒交点位置 | null
2300
+ * @returns 射线与包围盒交点位置 | undefined
2421
2301
  */
2422
2302
  function intersectRayLine(out, pointInCanvas, points, radius, worldMat4, camera) {
2423
2303
  // 构造一个辐射半径边缘的点 radiusPoint
2424
- var radiusPoint = [0, 0, 0];
2425
- var up = [
2426
- worldMat4[1],
2427
- worldMat4[5],
2428
- worldMat4[9],
2429
- ];
2430
- vecMulScalar(radiusPoint, vecNormalize(up), radius);
2431
- vecAdd(radiusPoint, points[0], radiusPoint);
2304
+ var up = new Vector3$1(worldMat4.elements[1], worldMat4.elements[5], worldMat4.elements[9]).normalize();
2305
+ var radiusPoint = up.clone().multiply(radius);
2306
+ radiusPoint.add(points[0]);
2432
2307
  // 计算 start、end、radius 在屏幕空间上的投影
2433
- var mvpMat4 = camera.getModelViewProjection([], worldMat4);
2434
- var screenStart = [0, 0, 0];
2435
- var screenEnd = [0, 0, 0];
2436
- var screenRadiusPoint = [0, 0, 0];
2437
- vec3MulMat4(screenStart, points[0], mvpMat4);
2438
- vec3MulMat4(screenEnd, points[1], mvpMat4);
2439
- vec3MulMat4(screenRadiusPoint, radiusPoint, mvpMat4);
2440
- var screenRadiusVector = [0, 0, 0];
2441
- vecSub(screenRadiusVector, screenRadiusPoint, screenStart);
2442
- var screenRadius = Math.hypot.apply(Math, __spreadArray([], __read(screenRadiusVector), false));
2308
+ var mvpMat4 = camera.getModelViewProjection(new Matrix4$1(), worldMat4);
2309
+ var screenStart = mvpMat4.projectPoint(points[0], new Vector3$1());
2310
+ var screenEnd = mvpMat4.projectPoint(points[1], new Vector3$1());
2311
+ var screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3$1());
2312
+ var screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);
2313
+ var screenRadius = screenRadiusVector.length();
2443
2314
  // 计算屏幕交互点与线条的距离
2444
- var _a = distanceOfPointAndLine(pointInCanvas, [vec3ToVec2(screenStart), vec3ToVec2(screenEnd)]), distance = _a.distance, isInLine = _a.isInLine;
2315
+ var _a = distanceOfPointAndLine(pointInCanvas, [screenStart.toVector2(), screenEnd.toVector2()]), distance = _a.distance, isInLine = _a.isInLine;
2445
2316
  if (distance <= screenRadius && isInLine) { // 距离小于阈值且交互点在线条上的投影位于线段内
2446
2317
  // 计算交互点在线条上的投影并转换为世界坐标
2447
2318
  var screenPosition = projectionOfPointAndLine(pointInCanvas, [screenStart, screenEnd]);
2448
2319
  var inverseViewProjection = camera.getInverseViewProjectionMatrix();
2449
- var worldPosition = [0, 0, 0];
2450
- vec3MulMat4(worldPosition, screenPosition, inverseViewProjection);
2451
- return worldPosition;
2320
+ inverseViewProjection.projectPoint(screenPosition, out);
2321
+ return out;
2452
2322
  }
2453
- return null;
2454
2323
  }
2455
2324
 
2456
2325
  /**
@@ -2493,21 +2362,16 @@ function createTexture(engine, image, hookDestroy) {
2493
2362
  * @returns 指定点
2494
2363
  */
2495
2364
  function moveToPointWidthFixDistance(targetPos, currentPos) {
2496
- var vecCameraItem = [0, 0, 0];
2497
- vecSub(vecCameraItem, currentPos, targetPos);
2498
- var normalVecCameraItem = vecNormalize(vecCameraItem);
2499
- var newPos = [0, 0, 0];
2500
- var scalerVecCameraItem = [0, 0, 0];
2501
- vecMulScalar(scalerVecCameraItem, normalVecCameraItem, 20);
2502
- var vecScalerItem = [0, 0, 0];
2503
- var vecItemScaler = [0, 0, 0];
2504
- vecSub(vecScalerItem, vecCameraItem, scalerVecCameraItem);
2505
- vecMulScalar(vecItemScaler, vecScalerItem, -1);
2506
- vecAdd(newPos, currentPos, vecItemScaler);
2507
- return newPos;
2365
+ var vecCameraItem = currentPos.clone().subtract(targetPos);
2366
+ var normalVecCameraItem = vecCameraItem.clone().normalize();
2367
+ var scalerVecCameraItem = normalVecCameraItem.clone().multiply(20);
2368
+ var vecScalerItem = vecCameraItem.clone().subtract(scalerVecCameraItem);
2369
+ var vecItemScaler = vecScalerItem.clone().multiply(-1);
2370
+ return currentPos.clone().add(vecItemScaler);
2508
2371
  }
2509
2372
 
2510
2373
  var constants = effects.glContext;
2374
+ var Vector2 = effects.math.Vector2, Vector3 = effects.math.Vector3, Matrix4 = effects.math.Matrix4; effects.math.Ray; var Quaternion = effects.math.Quaternion;
2511
2375
  /**
2512
2376
  * 包围盒类型
2513
2377
  */
@@ -2526,7 +2390,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2526
2390
  function GizmoVFXItem() {
2527
2391
  var _this = _super !== null && _super.apply(this, arguments) || this;
2528
2392
  _this.boundingMap = new Map();
2529
- _this.mat = [];
2393
+ _this.mat = Matrix4.fromIdentity();
2530
2394
  return _this;
2531
2395
  }
2532
2396
  Object.defineProperty(GizmoVFXItem.prototype, "type", {
@@ -2636,7 +2500,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2636
2500
  // const mesh = this.wireframeMesh = createParticleWireframe(engine, item.content.particleMesh.mesh, this.color);
2637
2501
  // meshesToAdd.push(mesh);
2638
2502
  // }
2639
- if (item.type === effects.spec.ItemType.sprite || item.type === effects.spec.ItemType.filter) {
2503
+ if (effects.VFXItem.isSprite(item) || effects.VFXItem.isFilterSprite(item)) {
2640
2504
  var color = this.color.slice();
2641
2505
  var mesh = this.spriteMesh = item.createWireframeMesh(item.content, color);
2642
2506
  this.wireframeMesh = mesh.mesh;
@@ -2750,32 +2614,32 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2750
2614
  if (this.targetItem) {
2751
2615
  if (this.contents) { // 组合几何体
2752
2616
  // const targetTransform = this.targetItem.transform.clone();
2753
- var worldPos = [0, 0, 0];
2754
- var worldQuat = [0, 0, 0, 0];
2755
- var worldSca = [1, 1, 1];
2617
+ var worldPos = new Vector3();
2618
+ var worldQuat = new Quaternion();
2619
+ var worldScale = new Vector3(1, 1, 1);
2756
2620
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2757
2621
  var targetTransform = new effects.Transform({
2758
2622
  position: worldPos,
2759
2623
  quat: worldQuat,
2760
- scale: worldSca,
2624
+ scale: worldScale,
2761
2625
  valid: true,
2762
2626
  });
2763
2627
  // 移动\旋转\缩放gizmo去除近大远小
2764
2628
  if (this.subType === exports.GizmoSubType.rotation || this.subType === exports.GizmoSubType.scale || this.subType === exports.GizmoSubType.translation) {
2765
2629
  var camera = this.composition.camera;
2766
- var cameraPos = camera.position || [0, 0, 0];
2630
+ var cameraPos = camera.position || new Vector3();
2767
2631
  var itemPos = targetTransform.position;
2768
2632
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2769
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2633
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2770
2634
  }
2771
2635
  this.mat = targetTransform.getWorldMatrix();
2772
2636
  var center = targetTransform.position;
2773
2637
  try {
2774
2638
  for (var _b = __values(this.contents), _c = _b.next(); !_c.done; _c = _b.next()) {
2775
2639
  var _d = __read(_c.value, 2), mesh = _d[0], transform = _d[1];
2776
- var worldMat4 = [];
2640
+ var worldMat4 = void 0;
2777
2641
  transform.parentTransform = targetTransform;
2778
- var position = [0, 0, 0];
2642
+ var position = new Vector3();
2779
2643
  transform.assignWorldTRS(position);
2780
2644
  // 物体和中心点在屏幕空间上投影的距离
2781
2645
  var distanceToCneter = 100;
@@ -2783,7 +2647,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2783
2647
  if (this.subType === exports.GizmoSubType.viewHelper) {
2784
2648
  // 正交投影只需要计算物体在XY平面上的投影与中心点的距离
2785
2649
  if (mesh.name === 'sprite') {
2786
- distanceToCneter = Math.pow(vecSquareDistance(vec3ToVec2(position), vec3ToVec2(center)), 0.5);
2650
+ distanceToCneter = position.toVector2().distance(center.toVector2());
2787
2651
  theta = this.boundingMap.get('posX').radius;
2788
2652
  }
2789
2653
  // 将物体挂到相机的transform上
@@ -2796,15 +2660,15 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2796
2660
  var height = width / aspect;
2797
2661
  var cameraModelMat4 = this.composition.camera.getInverseViewMatrix();
2798
2662
  var padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
2799
- var localMat = [];
2663
+ var localMat = void 0;
2800
2664
  localMat = transform.getWorldMatrix();
2801
2665
  var worldTransform = new effects.Transform({
2802
2666
  valid: true,
2803
2667
  });
2804
2668
  worldTransform.cloneFromMatrix(localMat);
2805
- worldTransform.setPosition((position[0] + width / 2) - padding, (position[1] + height / 2) - padding, position[2]);
2669
+ worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);
2806
2670
  localMat = worldTransform.getWorldMatrix();
2807
- worldMat4 = mat4MulMat4(cameraModelMat4, localMat);
2671
+ worldMat4 = cameraModelMat4.clone().multiply(localMat);
2808
2672
  // 正交投影到屏幕上
2809
2673
  var proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);
2810
2674
  mesh.material.setMatrix('_MatrixP', proMat5);
@@ -2822,10 +2686,10 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2822
2686
  // 使用distanceToCneter处理坐标轴旋转到中心点附近时的遮挡问题
2823
2687
  if (distanceToCneter < theta) {
2824
2688
  if (distanceToCneter < theta * 0.5) {
2825
- mesh.material.setVector2('u_alpha', [0, 0]);
2689
+ mesh.material.setVector2('u_alpha', new Vector2(0, 0));
2826
2690
  }
2827
2691
  else {
2828
- mesh.material.setVector2('u_alpha', [(2 / theta) * distanceToCneter - 1, 0]);
2692
+ mesh.material.setVector2('u_alpha', new Vector2((2 / theta) * distanceToCneter - 1, 0));
2829
2693
  }
2830
2694
  }
2831
2695
  }
@@ -2839,9 +2703,9 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2839
2703
  }
2840
2704
  }
2841
2705
  if (this.content) { // 基础几何体
2842
- var worldPos = [0, 0, 0];
2843
- var worldQuat = [0, 0, 0, 0];
2844
- var worldSca = [1, 1, 1];
2706
+ var worldPos = new Vector3();
2707
+ var worldQuat = new Quaternion();
2708
+ var worldSca = new Vector3(1, 1, 1);
2845
2709
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2846
2710
  var targetTransform = new effects.Transform({
2847
2711
  position: worldPos,
@@ -2851,10 +2715,10 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2851
2715
  });
2852
2716
  if (this.subType === exports.GizmoSubType.light || this.subType === exports.GizmoSubType.camera) {
2853
2717
  var camera = this.composition.camera;
2854
- var cameraPos = camera.position || [0, 0, 0];
2718
+ var cameraPos = camera.position || new Vector3(0, 0, 0);
2855
2719
  var itemPos = targetTransform.position;
2856
2720
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2857
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2721
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2858
2722
  }
2859
2723
  this.mat = targetTransform.getWorldMatrix();
2860
2724
  this.content.material.setMatrix('u_model', targetTransform.getWorldMatrix());
@@ -2870,13 +2734,13 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2870
2734
  var boundingMap = this.boundingMap;
2871
2735
  if (boundingMap.size > 0) {
2872
2736
  var boundingKeys_1 = boundingMap.keys();
2873
- var worldMat4_1 = [];
2737
+ var worldMat4_1;
2874
2738
  worldMat4_1 = this.transform.getWorldMatrix();
2875
2739
  if (this.targetItem) {
2876
2740
  //const targetTransform = this.targetItem.transform.clone();
2877
- var worldPos = [0, 0, 0];
2878
- var worldQuat = [0, 0, 0, 0];
2879
- var worldSca = [1, 1, 1];
2741
+ var worldPos = new Vector3();
2742
+ var worldQuat = new Quaternion();
2743
+ var worldSca = new Vector3(1, 1, 1);
2880
2744
  this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
2881
2745
  var targetTransform = new effects.Transform({
2882
2746
  position: worldPos,
@@ -2894,7 +2758,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2894
2758
  var cameraPos = camera.position || [0, 0, 0];
2895
2759
  var itemPos = targetTransform.position;
2896
2760
  var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
2897
- targetTransform.setPosition.apply(targetTransform, __spreadArray([], __read(newPos), false));
2761
+ targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
2898
2762
  worldMat4_1 = targetTransform.getWorldMatrix();
2899
2763
  }
2900
2764
  else {
@@ -2917,16 +2781,23 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2917
2781
  self_1.hitBounding = undefined;
2918
2782
  var _loop_1 = function (key) {
2919
2783
  var bounding = boundingMap.get(key);
2920
- var center = [0, 0, 0];
2921
- var worldCenter = [0, 0, 0];
2784
+ var center = new Vector3();
2785
+ var worldCenter = new Vector3();
2922
2786
  if ((bounding === null || bounding === void 0 ? void 0 : bounding.type) === BoundingType.box || (bounding === null || bounding === void 0 ? void 0 : bounding.type) === BoundingType.sphere) {
2923
- center = (bounding === null || bounding === void 0 ? void 0 : bounding.center) ? bounding.center.slice() : [0, 0, 0];
2924
- vec3MulMat4(worldCenter, center, worldMat4_1);
2787
+ if (bounding === null || bounding === void 0 ? void 0 : bounding.center) {
2788
+ center.copyFrom(bounding === null || bounding === void 0 ? void 0 : bounding.center);
2789
+ }
2790
+ worldMat4_1.projectPoint(center, worldCenter);
2925
2791
  }
2926
2792
  var position;
2927
2793
  switch (bounding === null || bounding === void 0 ? void 0 : bounding.type) {
2928
2794
  case BoundingType.box: // 立方体包围盒
2929
- position = effects.intersectRayBox([], ray.center, ray.direction, worldCenter, bounding === null || bounding === void 0 ? void 0 : bounding.size);
2795
+ {
2796
+ var boxHalfSize = bounding.size.clone().multiply(0.5);
2797
+ var boxMax = center.clone().add(boxHalfSize);
2798
+ var boxMin = center.clone().subtract(boxHalfSize);
2799
+ position = ray.intersectBox({ min: boxMin, max: boxMax }, new Vector3());
2800
+ }
2930
2801
  break;
2931
2802
  case BoundingType.sphere: // 球体包围盒
2932
2803
  // viewHelper 使用了正交投影,使用屏幕投影点计算
@@ -2946,45 +2817,37 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2946
2817
  var localTransform = new effects.Transform({
2947
2818
  valid: true,
2948
2819
  });
2949
- var localMat4 = [];
2950
2820
  localTransform.cloneFromMatrix(worldMat4_1);
2951
2821
  var pos = localTransform.position;
2952
2822
  var padding = self_1.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
2953
- localTransform.setPosition((pos[0] + width / 2) - padding, (pos[1] + height / 2) - padding, pos[2]);
2954
- localMat4 = localTransform.getWorldMatrix();
2955
- var modelMat4 = mat4MulMat4(cameraModelMat4, localMat4);
2956
- vec3MulMat4(worldCenter, center, modelMat4);
2823
+ localTransform.setPosition((pos.x + width / 2) - padding, (pos.y + height / 2) - padding, pos.z);
2824
+ var localMat4 = localTransform.getWorldMatrix();
2825
+ var modelMat4 = cameraModelMat4.clone().multiply(localMat4);
2826
+ modelMat4.projectPoint(center, worldCenter);
2957
2827
  // 包围球中心点正交投影到屏幕上
2958
- var screenCenter = [0, 0, 0, 0];
2959
- var vpMat4 = mat4MulMat4(proMat4, viewMat4);
2960
- var mvpMat4 = mat4MulMat4(vpMat4, modelMat4);
2961
- vec4MulMat4(screenCenter, __spreadArray(__spreadArray([], __read(center), false), [1.0], false), mvpMat4);
2962
- var screenCenterX = screenCenter[0] / screenCenter[3];
2963
- var screenCenterY = screenCenter[1] / screenCenter[3];
2828
+ var vpMat4 = proMat4.clone().multiply(viewMat4);
2829
+ var mvpMat4 = vpMat4.clone().multiply(modelMat4);
2830
+ var screenCenter = mvpMat4.projectPoint(center, new Vector3());
2831
+ screenCenter.x;
2832
+ screenCenter.y;
2964
2833
  // 包围球上的点正交投影到屏幕上
2965
2834
  var radius = bounding.radius;
2966
- var point = [0, 0, 0];
2967
- var up = [
2968
- localMat4[1],
2969
- localMat4[5],
2970
- localMat4[9],
2971
- ];
2972
- vecMulScalar(point, vecNormalize(up), radius);
2973
- vecAdd(point, center, point);
2974
- var screenPoint = [0, 0, 0, 0];
2975
- vec4MulMat4(screenPoint, __spreadArray(__spreadArray([], __read(point), false), [1.0], false), mvpMat4);
2976
- var screenPointX = screenPoint[0] / screenPoint[3];
2977
- var screenPointY = screenPoint[1] / screenPoint[3];
2835
+ var up = new Vector3(localMat4.elements[1], localMat4.elements[5], localMat4.elements[9]).normalize();
2836
+ var point = up.clone().multiply(radius);
2837
+ point.add(center);
2838
+ var screenPoint = mvpMat4.projectPoint(point, new Vector3());
2839
+ screenPoint.x;
2840
+ screenPoint.y;
2978
2841
  // 计算正交投影到屏幕上的包围球的半径
2979
- var vecRadius = [0, 0];
2980
- vecSub(vecRadius, [screenCenterX, screenCenterY], [screenPointX, screenPointY]);
2981
- var screenRadius = Math.hypot.apply(Math, __spreadArray([], __read(vecRadius), false));
2982
- if (Math.pow(vecSquareDistance(pointInCanvas, [screenCenterX, screenCenterY]), 0.5) < screenRadius * 1.2) {
2842
+ var screenCenter2 = screenCenter.toVector2();
2843
+ var screenPoint2 = screenPoint.toVector2();
2844
+ var screenRadius = screenCenter2.distance(screenPoint2);
2845
+ if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {
2983
2846
  position = worldCenter;
2984
2847
  }
2985
2848
  }
2986
2849
  else {
2987
- position = effects.intersectRaySphere([], ray.center, ray.direction, worldCenter, bounding === null || bounding === void 0 ? void 0 : bounding.radius);
2850
+ position = ray.intersectSphere({ center: worldCenter, radius: bounding.radius }, new Vector3());
2988
2851
  }
2989
2852
  break;
2990
2853
  case BoundingType.triangle: { // 三角数组包围盒
@@ -2993,14 +2856,12 @@ var GizmoVFXItem = /** @class */ (function (_super) {
2993
2856
  var tmpPosition = void 0;
2994
2857
  for (var j = 0; j < triangles.length; j++) {
2995
2858
  var triangle = triangles[j];
2996
- var worldTriangle = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
2997
- // 坐标转换为世界坐标
2998
- for (var i = 0; i < 3; i++) {
2999
- var worldPosition = [0, 0, 0];
3000
- vec3MulMat4(worldPosition, triangle[i], worldMat4_1);
3001
- worldTriangle[i] = worldPosition;
3002
- }
3003
- tmpPosition = effects.intersectRayTriangle([], ray.center, ray.direction, worldTriangle, backfaceCulling);
2859
+ var worldTriangle = {
2860
+ p0: worldMat4_1.projectPoint(triangle.p0, new Vector3()),
2861
+ p1: worldMat4_1.projectPoint(triangle.p1, new Vector3()),
2862
+ p2: worldMat4_1.projectPoint(triangle.p2, new Vector3()),
2863
+ };
2864
+ tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);
3004
2865
  if (tmpPosition) {
3005
2866
  tmpPositions.push(tmpPosition);
3006
2867
  }
@@ -3009,7 +2870,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3009
2870
  if (tmpPositions.length > 0) {
3010
2871
  var lastDistance_1;
3011
2872
  tmpPositions.forEach(function (item) {
3012
- var distance = vecSquareDistance(ray.center, item);
2873
+ var distance = ray.origin.distanceSquared(item);
3013
2874
  if (!lastDistance_1 || distance < lastDistance_1) {
3014
2875
  lastDistance_1 = distance;
3015
2876
  position = item;
@@ -3020,7 +2881,7 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3020
2881
  }
3021
2882
  case BoundingType.line: { // 线条包围盒,将线条转换到屏幕空间,计算线条与屏幕交互点的距离,小于阈值判定为点中
3022
2883
  var points = bounding.points, width = bounding.width;
3023
- position = intersectRayLine([], pointInCanvas, points, width / 2, worldMat4_1, self_1.composition.camera);
2884
+ position = intersectRayLine(new Vector3(), pointInCanvas, points, width / 2, worldMat4_1, self_1.composition.camera);
3024
2885
  break;
3025
2886
  }
3026
2887
  }
@@ -3028,8 +2889,8 @@ var GizmoVFXItem = /** @class */ (function (_super) {
3028
2889
  hitPositions.push(position);
3029
2890
  // 缓存距离相机最近的 BoundingKey
3030
2891
  if (self_1.hitBounding) {
3031
- var distance = vecSquareDistance(ray.center, position);
3032
- var lastDistance = vecSquareDistance(ray.center, self_1.hitBounding.position);
2892
+ var distance = ray.origin.distanceSquared(position);
2893
+ var lastDistance = ray.origin.distanceSquared(self_1.hitBounding.position);
3033
2894
  if (distance < lastDistance) {
3034
2895
  self_1.hitBounding.key = key;
3035
2896
  self_1.hitBounding.position = position;
@@ -3336,7 +3197,7 @@ var EditorGizmoPlugin = /** @class */ (function (_super) {
3336
3197
  return EditorGizmoPlugin;
3337
3198
  }(effects.AbstractPlugin));
3338
3199
 
3339
- var version = "1.0.0";
3200
+ var version = "1.1.0-alpha.1";
3340
3201
  console.info('[Galacean Effects Plugin Editor Gizmo] version: ' + version);
3341
3202
  effects.registerPlugin('editor-gizmo', EditorGizmoPlugin, GizmoVFXItem);
3342
3203