@galacean/effects-plugin-editor-gizmo 1.0.0 → 1.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gizmo-vfx-item.d.ts +12 -10
- package/dist/index.js +245 -384
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.mjs +246 -385
- package/dist/index.mjs.map +1 -1
- package/dist/math-utils.d.ts +11 -0
- package/dist/raycast.d.ts +8 -6
- package/dist/shape.d.ts +2 -2
- package/dist/util.d.ts +3 -3
- package/package.json +3 -3
- package/dist/math/vec.d.ts +0 -46
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.0
|
|
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',
|
|
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
|
|
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
|
|
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
|
|
362
|
+
point.set(cos, 0, sin);
|
|
574
363
|
}
|
|
575
364
|
else if (plane === 'yz') {
|
|
576
|
-
point
|
|
365
|
+
point.set(0, cos, sin);
|
|
577
366
|
}
|
|
578
367
|
else {
|
|
579
|
-
point
|
|
368
|
+
point.set(cos, sin, 0);
|
|
580
369
|
}
|
|
581
|
-
|
|
582
|
-
points.push(
|
|
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: [
|
|
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
|
|
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 = [
|
|
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
|
|
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
|
|
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',
|
|
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 =
|
|
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 =
|
|
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
|
|
1220
|
-
|
|
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 =
|
|
1313
|
-
var point2 =
|
|
1314
|
-
var point3 =
|
|
1315
|
-
var point4 =
|
|
1316
|
-
var matrix =
|
|
1317
|
-
var result1 =
|
|
1318
|
-
var result2 =
|
|
1319
|
-
var result3 =
|
|
1320
|
-
var result4 =
|
|
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
|
-
|
|
1740
|
-
var
|
|
1741
|
-
var
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
result
|
|
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:
|
|
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 :
|
|
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',
|
|
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 :
|
|
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',
|
|
2296
|
-
material.setVector3('u_cameraPos',
|
|
2297
|
-
material.setVector3('u_center',
|
|
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 :
|
|
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',
|
|
2336
|
-
material.setMatrix('u_model',
|
|
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',
|
|
2366
|
-
material.setVector2('u_alpha',
|
|
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 =
|
|
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: [
|
|
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: [
|
|
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: [
|
|
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 射线与包围盒交点位置 |
|
|
2300
|
+
* @returns 射线与包围盒交点位置 | undefined
|
|
2421
2301
|
*/
|
|
2422
2302
|
function intersectRayLine(out, pointInCanvas, points, radius, worldMat4, camera) {
|
|
2423
2303
|
// 构造一个辐射半径边缘的点 radiusPoint
|
|
2424
|
-
var
|
|
2425
|
-
var
|
|
2426
|
-
|
|
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(
|
|
2434
|
-
var screenStart = [0,
|
|
2435
|
-
var screenEnd = [
|
|
2436
|
-
var screenRadiusPoint =
|
|
2437
|
-
|
|
2438
|
-
|
|
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, [
|
|
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
|
-
|
|
2450
|
-
|
|
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 =
|
|
2497
|
-
|
|
2498
|
-
var
|
|
2499
|
-
var
|
|
2500
|
-
var
|
|
2501
|
-
|
|
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 (
|
|
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 =
|
|
2754
|
-
var worldQuat =
|
|
2755
|
-
var
|
|
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:
|
|
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 ||
|
|
2630
|
+
var cameraPos = camera.position || new Vector3();
|
|
2767
2631
|
var itemPos = targetTransform.position;
|
|
2768
2632
|
var newPos = moveToPointWidthFixDistance(cameraPos, itemPos);
|
|
2769
|
-
targetTransform.setPosition.
|
|
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 =
|
|
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 =
|
|
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
|
|
2669
|
+
worldTransform.setPosition((position.x + width / 2) - padding, (position.y + height / 2) - padding, position.z);
|
|
2806
2670
|
localMat = worldTransform.getWorldMatrix();
|
|
2807
|
-
worldMat4 =
|
|
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',
|
|
2689
|
+
mesh.material.setVector2('u_alpha', new Vector2(0, 0));
|
|
2826
2690
|
}
|
|
2827
2691
|
else {
|
|
2828
|
-
mesh.material.setVector2('u_alpha',
|
|
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 =
|
|
2843
|
-
var worldQuat =
|
|
2844
|
-
var worldSca =
|
|
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 ||
|
|
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.
|
|
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 =
|
|
2878
|
-
var worldQuat =
|
|
2879
|
-
var worldSca =
|
|
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.
|
|
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 =
|
|
2921
|
-
var worldCenter =
|
|
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
|
-
|
|
2924
|
-
|
|
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
|
-
|
|
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
|
|
2954
|
-
localMat4 = localTransform.getWorldMatrix();
|
|
2955
|
-
var modelMat4 =
|
|
2956
|
-
|
|
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
|
|
2959
|
-
var
|
|
2960
|
-
var
|
|
2961
|
-
|
|
2962
|
-
|
|
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
|
|
2967
|
-
var
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
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
|
|
2980
|
-
|
|
2981
|
-
var screenRadius =
|
|
2982
|
-
if (
|
|
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 =
|
|
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 =
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
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 =
|
|
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(
|
|
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 =
|
|
3032
|
-
var lastDistance =
|
|
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.0";
|
|
3340
3201
|
console.info('[Galacean Effects Plugin Editor Gizmo] version: ' + version);
|
|
3341
3202
|
effects.registerPlugin('editor-gizmo', EditorGizmoPlugin, GizmoVFXItem);
|
|
3342
3203
|
|