@galacean/effects-plugin-editor-gizmo 2.0.0-alpha.12 → 2.0.0-alpha.13
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/gizmo-component.d.ts +27 -8
- package/dist/gizmo-loader.d.ts +2 -3
- package/dist/gizmo-vfx-item.d.ts +3 -27
- package/dist/index.d.ts +2 -2
- package/dist/index.js +481 -502
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +481 -501
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
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: v2.0.0-alpha.
|
|
6
|
+
* Version: v2.0.0-alpha.13
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { math, DestroyOptions, glContext, ShaderType, GLSLVersion, Material, Mesh, GLGeometry, createShaderWithMarcos, Texture, noop, Geometry, Transform, RendererComponent, assertExist, ItemBehaviour, HitTestType, spec,
|
|
9
|
+
import { math, DestroyOptions, glContext, ShaderType, GLSLVersion, Material, Mesh, GLGeometry, createShaderWithMarcos, Texture, noop, Geometry, Transform, effectsClass, ParticleSystemRenderer, RendererComponent, assertExist, ItemBehaviour, HitTestType, spec, removeItem, RenderPass, RenderPassPriorityPostprocess, TextureLoadAction, RenderPassPriorityPrepare, AbstractPlugin, registerPlugin, VFXItem, logger, version as version$1 } from '@galacean/effects';
|
|
10
10
|
|
|
11
11
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
12
12
|
try {
|
|
@@ -57,12 +57,6 @@ function _inherits(subClass, superClass) {
|
|
|
57
57
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
function _instanceof1(left, right) {
|
|
61
|
-
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
62
|
-
return !!right[Symbol.hasInstance](left);
|
|
63
|
-
} else return _instanceof1(left, right);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
60
|
function _array_like_to_array(arr, len) {
|
|
67
61
|
if (len == null || len > arr.length) len = arr.length;
|
|
68
62
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
@@ -98,6 +92,18 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
98
92
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
99
93
|
}
|
|
100
94
|
|
|
95
|
+
function _instanceof1(left, right) {
|
|
96
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
97
|
+
return !!right[Symbol.hasInstance](left);
|
|
98
|
+
} else return _instanceof1(left, right);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function __decorate(decorators, target, key, desc) {
|
|
102
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
103
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
104
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
105
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
106
|
+
}
|
|
101
107
|
function __generator(thisArg, body) {
|
|
102
108
|
var _ = {
|
|
103
109
|
label: 0,
|
|
@@ -198,21 +204,6 @@ typeof SuppressedError === "function" ? SuppressedError : function _SuppressedEr
|
|
|
198
204
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
199
205
|
};
|
|
200
206
|
|
|
201
|
-
function _defineProperties(target, props) {
|
|
202
|
-
for(var i = 0; i < props.length; i++){
|
|
203
|
-
var descriptor = props[i];
|
|
204
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
205
|
-
descriptor.configurable = true;
|
|
206
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
207
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
211
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
212
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
213
|
-
return Constructor;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
207
|
var GizmoVFXItemType = "gizmo";
|
|
217
208
|
var GizmoSubType;
|
|
218
209
|
(function(GizmoSubType) {
|
|
@@ -440,75 +431,35 @@ function createGizmoShader(marcos, shader, shaderType, level) {
|
|
|
440
431
|
return createShaderWithMarcos(marcos, newShader, shaderType, level);
|
|
441
432
|
}
|
|
442
433
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
isInLine = true;
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
function projectionOfPointAndLine(point, line) {
|
|
473
|
-
var AC = new Vector2$2();
|
|
474
|
-
var BC = new Vector2$2();
|
|
475
|
-
var AB = new Vector2$2();
|
|
476
|
-
var line0 = line[0].toVector2();
|
|
477
|
-
var line1 = line[1].toVector2();
|
|
478
|
-
AC.subtractVectors(point, line0);
|
|
479
|
-
BC.subtractVectors(point, line1);
|
|
480
|
-
AB.subtractVectors(line1, line0);
|
|
481
|
-
var lengthAC = AC.length();
|
|
482
|
-
var lengthBC = BC.length();
|
|
483
|
-
var lengthAB = AB.length();
|
|
484
|
-
//利用海伦公式计算三角形面积
|
|
485
|
-
//周长的一半
|
|
486
|
-
var P = (lengthAC + lengthBC + lengthAB) / 2;
|
|
487
|
-
var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
|
|
488
|
-
//普通公式计算三角形面积反推点到线的垂直距离
|
|
489
|
-
var distance = 2 * allArea / lengthAB;
|
|
490
|
-
var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
|
|
491
|
-
var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
|
|
492
|
-
var worldAB = line[1].clone().subtract(line[0]);
|
|
493
|
-
var worldAP = worldAB.clone().multiply(l1 / (l1 + l2));
|
|
494
|
-
var worldP = line[0].clone().add(worldAP);
|
|
495
|
-
return worldP;
|
|
496
|
-
}
|
|
497
|
-
function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
|
|
498
|
-
var a = 1.0 / (right - left);
|
|
499
|
-
var b = 1.0 / (top - bottom);
|
|
500
|
-
var c = 1.0 / (far - near);
|
|
501
|
-
var tx = -(right + left) * a;
|
|
502
|
-
var ty = -(top + bottom) * b;
|
|
503
|
-
var tz = -(far + near) * c;
|
|
504
|
-
a *= 2.0;
|
|
505
|
-
b *= 2.0;
|
|
506
|
-
c *= -2.0;
|
|
507
|
-
return new Matrix4$5(a, 0.0, 0.0, 0.0, //
|
|
508
|
-
0.0, b, 0.0, 0.0, //
|
|
509
|
-
0.0, 0.0, c, 0.0, //
|
|
510
|
-
tx, ty, tz, 1.0);
|
|
511
|
-
}
|
|
434
|
+
// 坐标轴默认颜色
|
|
435
|
+
var color = {
|
|
436
|
+
xAxisColor: [
|
|
437
|
+
216 / 255,
|
|
438
|
+
178 / 255,
|
|
439
|
+
76 / 255
|
|
440
|
+
],
|
|
441
|
+
yAxisColor: [
|
|
442
|
+
38 / 255,
|
|
443
|
+
149 / 255,
|
|
444
|
+
235 / 255
|
|
445
|
+
],
|
|
446
|
+
zAxisColor: [
|
|
447
|
+
134 / 255,
|
|
448
|
+
74 / 255,
|
|
449
|
+
245 / 255
|
|
450
|
+
]
|
|
451
|
+
};
|
|
452
|
+
var renderMode = glContext.TRIANGLES;
|
|
453
|
+
// 坐标轴默认图标
|
|
454
|
+
var axisIconMap = new Map();
|
|
455
|
+
axisIconMap.set("light", "data:image/png;base64,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");
|
|
456
|
+
axisIconMap.set("camera", "data:image/png;base64,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");
|
|
457
|
+
axisIconMap.set("posX", "data:image/png;base64,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\n RK5CYII=");
|
|
458
|
+
axisIconMap.set("posY", "data:image/png;base64,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");
|
|
459
|
+
axisIconMap.set("posZ", "data:image/png;base64,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");
|
|
460
|
+
axisIconMap.set("negX", "data:image/png;base64,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\n 5ErkJggg==");
|
|
461
|
+
axisIconMap.set("negY", "data:image/png;base64,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\n 5ErkJggg==");
|
|
462
|
+
axisIconMap.set("negZ", "data:image/png;base64,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");
|
|
512
463
|
|
|
513
464
|
/**
|
|
514
465
|
* 下载图片
|
|
@@ -634,7 +585,7 @@ function _createImage() {
|
|
|
634
585
|
return GeometryData;
|
|
635
586
|
}();
|
|
636
587
|
|
|
637
|
-
var Vector3$
|
|
588
|
+
var Vector3$7 = math.Vector3;
|
|
638
589
|
/**
|
|
639
590
|
*
|
|
640
591
|
*/ var SphereGeometryData = /*#__PURE__*/ function(GeometryData) {
|
|
@@ -673,7 +624,7 @@ var Vector3$8 = math.Vector3;
|
|
|
673
624
|
var z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);
|
|
674
625
|
_this.points.push(x, y, z);
|
|
675
626
|
// normal
|
|
676
|
-
var normal = new Vector3$
|
|
627
|
+
var normal = new Vector3$7(x, y, z).normalize();
|
|
677
628
|
(_this_normals = _this.normals).push.apply(_this_normals, [].concat(normal.toArray()));
|
|
678
629
|
// uv
|
|
679
630
|
_this.uvs.push(u + uOffset, 1 - v);
|
|
@@ -762,7 +713,7 @@ var BoxGeometryData = /*#__PURE__*/ function(GeometryData) {
|
|
|
762
713
|
return BoxGeometryData;
|
|
763
714
|
}(GeometryData);
|
|
764
715
|
|
|
765
|
-
var Vector3$
|
|
716
|
+
var Vector3$6 = math.Vector3;
|
|
766
717
|
/**
|
|
767
718
|
*
|
|
768
719
|
*/ var CylinderGeometryData = /*#__PURE__*/ function(GeometryData) {
|
|
@@ -794,7 +745,7 @@ var Vector3$7 = math.Vector3;
|
|
|
794
745
|
var py = -v * height + halfHeight;
|
|
795
746
|
var pz = radius * cosTheta;
|
|
796
747
|
points.push(px, py, pz);
|
|
797
|
-
var normal = new Vector3$
|
|
748
|
+
var normal = new Vector3$6(sinTheta, slope, cosTheta).normalize();
|
|
798
749
|
(_normals = normals).push.apply(_normals, [].concat(normal.toArray()));
|
|
799
750
|
uvs.push(u, 1 - v);
|
|
800
751
|
indexRow.push(index++);
|
|
@@ -885,7 +836,7 @@ var Vector3$7 = math.Vector3;
|
|
|
885
836
|
return ConeGeometryData;
|
|
886
837
|
}(CylinderGeometryData);
|
|
887
838
|
|
|
888
|
-
var Vector3$
|
|
839
|
+
var Vector3$5 = math.Vector3;
|
|
889
840
|
/**
|
|
890
841
|
*
|
|
891
842
|
*/ var TorusGeometryData = /*#__PURE__*/ function(GeometryData) {
|
|
@@ -911,8 +862,8 @@ var Vector3$6 = math.Vector3;
|
|
|
911
862
|
_this.points.push(px, py, pz);
|
|
912
863
|
var cx = radius * Math.cos(u);
|
|
913
864
|
var cy = radius * Math.sin(u);
|
|
914
|
-
var p = new Vector3$
|
|
915
|
-
var c = new Vector3$
|
|
865
|
+
var p = new Vector3$5(px, py, pz);
|
|
866
|
+
var c = new Vector3$5(cx, cy, 0);
|
|
916
867
|
var normal = p.subtract(c).normalize();
|
|
917
868
|
(_this_normals = _this.normals).push.apply(_this_normals, [].concat(normal.toArray()));
|
|
918
869
|
_this.uvs.push(i / tubularSegments);
|
|
@@ -978,7 +929,7 @@ var Vector3$6 = math.Vector3;
|
|
|
978
929
|
return PlaneGeometryData;
|
|
979
930
|
}(GeometryData);
|
|
980
931
|
|
|
981
|
-
var Euler$1 = math.Euler, Vector3$
|
|
932
|
+
var Euler$1 = math.Euler, Vector3$4 = math.Vector3, Matrix4$5 = math.Matrix4;
|
|
982
933
|
/**
|
|
983
934
|
*
|
|
984
935
|
*/ var FrustumGeometryData = /*#__PURE__*/ function(GeometryData) {
|
|
@@ -991,11 +942,11 @@ var Euler$1 = math.Euler, Vector3$5 = math.Vector3, Matrix4$4 = math.Matrix4;
|
|
|
991
942
|
var ratio = aspect;
|
|
992
943
|
var halfY = far * Math.tan(fovY / 2);
|
|
993
944
|
var halfX = halfY * ratio;
|
|
994
|
-
var point1 = new Vector3$
|
|
995
|
-
var point2 = new Vector3$
|
|
996
|
-
var point3 = new Vector3$
|
|
997
|
-
var point4 = new Vector3$
|
|
998
|
-
var matrix = Euler$1.fromArray(rotation).toMatrix4(new Matrix4$
|
|
945
|
+
var point1 = new Vector3$4(halfX, halfY, far);
|
|
946
|
+
var point2 = new Vector3$4(-halfX, halfY, far);
|
|
947
|
+
var point3 = new Vector3$4(-halfX, -halfY, far);
|
|
948
|
+
var point4 = new Vector3$4(halfX, -halfY, far);
|
|
949
|
+
var matrix = Euler$1.fromArray(rotation).toMatrix4(new Matrix4$5());
|
|
999
950
|
var result1 = matrix.transformPoint(point1).add(position);
|
|
1000
951
|
var result2 = matrix.transformPoint(point2).add(position);
|
|
1001
952
|
var result3 = matrix.transformPoint(point3).add(position);
|
|
@@ -1218,37 +1169,86 @@ var GeometryType;
|
|
|
1218
1169
|
return result;
|
|
1219
1170
|
}
|
|
1220
1171
|
|
|
1221
|
-
|
|
1222
|
-
var
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
]
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
]
|
|
1238
|
-
|
|
1239
|
-
var
|
|
1240
|
-
|
|
1241
|
-
var
|
|
1242
|
-
|
|
1243
|
-
axisIconMap.set("camera", "data:image/png;base64,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");
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1172
|
+
math.Vector3; math.Ray;
|
|
1173
|
+
var BoundingType;
|
|
1174
|
+
(function(BoundingType) {
|
|
1175
|
+
BoundingType[BoundingType["box"] = 0] = "box";
|
|
1176
|
+
BoundingType[BoundingType["sphere"] = 1] = "sphere";
|
|
1177
|
+
BoundingType[BoundingType["triangle"] = 2] = "triangle";
|
|
1178
|
+
BoundingType[BoundingType["line"] = 3] = "line";
|
|
1179
|
+
})(BoundingType || (BoundingType = {}));
|
|
1180
|
+
|
|
1181
|
+
var Matrix4$4 = math.Matrix4, Vector2$2 = math.Vector2;
|
|
1182
|
+
function distanceOfPointAndLine(point, line) {
|
|
1183
|
+
//三角形三个边长
|
|
1184
|
+
var AC = new Vector2$2();
|
|
1185
|
+
var BC = new Vector2$2();
|
|
1186
|
+
var AB = new Vector2$2();
|
|
1187
|
+
AC.subtractVectors(point, line[0]);
|
|
1188
|
+
BC.subtractVectors(point, line[1]);
|
|
1189
|
+
AB.subtractVectors(line[1], line[0]);
|
|
1190
|
+
var lengthAC = AC.length();
|
|
1191
|
+
var lengthBC = BC.length();
|
|
1192
|
+
var lengthAB = AB.length();
|
|
1193
|
+
//利用海伦公式计算三角形面积
|
|
1194
|
+
//周长的一半
|
|
1195
|
+
var P = (lengthAC + lengthBC + lengthAB) / 2;
|
|
1196
|
+
var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
|
|
1197
|
+
//普通公式计算三角形面积反推点到线的垂直距离
|
|
1198
|
+
var distance = 2 * allArea / lengthAB;
|
|
1199
|
+
var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
|
|
1200
|
+
var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
|
|
1201
|
+
var isInLine = false;
|
|
1202
|
+
if (l1 <= lengthAB && l2 <= lengthAB) {
|
|
1203
|
+
isInLine = true;
|
|
1204
|
+
}
|
|
1205
|
+
return {
|
|
1206
|
+
distance: distance,
|
|
1207
|
+
isInLine: isInLine
|
|
1208
|
+
};
|
|
1209
|
+
}
|
|
1210
|
+
function projectionOfPointAndLine(point, line) {
|
|
1211
|
+
var AC = new Vector2$2();
|
|
1212
|
+
var BC = new Vector2$2();
|
|
1213
|
+
var AB = new Vector2$2();
|
|
1214
|
+
var line0 = line[0].toVector2();
|
|
1215
|
+
var line1 = line[1].toVector2();
|
|
1216
|
+
AC.subtractVectors(point, line0);
|
|
1217
|
+
BC.subtractVectors(point, line1);
|
|
1218
|
+
AB.subtractVectors(line1, line0);
|
|
1219
|
+
var lengthAC = AC.length();
|
|
1220
|
+
var lengthBC = BC.length();
|
|
1221
|
+
var lengthAB = AB.length();
|
|
1222
|
+
//利用海伦公式计算三角形面积
|
|
1223
|
+
//周长的一半
|
|
1224
|
+
var P = (lengthAC + lengthBC + lengthAB) / 2;
|
|
1225
|
+
var allArea = Math.abs(Math.sqrt(P * (P - lengthAC) * (P - lengthBC) * (P - lengthAB)));
|
|
1226
|
+
//普通公式计算三角形面积反推点到线的垂直距离
|
|
1227
|
+
var distance = 2 * allArea / lengthAB;
|
|
1228
|
+
var l1 = Math.sqrt(Math.pow(lengthAC, 2) - Math.pow(distance, 2));
|
|
1229
|
+
var l2 = Math.sqrt(Math.pow(lengthBC, 2) - Math.pow(distance, 2));
|
|
1230
|
+
var worldAB = line[1].clone().subtract(line[0]);
|
|
1231
|
+
var worldAP = worldAB.clone().multiply(l1 / (l1 + l2));
|
|
1232
|
+
var worldP = line[0].clone().add(worldAP);
|
|
1233
|
+
return worldP;
|
|
1234
|
+
}
|
|
1235
|
+
function computeOrthographicOffCenter(left, right, bottom, top, near, far) {
|
|
1236
|
+
var a = 1.0 / (right - left);
|
|
1237
|
+
var b = 1.0 / (top - bottom);
|
|
1238
|
+
var c = 1.0 / (far - near);
|
|
1239
|
+
var tx = -(right + left) * a;
|
|
1240
|
+
var ty = -(top + bottom) * b;
|
|
1241
|
+
var tz = -(far + near) * c;
|
|
1242
|
+
a *= 2.0;
|
|
1243
|
+
b *= 2.0;
|
|
1244
|
+
c *= -2.0;
|
|
1245
|
+
return new Matrix4$4(a, 0.0, 0.0, 0.0, //
|
|
1246
|
+
0.0, b, 0.0, 0.0, //
|
|
1247
|
+
0.0, 0.0, c, 0.0, //
|
|
1248
|
+
tx, ty, tz, 1.0);
|
|
1249
|
+
}
|
|
1250
1250
|
|
|
1251
|
-
var Vector2$1 = math.Vector2, Vector3$
|
|
1251
|
+
var Vector2$1 = math.Vector2, Vector3$3 = math.Vector3, Matrix4$3 = math.Matrix4;
|
|
1252
1252
|
/**
|
|
1253
1253
|
* 根据 gizmoSubType 类型创建几何体 Mesh
|
|
1254
1254
|
* @param subType - gizmoSubType 类型
|
|
@@ -1408,9 +1408,9 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
1408
1408
|
var i0 = indices[i] * 3;
|
|
1409
1409
|
var i1 = indices[i + 1] * 3;
|
|
1410
1410
|
var i2 = indices[i + 2] * 3;
|
|
1411
|
-
var p0 = new Vector3$
|
|
1412
|
-
var p1 = new Vector3$
|
|
1413
|
-
var p2 = new Vector3$
|
|
1411
|
+
var p0 = new Vector3$3(points[i0], points[i0 + 1], points[i0 + 2]);
|
|
1412
|
+
var p1 = new Vector3$3(points[i1], points[i1 + 1], points[i1 + 2]);
|
|
1413
|
+
var p2 = new Vector3$3(points[i2], points[i2 + 1], points[i2 + 2]);
|
|
1414
1414
|
result.push({
|
|
1415
1415
|
p0: mat4.projectPoint(p0),
|
|
1416
1416
|
p1: mat4.projectPoint(p1),
|
|
@@ -1635,7 +1635,7 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
1635
1635
|
}, boundingMap);
|
|
1636
1636
|
boundingMap.set("center", {
|
|
1637
1637
|
type: BoundingType.sphere,
|
|
1638
|
-
center: new Vector3$
|
|
1638
|
+
center: new Vector3$3(),
|
|
1639
1639
|
radius: Math.pow(Math.pow(centerBoxSize.width, 2) + Math.pow(centerBoxSize.height, 2) + Math.pow(centerBoxSize.depth, 2), 0.5) / 2
|
|
1640
1640
|
});
|
|
1641
1641
|
return result;
|
|
@@ -1912,7 +1912,7 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
1912
1912
|
* @param depthTest
|
|
1913
1913
|
* @returns 纯色材质,无光照,无透明
|
|
1914
1914
|
*/ function createMaterial(engine, color, depthTest) {
|
|
1915
|
-
var myColor = color ? Vector3$
|
|
1915
|
+
var myColor = color ? Vector3$3.fromArray(color) : new Vector3$3(255, 255, 255);
|
|
1916
1916
|
var myDepthTest = depthTest ? depthTest : false;
|
|
1917
1917
|
var material = Material.create(engine, {
|
|
1918
1918
|
uniformValues: {
|
|
@@ -1963,7 +1963,7 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
1963
1963
|
* @param depthTest
|
|
1964
1964
|
* @returns
|
|
1965
1965
|
*/ function createHideBackMaterial(engine, color, depthTest) {
|
|
1966
|
-
var myColor = color ? Vector3$
|
|
1966
|
+
var myColor = color ? Vector3$3.fromArray(color) : new Vector3$3(255, 255, 255);
|
|
1967
1967
|
var myDepthTest = depthTest ? depthTest : false;
|
|
1968
1968
|
var material = Material.create(engine, {
|
|
1969
1969
|
uniformValues: {
|
|
@@ -2011,8 +2011,8 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
2011
2011
|
});
|
|
2012
2012
|
material.setVector3("u_color", myColor);
|
|
2013
2013
|
material.setMatrix("u_model", Matrix4$3.IDENTITY);
|
|
2014
|
-
material.setVector3("u_cameraPos", Vector3$
|
|
2015
|
-
material.setVector3("u_center", Vector3$
|
|
2014
|
+
material.setVector3("u_cameraPos", Vector3$3.ZERO);
|
|
2015
|
+
material.setVector3("u_center", Vector3$3.ZERO);
|
|
2016
2016
|
material.depthTest = myDepthTest;
|
|
2017
2017
|
material.stencilTest = false;
|
|
2018
2018
|
material.blending = false;
|
|
@@ -2027,7 +2027,7 @@ var Vector2$1 = math.Vector2, Vector3$4 = math.Vector3, Matrix4$3 = math.Matrix4
|
|
|
2027
2027
|
* @param alpha
|
|
2028
2028
|
* @returns
|
|
2029
2029
|
*/ function createBlendMaterial(engine, color, depthTest, alpha) {
|
|
2030
|
-
var myColor = color ? Vector3$
|
|
2030
|
+
var myColor = color ? Vector3$3.fromArray(color) : new Vector3$3(255, 255, 255);
|
|
2031
2031
|
var myDepthTest = depthTest ? depthTest : false;
|
|
2032
2032
|
var myAlpha = alpha ? alpha : 1;
|
|
2033
2033
|
var material = Material.create(engine, {
|
|
@@ -2135,9 +2135,9 @@ function createSpriteMaterial(engine, data, depthTest) {
|
|
|
2135
2135
|
} else {
|
|
2136
2136
|
var color;
|
|
2137
2137
|
if (data === undefined) {
|
|
2138
|
-
color = new Vector3$
|
|
2138
|
+
color = new Vector3$3(255, 255, 255);
|
|
2139
2139
|
} else {
|
|
2140
|
-
color = Vector3$
|
|
2140
|
+
color = Vector3$3.fromArray(data);
|
|
2141
2141
|
}
|
|
2142
2142
|
material.setVector3("u_color", color);
|
|
2143
2143
|
// uniformValues.u_color = new Float32Array(color);
|
|
@@ -2166,30 +2166,68 @@ function createSpriteMaterial(engine, data, depthTest) {
|
|
|
2166
2166
|
boundingMap.set("xAxis", {
|
|
2167
2167
|
type: BoundingType.line,
|
|
2168
2168
|
points: [
|
|
2169
|
-
new Vector3$
|
|
2170
|
-
new Vector3$
|
|
2169
|
+
new Vector3$3(0, 0, 0),
|
|
2170
|
+
new Vector3$3(size.length, 0, 0)
|
|
2171
2171
|
],
|
|
2172
2172
|
width: size.width
|
|
2173
2173
|
});
|
|
2174
2174
|
boundingMap.set("yAxis", {
|
|
2175
2175
|
type: BoundingType.line,
|
|
2176
2176
|
points: [
|
|
2177
|
-
new Vector3$
|
|
2178
|
-
new Vector3$
|
|
2177
|
+
new Vector3$3(0, 0, 0),
|
|
2178
|
+
new Vector3$3(0, size.length, 0)
|
|
2179
2179
|
],
|
|
2180
2180
|
width: size.width
|
|
2181
2181
|
});
|
|
2182
2182
|
boundingMap.set("zAxis", {
|
|
2183
2183
|
type: BoundingType.line,
|
|
2184
2184
|
points: [
|
|
2185
|
-
new Vector3$
|
|
2186
|
-
new Vector3$
|
|
2185
|
+
new Vector3$3(0, 0, 0),
|
|
2186
|
+
new Vector3$3(0, 0, size.length)
|
|
2187
2187
|
],
|
|
2188
2188
|
width: size.width
|
|
2189
2189
|
});
|
|
2190
2190
|
}
|
|
2191
2191
|
|
|
2192
|
-
var
|
|
2192
|
+
var Matrix4$2 = math.Matrix4; math.Vector2; var Vector3$2 = math.Vector3;
|
|
2193
|
+
/**
|
|
2194
|
+
* 线条包围盒射线检测算法
|
|
2195
|
+
* @param out - 射线与包围盒交点位置
|
|
2196
|
+
* @param pointInCanvas - 归一化的画布交互点坐标
|
|
2197
|
+
* @param points - 线条包围盒两端点位置
|
|
2198
|
+
* @param radius - 线条包围盒辐射半径
|
|
2199
|
+
* @param camera - 相机对象
|
|
2200
|
+
* @returns 射线与包围盒交点位置 | undefined
|
|
2201
|
+
*/ function intersectRayLine(out, pointInCanvas, points, radius, worldMat4, camera) {
|
|
2202
|
+
// 构造一个辐射半径边缘的点 radiusPoint
|
|
2203
|
+
var up = new Vector3$2(worldMat4.elements[1], worldMat4.elements[5], worldMat4.elements[9]).normalize();
|
|
2204
|
+
var radiusPoint = up.clone().multiply(radius);
|
|
2205
|
+
radiusPoint.add(points[0]);
|
|
2206
|
+
// 计算 start、end、radius 在屏幕空间上的投影
|
|
2207
|
+
var mvpMat4 = camera.getModelViewProjection(new Matrix4$2(), worldMat4);
|
|
2208
|
+
var screenStart = mvpMat4.projectPoint(points[0], new Vector3$2());
|
|
2209
|
+
var screenEnd = mvpMat4.projectPoint(points[1], new Vector3$2());
|
|
2210
|
+
var screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3$2());
|
|
2211
|
+
var screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);
|
|
2212
|
+
var screenRadius = screenRadiusVector.length();
|
|
2213
|
+
// 计算屏幕交互点与线条的距离
|
|
2214
|
+
var _distanceOfPointAndLine = distanceOfPointAndLine(pointInCanvas, [
|
|
2215
|
+
screenStart.toVector2(),
|
|
2216
|
+
screenEnd.toVector2()
|
|
2217
|
+
]), distance = _distanceOfPointAndLine.distance, isInLine = _distanceOfPointAndLine.isInLine;
|
|
2218
|
+
if (distance <= screenRadius && isInLine) {
|
|
2219
|
+
// 计算交互点在线条上的投影并转换为世界坐标
|
|
2220
|
+
var screenPosition = projectionOfPointAndLine(pointInCanvas, [
|
|
2221
|
+
screenStart,
|
|
2222
|
+
screenEnd
|
|
2223
|
+
]);
|
|
2224
|
+
var inverseViewProjection = camera.getInverseViewProjectionMatrix();
|
|
2225
|
+
inverseViewProjection.projectPoint(screenPosition, out);
|
|
2226
|
+
return out;
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
var Euler = math.Euler, Vector3$1 = math.Vector3, Matrix4$1 = math.Matrix4;
|
|
2193
2231
|
var rectSize = 0.04;
|
|
2194
2232
|
var DEG2RAD = Math.PI / 180;
|
|
2195
2233
|
function arcPath(radius, arc, options) {
|
|
@@ -2203,7 +2241,7 @@ function arcPath(radius, arc, options) {
|
|
|
2203
2241
|
0,
|
|
2204
2242
|
0
|
|
2205
2243
|
] : _options_rotate;
|
|
2206
|
-
var rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4$
|
|
2244
|
+
var rotMat4 = Euler.fromArray(rotate).negate().toMatrix4(new Matrix4$1());
|
|
2207
2245
|
var points = [];
|
|
2208
2246
|
var indices = [];
|
|
2209
2247
|
addPoint(radius, 0);
|
|
@@ -2218,7 +2256,7 @@ function arcPath(radius, arc, options) {
|
|
|
2218
2256
|
indices: indices
|
|
2219
2257
|
};
|
|
2220
2258
|
function addPoint(cos, sin) {
|
|
2221
|
-
var point = new Vector3$
|
|
2259
|
+
var point = new Vector3$1();
|
|
2222
2260
|
if (plane === "xz") {
|
|
2223
2261
|
point.set(cos, 0, sin);
|
|
2224
2262
|
} else if (plane === "yz") {
|
|
@@ -2233,8 +2271,8 @@ function arcPath(radius, arc, options) {
|
|
|
2233
2271
|
function line(p0, p1) {
|
|
2234
2272
|
return {
|
|
2235
2273
|
points: [
|
|
2236
|
-
Vector3$
|
|
2237
|
-
Vector3$
|
|
2274
|
+
Vector3$1.fromArray(p0),
|
|
2275
|
+
Vector3$1.fromArray(p1)
|
|
2238
2276
|
],
|
|
2239
2277
|
indices: [
|
|
2240
2278
|
0,
|
|
@@ -2293,7 +2331,7 @@ function box(width, height, depth, center) {
|
|
|
2293
2331
|
d
|
|
2294
2332
|
]
|
|
2295
2333
|
].map(function(item) {
|
|
2296
|
-
return new Vector3$
|
|
2334
|
+
return new Vector3$1(item[0] + myCenter[0], item[1] + myCenter[1], item[2] + myCenter[2]);
|
|
2297
2335
|
});
|
|
2298
2336
|
return {
|
|
2299
2337
|
points: points,
|
|
@@ -2329,10 +2367,10 @@ function rect(width, height, pos) {
|
|
|
2329
2367
|
var w = width / 2;
|
|
2330
2368
|
var h = height / 2;
|
|
2331
2369
|
var points = [
|
|
2332
|
-
new Vector3$
|
|
2333
|
-
new Vector3$
|
|
2334
|
-
new Vector3$
|
|
2335
|
-
new Vector3$
|
|
2370
|
+
new Vector3$1(-w, h, 0),
|
|
2371
|
+
new Vector3$1(w, h, 0),
|
|
2372
|
+
new Vector3$1(w, -h, 0),
|
|
2373
|
+
new Vector3$1(-w, -h, 0)
|
|
2336
2374
|
];
|
|
2337
2375
|
if (pos) {
|
|
2338
2376
|
points.forEach(function(vec) {
|
|
@@ -2733,8 +2771,8 @@ function createMesh(engine, points, indices, color, depthTest, name) {
|
|
|
2733
2771
|
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 }"
|
|
2734
2772
|
}
|
|
2735
2773
|
});
|
|
2736
|
-
material.setVector3("u_color", Vector3$
|
|
2737
|
-
material.setMatrix("u_model", Matrix4$
|
|
2774
|
+
material.setVector3("u_color", Vector3$1.fromArray(color));
|
|
2775
|
+
material.setMatrix("u_model", Matrix4$1.IDENTITY);
|
|
2738
2776
|
material.depthTest = depthTest;
|
|
2739
2777
|
material.stencilTest = false;
|
|
2740
2778
|
material.blending = false;
|
|
@@ -2760,22 +2798,220 @@ function createMesh(engine, points, indices, color, depthTest, name) {
|
|
|
2760
2798
|
});
|
|
2761
2799
|
}
|
|
2762
2800
|
|
|
2763
|
-
var Vector2 = math.Vector2, Vector3
|
|
2801
|
+
var Vector2 = math.Vector2, Vector3 = math.Vector3, Matrix4 = math.Matrix4, Quaternion = math.Quaternion;
|
|
2764
2802
|
var constants = glContext;
|
|
2765
2803
|
var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
2766
2804
|
_inherits(GizmoComponent, ItemBehaviour);
|
|
2767
2805
|
function GizmoComponent() {
|
|
2768
2806
|
var _this;
|
|
2769
2807
|
_this = ItemBehaviour.apply(this, arguments) || this;
|
|
2770
|
-
_this.
|
|
2808
|
+
_this.boundingMap = new Map();
|
|
2809
|
+
_this.mat = Matrix4.fromIdentity();
|
|
2771
2810
|
_this.wireframeMeshes = [];
|
|
2811
|
+
/**
|
|
2812
|
+
* 射线检测算法
|
|
2813
|
+
* @returns 包含射线检测算法回调方法的参数
|
|
2814
|
+
*/ _this.getHitTestParams = function() {
|
|
2815
|
+
var item = _this.item;
|
|
2816
|
+
var boundingMap = _this.boundingMap;
|
|
2817
|
+
if (boundingMap.size > 0) {
|
|
2818
|
+
var boundingKeys = boundingMap.keys();
|
|
2819
|
+
var worldMat4;
|
|
2820
|
+
worldMat4 = _this.transform.getWorldMatrix();
|
|
2821
|
+
var targetItem = _this.targetItem;
|
|
2822
|
+
if (targetItem) {
|
|
2823
|
+
var _item_getComponent;
|
|
2824
|
+
//const targetTransform = this.targetItem.transform.clone();
|
|
2825
|
+
var worldPos = new Vector3();
|
|
2826
|
+
var worldQuat = new Quaternion();
|
|
2827
|
+
var worldSca = new Vector3(1, 1, 1);
|
|
2828
|
+
targetItem.transform.assignWorldTRS(worldPos, worldQuat);
|
|
2829
|
+
var targetTransform = new Transform({
|
|
2830
|
+
position: worldPos,
|
|
2831
|
+
quat: worldQuat,
|
|
2832
|
+
scale: worldSca,
|
|
2833
|
+
valid: true
|
|
2834
|
+
});
|
|
2835
|
+
var gizmoSubType = (_item_getComponent = item.getComponent(GizmoComponent)) == null ? void 0 : _item_getComponent.subType;
|
|
2836
|
+
// 移动\旋转\缩放gizmo去除近大远小
|
|
2837
|
+
if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation || gizmoSubType === GizmoSubType.camera || gizmoSubType === GizmoSubType.light) {
|
|
2838
|
+
var camera = item.composition.camera;
|
|
2839
|
+
var cameraPos = camera.position || [
|
|
2840
|
+
0,
|
|
2841
|
+
0,
|
|
2842
|
+
0
|
|
2843
|
+
];
|
|
2844
|
+
var itemPos = targetTransform.position;
|
|
2845
|
+
var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
|
|
2846
|
+
targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
|
|
2847
|
+
worldMat4 = targetTransform.getWorldMatrix();
|
|
2848
|
+
} else {
|
|
2849
|
+
worldMat4 = targetTransform.getWorldMatrix();
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2852
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
2853
|
+
var self = item;
|
|
2854
|
+
return {
|
|
2855
|
+
type: HitTestType.custom,
|
|
2856
|
+
/**
|
|
2857
|
+
* 自定义射线检测算法
|
|
2858
|
+
* @param ray 射线参数
|
|
2859
|
+
* @param pointInCanvas 屏幕坐标
|
|
2860
|
+
* @returns
|
|
2861
|
+
*/ collect: function collect(ray, pointInCanvas) {
|
|
2862
|
+
var _loop = function() {
|
|
2863
|
+
var key = _step.value;
|
|
2864
|
+
var bounding = boundingMap.get(key);
|
|
2865
|
+
var center = new Vector3();
|
|
2866
|
+
var worldCenter = new Vector3();
|
|
2867
|
+
if ((bounding == null ? void 0 : bounding.type) === BoundingType.box || (bounding == null ? void 0 : bounding.type) === BoundingType.sphere) {
|
|
2868
|
+
if (bounding == null ? void 0 : bounding.center) {
|
|
2869
|
+
center.copyFrom(bounding == null ? void 0 : bounding.center);
|
|
2870
|
+
}
|
|
2871
|
+
worldMat4.projectPoint(center, worldCenter);
|
|
2872
|
+
}
|
|
2873
|
+
var position = void 0;
|
|
2874
|
+
switch(bounding == null ? void 0 : bounding.type){
|
|
2875
|
+
case BoundingType.box:
|
|
2876
|
+
{
|
|
2877
|
+
var boxHalfSize = bounding.size.clone().multiply(0.5);
|
|
2878
|
+
var boxMax = center.clone().add(boxHalfSize);
|
|
2879
|
+
var boxMin = center.clone().subtract(boxHalfSize);
|
|
2880
|
+
position = ray.intersectBox({
|
|
2881
|
+
min: boxMin,
|
|
2882
|
+
max: boxMax
|
|
2883
|
+
}, new Vector3());
|
|
2884
|
+
}
|
|
2885
|
+
break;
|
|
2886
|
+
case BoundingType.sphere:
|
|
2887
|
+
// viewHelper 使用了正交投影,使用屏幕投影点计算
|
|
2888
|
+
if (gizmoComponent.subType === GizmoSubType.viewHelper) {
|
|
2889
|
+
// 计算正交投影矩阵
|
|
2890
|
+
var viewMat4 = self.composition.camera.getViewMatrix();
|
|
2891
|
+
var fov = 30; // 指定fov角度
|
|
2892
|
+
var screenWidth = self.composition.renderer.getWidth();
|
|
2893
|
+
var screenHeight = self.composition.renderer.getHeight();
|
|
2894
|
+
var distance = 16; // 指定物体与相机的距离
|
|
2895
|
+
var width = 2 * Math.tan(fov * Math.PI / 360) * distance;
|
|
2896
|
+
var aspect = screenWidth / screenHeight;
|
|
2897
|
+
var height = width / aspect;
|
|
2898
|
+
var proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);
|
|
2899
|
+
// 将包围盒挂到相机的 transform 上
|
|
2900
|
+
var cameraModelMat4 = self.composition.camera.getInverseViewMatrix();
|
|
2901
|
+
var localTransform = new Transform({
|
|
2902
|
+
valid: true
|
|
2903
|
+
});
|
|
2904
|
+
localTransform.cloneFromMatrix(worldMat4);
|
|
2905
|
+
var pos = localTransform.position;
|
|
2906
|
+
var padding = gizmoComponent.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
|
|
2907
|
+
localTransform.setPosition(pos.x + width / 2 - padding, pos.y + height / 2 - padding, pos.z);
|
|
2908
|
+
var localMat4 = localTransform.getWorldMatrix();
|
|
2909
|
+
var modelMat4 = cameraModelMat4.clone().multiply(localMat4);
|
|
2910
|
+
modelMat4.projectPoint(center, worldCenter);
|
|
2911
|
+
// 包围球中心点正交投影到屏幕上
|
|
2912
|
+
var vpMat4 = proMat4.clone().multiply(viewMat4);
|
|
2913
|
+
var mvpMat4 = vpMat4.clone().multiply(modelMat4);
|
|
2914
|
+
var screenCenter = mvpMat4.projectPoint(center, new Vector3());
|
|
2915
|
+
// const screenCenterX = screenCenter.x;
|
|
2916
|
+
// const screenCenterY = screenCenter.y;
|
|
2917
|
+
// 包围球上的点正交投影到屏幕上
|
|
2918
|
+
var radius = bounding.radius;
|
|
2919
|
+
var up = new Vector3(localMat4.elements[1], localMat4.elements[5], localMat4.elements[9]).normalize();
|
|
2920
|
+
var point = up.clone().multiply(radius);
|
|
2921
|
+
point.add(center);
|
|
2922
|
+
var screenPoint = mvpMat4.projectPoint(point, new Vector3());
|
|
2923
|
+
// const screenPointX = screenPoint.x;
|
|
2924
|
+
// const screenPointY = screenPoint.y;
|
|
2925
|
+
// 计算正交投影到屏幕上的包围球的半径
|
|
2926
|
+
var screenCenter2 = screenCenter.toVector2();
|
|
2927
|
+
var screenPoint2 = screenPoint.toVector2();
|
|
2928
|
+
var screenRadius = screenCenter2.distance(screenPoint2);
|
|
2929
|
+
if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {
|
|
2930
|
+
position = worldCenter;
|
|
2931
|
+
}
|
|
2932
|
+
} else {
|
|
2933
|
+
position = ray.intersectSphere({
|
|
2934
|
+
center: worldCenter,
|
|
2935
|
+
radius: bounding.radius
|
|
2936
|
+
}, new Vector3());
|
|
2937
|
+
}
|
|
2938
|
+
break;
|
|
2939
|
+
case BoundingType.triangle:
|
|
2940
|
+
{
|
|
2941
|
+
var triangles = bounding.triangles, backfaceCulling = bounding.backfaceCulling;
|
|
2942
|
+
var tmpPositions = [];
|
|
2943
|
+
var tmpPosition = void 0;
|
|
2944
|
+
for(var j = 0; j < triangles.length; j++){
|
|
2945
|
+
var triangle = triangles[j];
|
|
2946
|
+
var worldTriangle = {
|
|
2947
|
+
p0: worldMat4.projectPoint(triangle.p0, new Vector3()),
|
|
2948
|
+
p1: worldMat4.projectPoint(triangle.p1, new Vector3()),
|
|
2949
|
+
p2: worldMat4.projectPoint(triangle.p2, new Vector3())
|
|
2950
|
+
};
|
|
2951
|
+
tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);
|
|
2952
|
+
if (tmpPosition) {
|
|
2953
|
+
tmpPositions.push(tmpPosition);
|
|
2954
|
+
}
|
|
2955
|
+
}
|
|
2956
|
+
// 仅保存距离相机最近的点
|
|
2957
|
+
if (tmpPositions.length > 0) {
|
|
2958
|
+
var lastDistance = void 0;
|
|
2959
|
+
tmpPositions.forEach(function(item) {
|
|
2960
|
+
var distance = ray.origin.distanceSquared(item);
|
|
2961
|
+
if (!lastDistance || distance < lastDistance) {
|
|
2962
|
+
lastDistance = distance;
|
|
2963
|
+
position = item;
|
|
2964
|
+
}
|
|
2965
|
+
});
|
|
2966
|
+
}
|
|
2967
|
+
break;
|
|
2968
|
+
}
|
|
2969
|
+
case BoundingType.line:
|
|
2970
|
+
{
|
|
2971
|
+
var points = bounding.points, width1 = bounding.width;
|
|
2972
|
+
position = intersectRayLine(new Vector3(), pointInCanvas, points, width1 / 2, worldMat4, self.composition.camera);
|
|
2973
|
+
break;
|
|
2974
|
+
}
|
|
2975
|
+
}
|
|
2976
|
+
if (position) {
|
|
2977
|
+
hitPositions.push(position);
|
|
2978
|
+
// 缓存距离相机最近的 BoundingKey
|
|
2979
|
+
if (gizmoComponent.hitBounding) {
|
|
2980
|
+
var distance1 = ray.origin.distanceSquared(position);
|
|
2981
|
+
var lastDistance1 = ray.origin.distanceSquared(gizmoComponent.hitBounding.position);
|
|
2982
|
+
if (distance1 < lastDistance1) {
|
|
2983
|
+
gizmoComponent.hitBounding.key = key;
|
|
2984
|
+
gizmoComponent.hitBounding.position = position;
|
|
2985
|
+
}
|
|
2986
|
+
} else {
|
|
2987
|
+
gizmoComponent.hitBounding = {
|
|
2988
|
+
key: key,
|
|
2989
|
+
position: position
|
|
2990
|
+
};
|
|
2991
|
+
}
|
|
2992
|
+
}
|
|
2993
|
+
};
|
|
2994
|
+
var hitPositions = [];
|
|
2995
|
+
var gizmoComponent = self.getComponent(GizmoComponent);
|
|
2996
|
+
gizmoComponent.hitBounding = undefined;
|
|
2997
|
+
for(var _iterator = _create_for_of_iterator_helper_loose(boundingKeys), _step; !(_step = _iterator()).done;)_loop();
|
|
2998
|
+
if (hitPositions.length === 0) {
|
|
2999
|
+
gizmoComponent.hitBounding = undefined;
|
|
3000
|
+
}
|
|
3001
|
+
return hitPositions;
|
|
3002
|
+
},
|
|
3003
|
+
behavior: spec.InteractBehavior.NOTIFY
|
|
3004
|
+
};
|
|
3005
|
+
}
|
|
3006
|
+
};
|
|
2772
3007
|
return _this;
|
|
2773
3008
|
}
|
|
2774
3009
|
var _proto = GizmoComponent.prototype;
|
|
2775
3010
|
_proto.start = function start() {
|
|
3011
|
+
this.item.getHitTestParams = this.getHitTestParams;
|
|
2776
3012
|
for(var _iterator = _create_for_of_iterator_helper_loose(this.item.composition.items), _step; !(_step = _iterator()).done;){
|
|
2777
3013
|
var item = _step.value;
|
|
2778
|
-
if (item.id === this.
|
|
3014
|
+
if (item.id === this.target) {
|
|
2779
3015
|
this.targetItem = item;
|
|
2780
3016
|
}
|
|
2781
3017
|
}
|
|
@@ -2799,7 +3035,8 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2799
3035
|
if (gizmoVFXItemList && gizmoVFXItemList.length > 0) {
|
|
2800
3036
|
for(var _iterator2 = _create_for_of_iterator_helper_loose(gizmoVFXItemList), _step2; !(_step2 = _iterator2()).done;){
|
|
2801
3037
|
var gizmoVFXItem = _step2.value;
|
|
2802
|
-
|
|
3038
|
+
var gizmoSubType = gizmoVFXItem.getComponent(GizmoComponent).subType;
|
|
3039
|
+
switch(gizmoSubType){
|
|
2803
3040
|
case GizmoSubType.particleEmitter:
|
|
2804
3041
|
this.createParticleContent(targetItem, gizmoPlugin.meshToAdd);
|
|
2805
3042
|
break;
|
|
@@ -2817,19 +3054,19 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2817
3054
|
case GizmoSubType.pointLight:
|
|
2818
3055
|
case GizmoSubType.spotLight:
|
|
2819
3056
|
case GizmoSubType.floorGrid:
|
|
2820
|
-
this.createBasicContent(targetItem, gizmoPlugin.meshToAdd,
|
|
3057
|
+
this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);
|
|
2821
3058
|
break;
|
|
2822
3059
|
case GizmoSubType.camera:
|
|
2823
3060
|
case GizmoSubType.light:
|
|
2824
|
-
this.createBasicContent(targetItem, gizmoPlugin.meshToAdd,
|
|
3061
|
+
this.createBasicContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);
|
|
2825
3062
|
break;
|
|
2826
3063
|
case GizmoSubType.rotation:
|
|
2827
3064
|
case GizmoSubType.scale:
|
|
2828
3065
|
case GizmoSubType.translation:
|
|
2829
|
-
this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd,
|
|
3066
|
+
this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType);
|
|
2830
3067
|
break;
|
|
2831
3068
|
case GizmoSubType.viewHelper:
|
|
2832
|
-
this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd,
|
|
3069
|
+
this.createCombinationContent(targetItem, gizmoPlugin.meshToAdd, gizmoSubType, iconTextures);
|
|
2833
3070
|
break;
|
|
2834
3071
|
case GizmoSubType.boundingBox:
|
|
2835
3072
|
this.createBoundingBoxContent(targetItem, gizmoPlugin.meshToAdd);
|
|
@@ -2850,22 +3087,24 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2850
3087
|
};
|
|
2851
3088
|
_proto.updateRenderData = function updateRenderData() {
|
|
2852
3089
|
var item = this.item;
|
|
2853
|
-
|
|
3090
|
+
var gizmoSubType = this.subType;
|
|
3091
|
+
if (gizmoSubType === GizmoSubType.particleEmitter) {
|
|
2854
3092
|
if (this.targetItem && item.content) {
|
|
2855
3093
|
this.mat = this.targetItem.transform.getWorldMatrix();
|
|
3094
|
+
//@ts-expect-error
|
|
2856
3095
|
item.content.material.setMatrix("u_model", this.mat);
|
|
2857
3096
|
}
|
|
2858
|
-
if (
|
|
2859
|
-
var particle = this.targetItem.
|
|
3097
|
+
if (this.wireframeMesh && this.targetItem) {
|
|
3098
|
+
var particle = this.targetItem.getComponent(ParticleSystemRenderer);
|
|
2860
3099
|
if (particle) {
|
|
2861
|
-
updateWireframeMesh(particle.particleMesh.mesh,
|
|
2862
|
-
|
|
3100
|
+
updateWireframeMesh(particle.particleMesh.mesh, this.wireframeMesh, WireframeGeometryType.quad);
|
|
3101
|
+
this.wireframeMesh.worldMatrix = particle.particleMesh.mesh.worldMatrix;
|
|
2863
3102
|
}
|
|
2864
3103
|
}
|
|
2865
|
-
} else if (
|
|
2866
|
-
if (
|
|
3104
|
+
} else if (gizmoSubType === GizmoSubType.modelWireframe) {
|
|
3105
|
+
if (this.wireframeMesh && this.targetItem) {
|
|
2867
3106
|
var _this_targetItem_getComponent;
|
|
2868
|
-
|
|
3107
|
+
//@ts-expect-error
|
|
2869
3108
|
var meshes = (_this_targetItem_getComponent = this.targetItem.getComponent(RendererComponent)) == null ? void 0 : _this_targetItem_getComponent.content.mriMeshs;
|
|
2870
3109
|
var wireframeMeshes = this.wireframeMeshes;
|
|
2871
3110
|
if ((meshes == null ? void 0 : meshes.length) > 0) {
|
|
@@ -2876,11 +3115,11 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2876
3115
|
}
|
|
2877
3116
|
} else {
|
|
2878
3117
|
if (this.targetItem) {
|
|
2879
|
-
if (
|
|
3118
|
+
if (this.contents) {
|
|
2880
3119
|
// const targetTransform = this.targetItem.transform.clone();
|
|
2881
|
-
var worldPos = new Vector3
|
|
2882
|
-
var worldQuat = new Quaternion
|
|
2883
|
-
var worldScale = new Vector3
|
|
3120
|
+
var worldPos = new Vector3();
|
|
3121
|
+
var worldQuat = new Quaternion();
|
|
3122
|
+
var worldScale = new Vector3(1, 1, 1);
|
|
2884
3123
|
this.targetItem.transform.assignWorldTRS(worldPos, worldQuat);
|
|
2885
3124
|
var targetTransform = new Transform({
|
|
2886
3125
|
position: worldPos,
|
|
@@ -2889,29 +3128,29 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2889
3128
|
valid: true
|
|
2890
3129
|
});
|
|
2891
3130
|
// 移动\旋转\缩放gizmo去除近大远小
|
|
2892
|
-
if (
|
|
3131
|
+
if (gizmoSubType === GizmoSubType.rotation || gizmoSubType === GizmoSubType.scale || gizmoSubType === GizmoSubType.translation) {
|
|
2893
3132
|
var camera = item.composition.camera;
|
|
2894
|
-
var cameraPos = camera.position || new Vector3
|
|
3133
|
+
var cameraPos = camera.position || new Vector3();
|
|
2895
3134
|
var itemPos = targetTransform.position;
|
|
2896
3135
|
var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
|
|
2897
3136
|
targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
|
|
2898
3137
|
}
|
|
2899
3138
|
this.mat = targetTransform.getWorldMatrix();
|
|
2900
3139
|
var center = targetTransform.position;
|
|
2901
|
-
for(var _iterator = _create_for_of_iterator_helper_loose(
|
|
3140
|
+
for(var _iterator = _create_for_of_iterator_helper_loose(this.contents), _step; !(_step = _iterator()).done;){
|
|
2902
3141
|
var _step_value = _step.value, mesh = _step_value[0], transform = _step_value[1];
|
|
2903
3142
|
var worldMat4 = void 0;
|
|
2904
3143
|
transform.parentTransform = targetTransform;
|
|
2905
|
-
var position = new Vector3
|
|
3144
|
+
var position = new Vector3();
|
|
2906
3145
|
transform.assignWorldTRS(position);
|
|
2907
3146
|
// 物体和中心点在屏幕空间上投影的距离
|
|
2908
3147
|
var distanceToCneter = 100;
|
|
2909
3148
|
var theta = 1;
|
|
2910
|
-
if (
|
|
3149
|
+
if (gizmoSubType === GizmoSubType.viewHelper) {
|
|
2911
3150
|
// 正交投影只需要计算物体在XY平面上的投影与中心点的距离
|
|
2912
3151
|
if (mesh.name === "sprite") {
|
|
2913
3152
|
distanceToCneter = position.toVector2().distance(center.toVector2());
|
|
2914
|
-
theta =
|
|
3153
|
+
theta = this.boundingMap.get("posX").radius;
|
|
2915
3154
|
}
|
|
2916
3155
|
// 将物体挂到相机的transform上
|
|
2917
3156
|
var fov = 30; // 指定fov角度
|
|
@@ -2922,7 +3161,7 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2922
3161
|
var aspect = screenWidth / screenHeight;
|
|
2923
3162
|
var height = width / aspect;
|
|
2924
3163
|
var cameraModelMat4 = item.composition.camera.getInverseViewMatrix();
|
|
2925
|
-
var padding =
|
|
3164
|
+
var padding = this.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
|
|
2926
3165
|
var localMat = void 0;
|
|
2927
3166
|
localMat = transform.getWorldMatrix();
|
|
2928
3167
|
var worldTransform = new Transform({
|
|
@@ -2936,7 +3175,7 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2936
3175
|
var proMat5 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);
|
|
2937
3176
|
mesh.material.setMatrix("_MatrixP", proMat5);
|
|
2938
3177
|
} else {
|
|
2939
|
-
if (
|
|
3178
|
+
if (gizmoSubType === GizmoSubType.rotation) {
|
|
2940
3179
|
var cameraPos1 = item.composition.camera.position || [
|
|
2941
3180
|
0,
|
|
2942
3181
|
0,
|
|
@@ -2960,9 +3199,9 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2960
3199
|
}
|
|
2961
3200
|
}
|
|
2962
3201
|
if (item.content) {
|
|
2963
|
-
var worldPos1 = new Vector3
|
|
2964
|
-
var worldQuat1 = new Quaternion
|
|
2965
|
-
var worldSca = new Vector3
|
|
3202
|
+
var worldPos1 = new Vector3();
|
|
3203
|
+
var worldQuat1 = new Quaternion();
|
|
3204
|
+
var worldSca = new Vector3(1, 1, 1);
|
|
2966
3205
|
this.targetItem.transform.assignWorldTRS(worldPos1, worldQuat1);
|
|
2967
3206
|
var targetTransform1 = new Transform({
|
|
2968
3207
|
position: worldPos1,
|
|
@@ -2970,14 +3209,15 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2970
3209
|
scale: worldSca,
|
|
2971
3210
|
valid: true
|
|
2972
3211
|
});
|
|
2973
|
-
if (
|
|
3212
|
+
if (gizmoSubType === GizmoSubType.light || gizmoSubType === GizmoSubType.camera) {
|
|
2974
3213
|
var camera1 = item.composition.camera;
|
|
2975
|
-
var cameraPos2 = camera1.position || new Vector3
|
|
3214
|
+
var cameraPos2 = camera1.position || new Vector3(0, 0, 0);
|
|
2976
3215
|
var itemPos1 = targetTransform1.position;
|
|
2977
3216
|
var newPos1 = moveToPointWidthFixDistance(cameraPos2, itemPos1);
|
|
2978
3217
|
targetTransform1.setPosition(newPos1.x, newPos1.y, newPos1.z);
|
|
2979
3218
|
}
|
|
2980
3219
|
this.mat = targetTransform1.getWorldMatrix();
|
|
3220
|
+
//@ts-expect-error
|
|
2981
3221
|
item.content.material.setMatrix("u_model", targetTransform1.getWorldMatrix());
|
|
2982
3222
|
}
|
|
2983
3223
|
}
|
|
@@ -2988,8 +3228,8 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
2988
3228
|
* @returns 绘制模式常量
|
|
2989
3229
|
*/ _proto.getDefaultRenderMode = function getDefaultRenderMode() {
|
|
2990
3230
|
var result;
|
|
2991
|
-
var
|
|
2992
|
-
switch(
|
|
3231
|
+
var gizmoSubType = this.subType;
|
|
3232
|
+
switch(gizmoSubType){
|
|
2993
3233
|
case GizmoSubType.particleEmitter:
|
|
2994
3234
|
case GizmoSubType.modelWireframe:
|
|
2995
3235
|
case GizmoSubType.frustum:
|
|
@@ -3010,8 +3250,8 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3010
3250
|
* @returns 几何体尺寸
|
|
3011
3251
|
*/ _proto.getDefaultSize = function getDefaultSize() {
|
|
3012
3252
|
var result = {};
|
|
3013
|
-
var
|
|
3014
|
-
switch(
|
|
3253
|
+
var gizmoSubType = this.subType;
|
|
3254
|
+
switch(gizmoSubType){
|
|
3015
3255
|
case GizmoSubType.box:
|
|
3016
3256
|
result = {
|
|
3017
3257
|
width: 1,
|
|
@@ -3046,7 +3286,7 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3046
3286
|
var _this = this;
|
|
3047
3287
|
var _item_composition;
|
|
3048
3288
|
var modelComponent = item.getComponent(RendererComponent);
|
|
3049
|
-
|
|
3289
|
+
//@ts-expect-error
|
|
3050
3290
|
var ms = modelComponent.content.mriMeshs;
|
|
3051
3291
|
var engine = (_item_composition = item.composition) == null ? void 0 : _item_composition.renderer.engine;
|
|
3052
3292
|
assertExist(engine);
|
|
@@ -3054,7 +3294,7 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3054
3294
|
this.targetItem = item;
|
|
3055
3295
|
this.wireframeMeshes = [];
|
|
3056
3296
|
ms.forEach(function(m) {
|
|
3057
|
-
var mesh = _this.
|
|
3297
|
+
var mesh = _this.wireframeMesh = createModeWireframe(engine, m, _this.color);
|
|
3058
3298
|
_this.wireframeMeshes.push(mesh);
|
|
3059
3299
|
meshesToAdd.push(mesh);
|
|
3060
3300
|
});
|
|
@@ -3082,10 +3322,10 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3082
3322
|
var gizmoItem = this.item;
|
|
3083
3323
|
var shape = {
|
|
3084
3324
|
shape: "Box",
|
|
3085
|
-
width:
|
|
3086
|
-
height:
|
|
3087
|
-
depth:
|
|
3088
|
-
center:
|
|
3325
|
+
width: this.size.width,
|
|
3326
|
+
height: this.size.height,
|
|
3327
|
+
depth: this.size.depth,
|
|
3328
|
+
center: this.size.center
|
|
3089
3329
|
};
|
|
3090
3330
|
var engine = (_gizmoItem_composition = gizmoItem.composition) == null ? void 0 : _gizmoItem_composition.renderer.engine;
|
|
3091
3331
|
assertExist(engine);
|
|
@@ -3107,14 +3347,14 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3107
3347
|
var _gizmoItem_composition;
|
|
3108
3348
|
var gizmoItem = this.item;
|
|
3109
3349
|
var options = {
|
|
3110
|
-
size:
|
|
3350
|
+
size: this.size,
|
|
3111
3351
|
color: this.color,
|
|
3112
3352
|
renderMode: this.renderMode,
|
|
3113
3353
|
depthTest: this.depthTest
|
|
3114
3354
|
};
|
|
3115
3355
|
var engine = (_gizmoItem_composition = gizmoItem.composition) == null ? void 0 : _gizmoItem_composition.renderer.engine;
|
|
3116
3356
|
assertExist(engine);
|
|
3117
|
-
var mesh = gizmoItem._content = createMeshFromSubType(engine, subType,
|
|
3357
|
+
var mesh = gizmoItem._content = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options);
|
|
3118
3358
|
this.targetItem = item;
|
|
3119
3359
|
meshesToAdd.push(mesh);
|
|
3120
3360
|
};
|
|
@@ -3128,13 +3368,13 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3128
3368
|
var _gizmoItem_composition;
|
|
3129
3369
|
var gizmoItem = this.item;
|
|
3130
3370
|
var options = {
|
|
3131
|
-
size:
|
|
3371
|
+
size: this.size,
|
|
3132
3372
|
renderMode: this.renderMode
|
|
3133
3373
|
};
|
|
3134
3374
|
var engine = (_gizmoItem_composition = gizmoItem.composition) == null ? void 0 : _gizmoItem_composition.renderer.engine;
|
|
3135
3375
|
assertExist(engine);
|
|
3136
|
-
|
|
3137
|
-
for(var _iterator = _create_for_of_iterator_helper_loose(
|
|
3376
|
+
this.contents = createMeshFromSubType(engine, subType, this.boundingMap, iconTextures, options);
|
|
3377
|
+
for(var _iterator = _create_for_of_iterator_helper_loose(this.contents.keys()), _step; !(_step = _iterator()).done;){
|
|
3138
3378
|
var mesh = _step.value;
|
|
3139
3379
|
meshesToAdd.push(mesh);
|
|
3140
3380
|
}
|
|
@@ -3143,13 +3383,12 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3143
3383
|
_proto.fromData = function fromData(data) {
|
|
3144
3384
|
ItemBehaviour.prototype.fromData.call(this, data);
|
|
3145
3385
|
var item = this.item;
|
|
3146
|
-
var options = data;
|
|
3147
3386
|
item.duration = 999;
|
|
3148
|
-
var opt =
|
|
3149
|
-
|
|
3150
|
-
|
|
3387
|
+
var opt = data.options;
|
|
3388
|
+
this.target = opt.target;
|
|
3389
|
+
this.subType = opt.subType;
|
|
3151
3390
|
this.renderMode = opt.renderMode || this.getDefaultRenderMode();
|
|
3152
|
-
|
|
3391
|
+
this.size = opt.size || this.getDefaultSize();
|
|
3153
3392
|
this.depthTest = opt.depthTest;
|
|
3154
3393
|
var c = opt.color || [
|
|
3155
3394
|
255,
|
|
@@ -3161,279 +3400,15 @@ var GizmoComponent = /*#__PURE__*/ function(ItemBehaviour) {
|
|
|
3161
3400
|
c[1] / 255,
|
|
3162
3401
|
c[2] / 255
|
|
3163
3402
|
];
|
|
3164
|
-
|
|
3165
|
-
|
|
3166
|
-
item.transform = new Transform(options.content.transform);
|
|
3403
|
+
if (data) {
|
|
3404
|
+
item.transform = new Transform(data.transform);
|
|
3167
3405
|
}
|
|
3168
3406
|
};
|
|
3169
3407
|
return GizmoComponent;
|
|
3170
3408
|
}(ItemBehaviour);
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
* 线条包围盒射线检测算法
|
|
3175
|
-
* @param out - 射线与包围盒交点位置
|
|
3176
|
-
* @param pointInCanvas - 归一化的画布交互点坐标
|
|
3177
|
-
* @param points - 线条包围盒两端点位置
|
|
3178
|
-
* @param radius - 线条包围盒辐射半径
|
|
3179
|
-
* @param camera - 相机对象
|
|
3180
|
-
* @returns 射线与包围盒交点位置 | undefined
|
|
3181
|
-
*/ function intersectRayLine(out, pointInCanvas, points, radius, worldMat4, camera) {
|
|
3182
|
-
// 构造一个辐射半径边缘的点 radiusPoint
|
|
3183
|
-
var up = new Vector3$1(worldMat4.elements[1], worldMat4.elements[5], worldMat4.elements[9]).normalize();
|
|
3184
|
-
var radiusPoint = up.clone().multiply(radius);
|
|
3185
|
-
radiusPoint.add(points[0]);
|
|
3186
|
-
// 计算 start、end、radius 在屏幕空间上的投影
|
|
3187
|
-
var mvpMat4 = camera.getModelViewProjection(new Matrix4(), worldMat4);
|
|
3188
|
-
var screenStart = mvpMat4.projectPoint(points[0], new Vector3$1());
|
|
3189
|
-
var screenEnd = mvpMat4.projectPoint(points[1], new Vector3$1());
|
|
3190
|
-
var screenRadiusPoint = mvpMat4.projectPoint(radiusPoint, new Vector3$1());
|
|
3191
|
-
var screenRadiusVector = screenRadiusPoint.clone().subtract(screenStart);
|
|
3192
|
-
var screenRadius = screenRadiusVector.length();
|
|
3193
|
-
// 计算屏幕交互点与线条的距离
|
|
3194
|
-
var _distanceOfPointAndLine = distanceOfPointAndLine(pointInCanvas, [
|
|
3195
|
-
screenStart.toVector2(),
|
|
3196
|
-
screenEnd.toVector2()
|
|
3197
|
-
]), distance = _distanceOfPointAndLine.distance, isInLine = _distanceOfPointAndLine.isInLine;
|
|
3198
|
-
if (distance <= screenRadius && isInLine) {
|
|
3199
|
-
// 计算交互点在线条上的投影并转换为世界坐标
|
|
3200
|
-
var screenPosition = projectionOfPointAndLine(pointInCanvas, [
|
|
3201
|
-
screenStart,
|
|
3202
|
-
screenEnd
|
|
3203
|
-
]);
|
|
3204
|
-
var inverseViewProjection = camera.getInverseViewProjectionMatrix();
|
|
3205
|
-
inverseViewProjection.projectPoint(screenPosition, out);
|
|
3206
|
-
return out;
|
|
3207
|
-
}
|
|
3208
|
-
}
|
|
3209
|
-
|
|
3210
|
-
math.Vector2; var Vector3 = math.Vector3; math.Matrix4; math.Ray; var Quaternion = math.Quaternion;
|
|
3211
|
-
var BoundingType;
|
|
3212
|
-
(function(BoundingType) {
|
|
3213
|
-
BoundingType[BoundingType["box"] = 0] = "box";
|
|
3214
|
-
BoundingType[BoundingType["sphere"] = 1] = "sphere";
|
|
3215
|
-
BoundingType[BoundingType["triangle"] = 2] = "triangle";
|
|
3216
|
-
BoundingType[BoundingType["line"] = 3] = "line";
|
|
3217
|
-
})(BoundingType || (BoundingType = {}));
|
|
3218
|
-
/**
|
|
3219
|
-
*
|
|
3220
|
-
*/ var GizmoVFXItem = /*#__PURE__*/ function(VFXItem) {
|
|
3221
|
-
_inherits(GizmoVFXItem, VFXItem);
|
|
3222
|
-
function GizmoVFXItem(engine, props) {
|
|
3223
|
-
var _this;
|
|
3224
|
-
_this = VFXItem.call(this, engine, props) || this;
|
|
3225
|
-
_this.boundingMap = new Map();
|
|
3226
|
-
var gizmoComponent = _this.addComponent(GizmoComponent);
|
|
3227
|
-
if (props) {
|
|
3228
|
-
gizmoComponent.fromData(props);
|
|
3229
|
-
}
|
|
3230
|
-
return _this;
|
|
3231
|
-
}
|
|
3232
|
-
var _proto = GizmoVFXItem.prototype;
|
|
3233
|
-
/**
|
|
3234
|
-
* 射线检测算法
|
|
3235
|
-
* @returns 包含射线检测算法回调方法的参数
|
|
3236
|
-
*/ _proto.getHitTestParams = function getHitTestParams() {
|
|
3237
|
-
var boundingMap = this.boundingMap;
|
|
3238
|
-
if (boundingMap.size > 0) {
|
|
3239
|
-
var _this_getComponent;
|
|
3240
|
-
var boundingKeys = boundingMap.keys();
|
|
3241
|
-
var worldMat4;
|
|
3242
|
-
worldMat4 = this.transform.getWorldMatrix();
|
|
3243
|
-
var targetItem = (_this_getComponent = this.getComponent(GizmoComponent)) == null ? void 0 : _this_getComponent.targetItem;
|
|
3244
|
-
if (targetItem) {
|
|
3245
|
-
//const targetTransform = this.targetItem.transform.clone();
|
|
3246
|
-
var worldPos = new Vector3();
|
|
3247
|
-
var worldQuat = new Quaternion();
|
|
3248
|
-
var worldSca = new Vector3(1, 1, 1);
|
|
3249
|
-
targetItem.transform.assignWorldTRS(worldPos, worldQuat);
|
|
3250
|
-
var targetTransform = new Transform({
|
|
3251
|
-
position: worldPos,
|
|
3252
|
-
quat: worldQuat,
|
|
3253
|
-
scale: worldSca,
|
|
3254
|
-
valid: true
|
|
3255
|
-
});
|
|
3256
|
-
// 移动\旋转\缩放gizmo去除近大远小
|
|
3257
|
-
if (this.subType === GizmoSubType.rotation || this.subType === GizmoSubType.scale || this.subType === GizmoSubType.translation || this.subType === GizmoSubType.camera || this.subType === GizmoSubType.light) {
|
|
3258
|
-
var camera = this.composition.camera;
|
|
3259
|
-
var cameraPos = camera.position || [
|
|
3260
|
-
0,
|
|
3261
|
-
0,
|
|
3262
|
-
0
|
|
3263
|
-
];
|
|
3264
|
-
var itemPos = targetTransform.position;
|
|
3265
|
-
var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
|
|
3266
|
-
targetTransform.setPosition(newPos.x, newPos.y, newPos.z);
|
|
3267
|
-
worldMat4 = targetTransform.getWorldMatrix();
|
|
3268
|
-
} else {
|
|
3269
|
-
worldMat4 = targetTransform.getWorldMatrix();
|
|
3270
|
-
}
|
|
3271
|
-
}
|
|
3272
|
-
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
3273
|
-
var self = this;
|
|
3274
|
-
return {
|
|
3275
|
-
type: HitTestType.custom,
|
|
3276
|
-
/**
|
|
3277
|
-
* 自定义射线检测算法
|
|
3278
|
-
* @param ray 射线参数
|
|
3279
|
-
* @param pointInCanvas 屏幕坐标
|
|
3280
|
-
* @returns
|
|
3281
|
-
*/ collect: function collect(ray, pointInCanvas) {
|
|
3282
|
-
var _loop = function() {
|
|
3283
|
-
var key = _step.value;
|
|
3284
|
-
var bounding = boundingMap.get(key);
|
|
3285
|
-
var center = new Vector3();
|
|
3286
|
-
var worldCenter = new Vector3();
|
|
3287
|
-
if ((bounding == null ? void 0 : bounding.type) === 0 || (bounding == null ? void 0 : bounding.type) === 1) {
|
|
3288
|
-
if (bounding == null ? void 0 : bounding.center) {
|
|
3289
|
-
center.copyFrom(bounding == null ? void 0 : bounding.center);
|
|
3290
|
-
}
|
|
3291
|
-
worldMat4.projectPoint(center, worldCenter);
|
|
3292
|
-
}
|
|
3293
|
-
var position = void 0;
|
|
3294
|
-
switch(bounding == null ? void 0 : bounding.type){
|
|
3295
|
-
case 0:
|
|
3296
|
-
{
|
|
3297
|
-
var boxHalfSize = bounding.size.clone().multiply(0.5);
|
|
3298
|
-
var boxMax = center.clone().add(boxHalfSize);
|
|
3299
|
-
var boxMin = center.clone().subtract(boxHalfSize);
|
|
3300
|
-
position = ray.intersectBox({
|
|
3301
|
-
min: boxMin,
|
|
3302
|
-
max: boxMax
|
|
3303
|
-
}, new Vector3());
|
|
3304
|
-
}
|
|
3305
|
-
break;
|
|
3306
|
-
case 1:
|
|
3307
|
-
// viewHelper 使用了正交投影,使用屏幕投影点计算
|
|
3308
|
-
if (self.subType === GizmoSubType.viewHelper) {
|
|
3309
|
-
// 计算正交投影矩阵
|
|
3310
|
-
var viewMat4 = self.composition.camera.getViewMatrix();
|
|
3311
|
-
var fov = 30; // 指定fov角度
|
|
3312
|
-
var screenWidth = self.composition.renderer.getWidth();
|
|
3313
|
-
var screenHeight = self.composition.renderer.getHeight();
|
|
3314
|
-
var distance = 16; // 指定物体与相机的距离
|
|
3315
|
-
var width = 2 * Math.tan(fov * Math.PI / 360) * distance;
|
|
3316
|
-
var aspect = screenWidth / screenHeight;
|
|
3317
|
-
var height = width / aspect;
|
|
3318
|
-
var proMat4 = computeOrthographicOffCenter(-width / 2, width / 2, -height / 2, height / 2, -distance, distance);
|
|
3319
|
-
// 将包围盒挂到相机的 transform 上
|
|
3320
|
-
var cameraModelMat4 = self.composition.camera.getInverseViewMatrix();
|
|
3321
|
-
var localTransform = new Transform({
|
|
3322
|
-
valid: true
|
|
3323
|
-
});
|
|
3324
|
-
localTransform.cloneFromMatrix(worldMat4);
|
|
3325
|
-
var pos = localTransform.position;
|
|
3326
|
-
var padding = self.size.padding || 1; // 指定viewHelper与屏幕右上角的边距
|
|
3327
|
-
localTransform.setPosition(pos.x + width / 2 - padding, pos.y + height / 2 - padding, pos.z);
|
|
3328
|
-
var localMat4 = localTransform.getWorldMatrix();
|
|
3329
|
-
var modelMat4 = cameraModelMat4.clone().multiply(localMat4);
|
|
3330
|
-
modelMat4.projectPoint(center, worldCenter);
|
|
3331
|
-
// 包围球中心点正交投影到屏幕上
|
|
3332
|
-
var vpMat4 = proMat4.clone().multiply(viewMat4);
|
|
3333
|
-
var mvpMat4 = vpMat4.clone().multiply(modelMat4);
|
|
3334
|
-
var screenCenter = mvpMat4.projectPoint(center, new Vector3());
|
|
3335
|
-
// const screenCenterX = screenCenter.x;
|
|
3336
|
-
// const screenCenterY = screenCenter.y;
|
|
3337
|
-
// 包围球上的点正交投影到屏幕上
|
|
3338
|
-
var radius = bounding.radius;
|
|
3339
|
-
var up = new Vector3(localMat4.elements[1], localMat4.elements[5], localMat4.elements[9]).normalize();
|
|
3340
|
-
var point = up.clone().multiply(radius);
|
|
3341
|
-
point.add(center);
|
|
3342
|
-
var screenPoint = mvpMat4.projectPoint(point, new Vector3());
|
|
3343
|
-
// const screenPointX = screenPoint.x;
|
|
3344
|
-
// const screenPointY = screenPoint.y;
|
|
3345
|
-
// 计算正交投影到屏幕上的包围球的半径
|
|
3346
|
-
var screenCenter2 = screenCenter.toVector2();
|
|
3347
|
-
var screenPoint2 = screenPoint.toVector2();
|
|
3348
|
-
var screenRadius = screenCenter2.distance(screenPoint2);
|
|
3349
|
-
if (pointInCanvas.distance(screenCenter2) < screenRadius * 1.2) {
|
|
3350
|
-
position = worldCenter;
|
|
3351
|
-
}
|
|
3352
|
-
} else {
|
|
3353
|
-
position = ray.intersectSphere({
|
|
3354
|
-
center: worldCenter,
|
|
3355
|
-
radius: bounding.radius
|
|
3356
|
-
}, new Vector3());
|
|
3357
|
-
}
|
|
3358
|
-
break;
|
|
3359
|
-
case 2:
|
|
3360
|
-
{
|
|
3361
|
-
var triangles = bounding.triangles, backfaceCulling = bounding.backfaceCulling;
|
|
3362
|
-
var tmpPositions = [];
|
|
3363
|
-
var tmpPosition = void 0;
|
|
3364
|
-
for(var j = 0; j < triangles.length; j++){
|
|
3365
|
-
var triangle = triangles[j];
|
|
3366
|
-
var worldTriangle = {
|
|
3367
|
-
p0: worldMat4.projectPoint(triangle.p0, new Vector3()),
|
|
3368
|
-
p1: worldMat4.projectPoint(triangle.p1, new Vector3()),
|
|
3369
|
-
p2: worldMat4.projectPoint(triangle.p2, new Vector3())
|
|
3370
|
-
};
|
|
3371
|
-
tmpPosition = ray.intersectTriangle(worldTriangle, new Vector3(), backfaceCulling);
|
|
3372
|
-
if (tmpPosition) {
|
|
3373
|
-
tmpPositions.push(tmpPosition);
|
|
3374
|
-
}
|
|
3375
|
-
}
|
|
3376
|
-
// 仅保存距离相机最近的点
|
|
3377
|
-
if (tmpPositions.length > 0) {
|
|
3378
|
-
var lastDistance = void 0;
|
|
3379
|
-
tmpPositions.forEach(function(item) {
|
|
3380
|
-
var distance = ray.origin.distanceSquared(item);
|
|
3381
|
-
if (!lastDistance || distance < lastDistance) {
|
|
3382
|
-
lastDistance = distance;
|
|
3383
|
-
position = item;
|
|
3384
|
-
}
|
|
3385
|
-
});
|
|
3386
|
-
}
|
|
3387
|
-
break;
|
|
3388
|
-
}
|
|
3389
|
-
case 3:
|
|
3390
|
-
{
|
|
3391
|
-
var points = bounding.points, width1 = bounding.width;
|
|
3392
|
-
position = intersectRayLine(new Vector3(), pointInCanvas, points, width1 / 2, worldMat4, self.composition.camera);
|
|
3393
|
-
break;
|
|
3394
|
-
}
|
|
3395
|
-
}
|
|
3396
|
-
if (position) {
|
|
3397
|
-
hitPositions.push(position);
|
|
3398
|
-
// 缓存距离相机最近的 BoundingKey
|
|
3399
|
-
if (self.hitBounding) {
|
|
3400
|
-
var distance1 = ray.origin.distanceSquared(position);
|
|
3401
|
-
var lastDistance1 = ray.origin.distanceSquared(self.hitBounding.position);
|
|
3402
|
-
if (distance1 < lastDistance1) {
|
|
3403
|
-
self.hitBounding.key = key;
|
|
3404
|
-
self.hitBounding.position = position;
|
|
3405
|
-
}
|
|
3406
|
-
} else {
|
|
3407
|
-
self.hitBounding = {
|
|
3408
|
-
key: key,
|
|
3409
|
-
position: position
|
|
3410
|
-
};
|
|
3411
|
-
}
|
|
3412
|
-
}
|
|
3413
|
-
};
|
|
3414
|
-
var hitPositions = [];
|
|
3415
|
-
self.hitBounding = undefined;
|
|
3416
|
-
for(var _iterator = _create_for_of_iterator_helper_loose(boundingKeys), _step; !(_step = _iterator()).done;)_loop();
|
|
3417
|
-
if (hitPositions.length === 0) {
|
|
3418
|
-
self.hitBounding = undefined;
|
|
3419
|
-
}
|
|
3420
|
-
return hitPositions;
|
|
3421
|
-
},
|
|
3422
|
-
behavior: spec.InteractBehavior.NOTIFY
|
|
3423
|
-
};
|
|
3424
|
-
}
|
|
3425
|
-
};
|
|
3426
|
-
_create_class(GizmoVFXItem, [
|
|
3427
|
-
{
|
|
3428
|
-
key: "content",
|
|
3429
|
-
get: function get() {
|
|
3430
|
-
return this._content;
|
|
3431
|
-
},
|
|
3432
|
-
set: function set(content) {}
|
|
3433
|
-
}
|
|
3434
|
-
]);
|
|
3435
|
-
return GizmoVFXItem;
|
|
3436
|
-
}(VFXItem);
|
|
3409
|
+
GizmoComponent = __decorate([
|
|
3410
|
+
effectsClass("GizmoComponent")
|
|
3411
|
+
], GizmoComponent);
|
|
3437
3412
|
|
|
3438
3413
|
var editorRenderPassName = "editor-gizmo";
|
|
3439
3414
|
var frontRenderPassName = "front-gizmo";
|
|
@@ -3463,11 +3438,12 @@ var EditorGizmoPlugin = /*#__PURE__*/ function(AbstractPlugin) {
|
|
|
3463
3438
|
var targetMap = {};
|
|
3464
3439
|
for(var i = 0; i < items.length; i++){
|
|
3465
3440
|
var item = items[i];
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3441
|
+
var gizmoComponent = item.getComponent(GizmoComponent);
|
|
3442
|
+
if (gizmoComponent) {
|
|
3443
|
+
if (!targetMap[gizmoComponent.target]) {
|
|
3444
|
+
targetMap[gizmoComponent.target] = [];
|
|
3469
3445
|
}
|
|
3470
|
-
targetMap[
|
|
3446
|
+
targetMap[gizmoComponent.target].push(item);
|
|
3471
3447
|
}
|
|
3472
3448
|
}
|
|
3473
3449
|
composition.loaderData.gizmoTarget = targetMap;
|
|
@@ -3539,16 +3515,17 @@ var EditorGizmoPlugin = /*#__PURE__*/ function(AbstractPlugin) {
|
|
|
3539
3515
|
};
|
|
3540
3516
|
_proto.removeGizmoItem = function removeGizmoItem(composition, gizmoVFXItem) {
|
|
3541
3517
|
var _this = this;
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3518
|
+
var gizmoMesh = gizmoVFXItem.content;
|
|
3519
|
+
if (gizmoMesh && !gizmoMesh.isDestroyed) {
|
|
3520
|
+
gizmoMesh.dispose();
|
|
3521
|
+
if (gizmoMesh.name === GeometryType.FloorGrid.toString() || gizmoMesh.name === "Box") {
|
|
3522
|
+
this.getFrontRenderPass(composition.renderFrame).removeMesh(gizmoMesh);
|
|
3546
3523
|
} else {
|
|
3547
|
-
this.getEditorRenderPass(composition.renderFrame).removeMesh(
|
|
3524
|
+
this.getEditorRenderPass(composition.renderFrame).removeMesh(gizmoMesh);
|
|
3548
3525
|
}
|
|
3549
3526
|
}
|
|
3550
|
-
if (gizmoVFXItem.contents) {
|
|
3551
|
-
for(var _iterator = _create_for_of_iterator_helper_loose(gizmoVFXItem.contents), _step; !(_step = _iterator()).done;){
|
|
3527
|
+
if (gizmoVFXItem.getComponent(GizmoComponent).contents) {
|
|
3528
|
+
for(var _iterator = _create_for_of_iterator_helper_loose(gizmoVFXItem.getComponent(GizmoComponent).contents), _step; !(_step = _iterator()).done;){
|
|
3552
3529
|
var _step_value = _step.value, mesh = _step_value[0];
|
|
3553
3530
|
if (!mesh.isDestroyed) {
|
|
3554
3531
|
mesh.dispose();
|
|
@@ -3569,7 +3546,7 @@ var EditorGizmoPlugin = /*#__PURE__*/ function(AbstractPlugin) {
|
|
|
3569
3546
|
}
|
|
3570
3547
|
});
|
|
3571
3548
|
} else {
|
|
3572
|
-
var wireframeMesh = gizmoVFXItem.wireframeMesh;
|
|
3549
|
+
var wireframeMesh = gizmoVFXItem.getComponent(GizmoComponent).wireframeMesh;
|
|
3573
3550
|
if (wireframeMesh && !wireframeMesh.isDestroyed) {
|
|
3574
3551
|
destroyWireframeMesh(wireframeMesh);
|
|
3575
3552
|
this.getEditorRenderPass(composition.renderFrame).removeMesh(wireframeMesh);
|
|
@@ -3699,9 +3676,12 @@ var EditorGizmoPlugin = /*#__PURE__*/ function(AbstractPlugin) {
|
|
|
3699
3676
|
return EditorGizmoPlugin;
|
|
3700
3677
|
}(AbstractPlugin);
|
|
3701
3678
|
|
|
3702
|
-
registerPlugin("editor-gizmo", EditorGizmoPlugin,
|
|
3703
|
-
var version = "2.0.0-alpha.
|
|
3679
|
+
registerPlugin("editor-gizmo", EditorGizmoPlugin, VFXItem);
|
|
3680
|
+
var version = "2.0.0-alpha.13";
|
|
3704
3681
|
logger.info("plugin editor gizmo version: " + version);
|
|
3682
|
+
if (version !== version$1) {
|
|
3683
|
+
console.error("注意:请统一 Editor Gizmo 插件与 Player 版本,不统一的版本混用会有不可预知的后果!", "\nAttention: Please ensure the Editor Gizmo plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!");
|
|
3684
|
+
}
|
|
3705
3685
|
|
|
3706
|
-
export { DirectionLightData, GeometryType,
|
|
3686
|
+
export { DirectionLightData, GeometryType, GizmoComponent, GizmoSubType, createGeometry, version };
|
|
3707
3687
|
//# sourceMappingURL=index.mjs.map
|