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