@anov/3d 0.0.4-alpha23 → 0.0.4-alpha25
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/applicationApi.js +1 -1
- package/dist/applicationApi.js.map +1 -1
- package/dist/factory/3d.d.ts +51 -0
- package/dist/factory/3d.js +203 -0
- package/dist/factory/3d.js.map +1 -0
- package/dist/factory/globalData.d.ts +1 -0
- package/dist/factory/globalData.js +2 -0
- package/dist/factory/globalData.js.map +1 -0
- package/dist/factory/regionData.d.ts +26 -0
- package/dist/factory/regionData.js +130 -0
- package/dist/factory/regionData.js.map +1 -0
- package/dist/factory/unit/areaBoundingBox.d.ts +7 -0
- package/dist/factory/unit/areaBoundingBox.js +28 -0
- package/dist/factory/unit/areaBoundingBox.js.map +1 -0
- package/dist/factory/unit/circle.d.ts +15 -0
- package/dist/factory/unit/circle.js +88 -0
- package/dist/factory/unit/circle.js.map +1 -0
- package/dist/factory/unit/cylinder.d.ts +18 -0
- package/dist/factory/unit/cylinder.js +125 -0
- package/dist/factory/unit/cylinder.js.map +1 -0
- package/dist/factory/unit/glsl/wall/fragmentShader.glsl +30 -0
- package/dist/factory/unit/glsl/wall/vertexShader.glsl +6 -0
- package/dist/factory/unit/index.d.ts +2 -0
- package/dist/factory/unit/index.js +61 -0
- package/dist/factory/unit/index.js.map +1 -0
- package/dist/factory/unit/line.d.ts +13 -0
- package/dist/factory/unit/line.js +96 -0
- package/dist/factory/unit/line.js.map +1 -0
- package/dist/factory/unit/poi.d.ts +15 -0
- package/dist/factory/unit/poi.js +140 -0
- package/dist/factory/unit/poi.js.map +1 -0
- package/dist/factory/unit/point.d.ts +10 -0
- package/dist/factory/unit/point.js +71 -0
- package/dist/factory/unit/point.js.map +1 -0
- package/dist/factory/unit/wall.d.ts +14 -0
- package/dist/factory/unit/wall.js +113 -0
- package/dist/factory/unit/wall.js.map +1 -0
- package/dist/factory/utils/areaBoundingBox.d.ts +14 -0
- package/dist/factory/utils/areaBoundingBox.js +39 -0
- package/dist/factory/utils/areaBoundingBox.js.map +1 -0
- package/dist/factory/utils/base64.d.ts +1 -0
- package/dist/factory/utils/base64.js +2 -0
- package/dist/factory/utils/base64.js.map +1 -0
- package/dist/factory/utils/finirMaterial.d.ts +3 -0
- package/dist/factory/utils/finirMaterial.js +39 -0
- package/dist/factory/utils/finirMaterial.js.map +1 -0
- package/dist/factory/utils/fontMesh.d.ts +10 -0
- package/dist/factory/utils/fontMesh.js +48 -0
- package/dist/factory/utils/fontMesh.js.map +1 -0
- package/dist/factory/utils/index.d.ts +2 -0
- package/dist/factory/utils/index.js +24 -0
- package/dist/factory/utils/index.js.map +1 -0
- package/dist/factory/utils/switchMaterial.d.ts +17 -0
- package/dist/factory/utils/switchMaterial.js +108 -0
- package/dist/factory/utils/switchMaterial.js.map +1 -0
- package/dist/module/camera/index.js +15 -7
- package/dist/module/camera/index.js.map +1 -1
- package/dist/module/environment/index.d.ts +4 -1
- package/dist/module/environment/index.js +7 -2
- package/dist/module/environment/index.js.map +1 -1
- package/dist/module/environment/time/index.d.ts +3 -1
- package/dist/module/environment/time/index.js.map +1 -1
- package/dist/module/model/index.js +6 -0
- package/dist/module/model/index.js.map +1 -1
- package/dist/module/scene/index.d.ts +7 -3
- package/dist/module/scene/index.js +66 -36
- package/dist/module/scene/index.js.map +1 -1
- package/dist/sdkEntry.d.ts +5 -2
- package/dist/sdkEntry.js +86 -64
- package/dist/sdkEntry.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Color","MeshStandardMaterial","ShaderMaterial","Vector3","finirMaterialV2","uniforms","edgeColor","value","edgeThickness","reflectionStrength","vertexShader","fragmentShader","transparent","depthWrite","finirMaterialV1","opacity","onBeforeCompile","shader","rimColor","rimPower","replace","join"],"sources":["../../../src/factory/utils/finirMaterial.ts"],"sourcesContent":["import { Color, MeshStandardMaterial, ShaderMaterial, Vector3 } from '@anov/3d-core'\n\nexport const finirMaterialV2 = new ShaderMaterial({\n uniforms: {\n // 在这里定义uniform变量,用于控制透明度、边缘和反光效果\n edgeColor: { value: new Vector3(1.0, 0.0, 0.0) }, // 边缘颜色\n edgeThickness: { value: 0.03 }, // 边缘厚度0.05\n reflectionStrength: { value: 100 }, // 反光强度0.9\n },\n vertexShader: `\n varying vec3 vNormal;\n\n void main() {\n vNormal = normal;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec3 vNormal;\n uniform vec3 edgeColor;\n uniform float edgeThickness;\n uniform float reflectionStrength;\n\n void main() {\n // 计算透明度\n float alpha = 0.9; // 透明度的基础值\n\n // 计算边缘效果\n float edge = fwidth(length(vNormal));\n alpha *= smoothstep(0.0, edgeThickness, edge);\n\n // 计算反光效果\n vec3 reflection = reflect(normalize(-vNormal), vec3(0.455, 0.749, 0.890));\n float reflectionIntensity = max(dot(reflection, normalize(-vNormal)), 0.0);\n vec3 reflectionColor = reflectionStrength * reflectionIntensity * edgeColor;\n\n // 最终颜色设置为\"#74bfe3\"\n vec3 finalColor = vec3(0.8, 0.25, 0.145); // \"#74bfe3\"的RGB值\n finalColor += reflectionColor; // 添加反光效果\n\n // 设置透明度\n gl_FragColor = vec4(finalColor, alpha);\n }\n `,\n transparent: true,\n depthWrite: false,\n})\n\nexport const finirMaterialV1 = new MeshStandardMaterial({ /// /这个没有沟边粗细\n opacity: 0.0,\n transparent: true,\n depthWrite: false,\n})\n\nfinirMaterialV1.onBeforeCompile = (shader) => {\n shader.uniforms.rimColor = { value: new Color('#99C9E3') }\n shader.uniforms.rimPower = { value: 0.9 }\n shader.fragmentShader = shader.fragmentShader.replace(\n 'void main() {',\n [\n 'uniform vec3 rimColor;',\n ' uniform float rimPower;',\n 'void main() {',\n ].join('\\n'),\n )\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <dithering_fragment>',\n `#include <dithering_fragment>\n float dotNV = 1.0-saturate( dot( normal, geometry.viewDir ) );\n gl_FragColor.rgb += rimPower*dotNV*rimColor;\n vec3 fresnelall =rimPower*dotNV*rimColor;\n gl_FragColor.a +=(fresnelall.r+fresnelall.g+fresnelall.b)/3.;`,\n\n )\n}"],"mappings":"AAAA,SAASA,KAAK,EAAEC,oBAAoB,EAAEC,cAAc,EAAEC,OAAO,QAAQ,eAAe;AAEpF,OAAO,IAAMC,eAAe,GAAG,IAAIF,cAAc,CAAC;EAChDG,QAAQ,EAAE;IACR;IACAC,SAAS,EAAE;MAAEC,KAAK,EAAE,IAAIJ,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAAE,CAAC;IAAE;IAClDK,aAAa,EAAE;MAAED,KAAK,EAAE;IAAK,CAAC;IAAE;IAChCE,kBAAkB,EAAE;MAAEF,KAAK,EAAE;IAAI,CAAC,CAAE;EACtC,CAAC;;EACDG,YAAY,qRAOK;EACjBC,cAAc,g6CA0BG;EACjBC,WAAW,EAAE,IAAI;EACjBC,UAAU,EAAE;AACd,CAAC,CAAC;AAEF,OAAO,IAAMC,eAAe,GAAG,IAAIb,oBAAoB,CAAC;EAAE;EACxDc,OAAO,EAAE,GAAG;EACZH,WAAW,EAAE,IAAI;EACjBC,UAAU,EAAE;AACd,CAAC,CAAC;AAEFC,eAAe,CAACE,eAAe,GAAG,UAACC,MAAM,EAAK;EAC5CA,MAAM,CAACZ,QAAQ,CAACa,QAAQ,GAAG;IAAEX,KAAK,EAAE,IAAIP,KAAK,CAAC,SAAS;EAAE,CAAC;EAC1DiB,MAAM,CAACZ,QAAQ,CAACc,QAAQ,GAAG;IAAEZ,KAAK,EAAE;EAAI,CAAC;EACzCU,MAAM,CAACN,cAAc,GAAGM,MAAM,CAACN,cAAc,CAACS,OAAO,CACnD,eAAe,EACf,CACE,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,CAChB,CAACC,IAAI,CAAC,IAAI,CAAC,CACb;EACDJ,MAAM,CAACN,cAAc,GAAGM,MAAM,CAACN,cAAc,CAACS,OAAO,CACnD,+BAA+B,0RAOhC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Vector3 } from '@anov/3d-core';
|
|
2
|
+
import { Color, Mesh } from '@anov/3d-core';
|
|
3
|
+
declare type FontMeshOption = {
|
|
4
|
+
position: Vector3;
|
|
5
|
+
color?: Color;
|
|
6
|
+
size?: number;
|
|
7
|
+
rotate?: number;
|
|
8
|
+
};
|
|
9
|
+
declare const createFontMesh: (text: string, options: FontMeshOption) => Promise<Mesh>;
|
|
10
|
+
export default createFontMesh;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
+
import { Color, Mesh, MeshBasicMaterial, lib } from '@anov/3d-core';
|
|
9
|
+
var FontLoader = lib.FontLoader,
|
|
10
|
+
TextGeometry = lib.TextGeometry;
|
|
11
|
+
var Font = /*#__PURE__*/function () {
|
|
12
|
+
function Font() {
|
|
13
|
+
_classCallCheck(this, Font);
|
|
14
|
+
_defineProperty(this, "font", void 0);
|
|
15
|
+
this.font = null;
|
|
16
|
+
}
|
|
17
|
+
_createClass(Font, [{
|
|
18
|
+
key: "createText",
|
|
19
|
+
value: function createText(text, options) {
|
|
20
|
+
var _this = this;
|
|
21
|
+
return new Promise(function (res) {
|
|
22
|
+
var loader = new FontLoader();
|
|
23
|
+
loader.load('./font.json', function (font) {
|
|
24
|
+
var _options$size;
|
|
25
|
+
_this.font = font;
|
|
26
|
+
var geometry = new TextGeometry(text, {
|
|
27
|
+
font: _this.font,
|
|
28
|
+
size: (_options$size = options.size) !== null && _options$size !== void 0 ? _options$size : 10,
|
|
29
|
+
height: 0.1
|
|
30
|
+
});
|
|
31
|
+
var mesh = new Mesh(geometry, new MeshBasicMaterial({
|
|
32
|
+
depthTest: true,
|
|
33
|
+
color: new Color('#000')
|
|
34
|
+
}));
|
|
35
|
+
mesh.position.copy(options.position);
|
|
36
|
+
res(mesh);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}]);
|
|
41
|
+
return Font;
|
|
42
|
+
}();
|
|
43
|
+
var font = new Font();
|
|
44
|
+
var createFontMesh = function createFontMesh(text, options) {
|
|
45
|
+
return font.createText(text, options);
|
|
46
|
+
};
|
|
47
|
+
export default createFontMesh;
|
|
48
|
+
//# sourceMappingURL=fontMesh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Color","Mesh","MeshBasicMaterial","lib","FontLoader","TextGeometry","Font","font","text","options","Promise","res","loader","load","geometry","size","height","mesh","depthTest","color","position","copy","createFontMesh","createText"],"sources":["../../../src/factory/utils/fontMesh.ts"],"sourcesContent":["import type { Vector3 } from '@anov/3d-core'\nimport { Color, Mesh, MeshBasicMaterial, lib } from '@anov/3d-core'\n\nconst { FontLoader, TextGeometry } = lib\n\ntype FontMeshOption = {\n position: Vector3\n color?: Color\n size?: number\n rotate?: number\n}\n\nclass Font {\n font: lib.Font | null\n\n constructor() {\n this.font = null\n }\n\n createText(text: string, options: FontMeshOption) {\n return new Promise((res) => {\n const loader = new FontLoader()\n loader.load('./font.json', (font) => {\n this.font = font\n\n const geometry = new TextGeometry(text, {\n font: this.font,\n size: options.size ?? 10,\n height: 0.1,\n })\n\n const mesh = new Mesh(geometry, new MeshBasicMaterial({\n depthTest: true,\n color: new Color('#000'),\n }))\n\n mesh.position.copy(options.position)\n res(mesh)\n })\n })\n }\n}\n\nconst font = new Font()\n\nconst createFontMesh = (text: string, options: FontMeshOption) => {\n return font.createText(text, options) as Promise<Mesh>\n}\n\nexport default createFontMesh\n"],"mappings":";;;;;;;AACA,SAASA,KAAK,EAAEC,IAAI,EAAEC,iBAAiB,EAAEC,GAAG,QAAQ,eAAe;AAEnE,IAAQC,UAAU,GAAmBD,GAAG,CAAhCC,UAAU;EAAEC,YAAY,GAAKF,GAAG,CAApBE,YAAY;AAAQ,IASlCC,IAAI;EAGR,gBAAc;IAAA;IAAA;IACZ,IAAI,CAACC,IAAI,GAAG,IAAI;EAClB;EAAC;IAAA;IAAA,OAED,oBAAWC,IAAY,EAAEC,OAAuB,EAAE;MAAA;MAChD,OAAO,IAAIC,OAAO,CAAC,UAACC,GAAG,EAAK;QAC1B,IAAMC,MAAM,GAAG,IAAIR,UAAU,EAAE;QAC/BQ,MAAM,CAACC,IAAI,CAAC,aAAa,EAAE,UAACN,IAAI,EAAK;UAAA;UACnC,KAAI,CAACA,IAAI,GAAGA,IAAI;UAEhB,IAAMO,QAAQ,GAAG,IAAIT,YAAY,CAACG,IAAI,EAAE;YACtCD,IAAI,EAAE,KAAI,CAACA,IAAI;YACfQ,IAAI,mBAAEN,OAAO,CAACM,IAAI,yDAAI,EAAE;YACxBC,MAAM,EAAE;UACV,CAAC,CAAC;UAEF,IAAMC,IAAI,GAAG,IAAIhB,IAAI,CAACa,QAAQ,EAAE,IAAIZ,iBAAiB,CAAC;YACpDgB,SAAS,EAAE,IAAI;YACfC,KAAK,EAAE,IAAInB,KAAK,CAAC,MAAM;UACzB,CAAC,CAAC,CAAC;UAEHiB,IAAI,CAACG,QAAQ,CAACC,IAAI,CAACZ,OAAO,CAACW,QAAQ,CAAC;UACpCT,GAAG,CAACM,IAAI,CAAC;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EAAC;EAAA;AAAA;AAGH,IAAMV,IAAI,GAAG,IAAID,IAAI,EAAE;AAEvB,IAAMgB,cAAc,GAAG,SAAjBA,cAAc,CAAId,IAAY,EAAEC,OAAuB,EAAK;EAChE,OAAOF,IAAI,CAACgB,UAAU,CAACf,IAAI,EAAEC,OAAO,CAAC;AACvC,CAAC;AAED,eAAea,cAAc"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Vector3 } from '@anov/3d-core';
|
|
2
|
+
export var debounce = function debounce(fn) {
|
|
3
|
+
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;
|
|
4
|
+
var timer;
|
|
5
|
+
return function () {
|
|
6
|
+
var _this = this;
|
|
7
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
8
|
+
args[_key] = arguments[_key];
|
|
9
|
+
}
|
|
10
|
+
clearTimeout(timer);
|
|
11
|
+
timer = setTimeout(function () {
|
|
12
|
+
fn.apply(_this, args);
|
|
13
|
+
}, delay);
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export var lookAtOnYAxis = function lookAtOnYAxis(mesh, targetPosition) {
|
|
17
|
+
var direction = new Vector3().subVectors(targetPosition, mesh.position);
|
|
18
|
+
direction.y = 0;
|
|
19
|
+
direction.normalize();
|
|
20
|
+
var rotationY = Math.atan2(-direction.z, direction.x);
|
|
21
|
+
rotationY -= Math.PI / 2;
|
|
22
|
+
mesh.rotation.y = rotationY + Math.PI;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Vector3","debounce","fn","delay","timer","args","clearTimeout","setTimeout","apply","lookAtOnYAxis","mesh","targetPosition","direction","subVectors","position","y","normalize","rotationY","Math","atan2","z","x","PI","rotation"],"sources":["../../../src/factory/utils/index.ts"],"sourcesContent":["import { Vector3 } from '@anov/3d-core'\n\nexport const debounce = (fn: Function, delay = 20) => {\n let timer: number\n\n return function (this: any, ...args: any[]) {\n clearTimeout(timer)\n\n timer = setTimeout(() => {\n fn.apply(this, args)\n }, delay) as unknown as number\n }\n}\n\nexport const lookAtOnYAxis = (mesh, targetPosition) => {\n const direction = new Vector3().subVectors(targetPosition, mesh.position)\n direction.y = 0\n direction.normalize()\n\n let rotationY = Math.atan2(-direction.z, direction.x)\n\n rotationY -= Math.PI / 2\n\n mesh.rotation.y = rotationY + Math.PI\n}"],"mappings":"AAAA,SAASA,OAAO,QAAQ,eAAe;AAEvC,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQ,CAAIC,EAAY,EAAiB;EAAA,IAAfC,KAAK,uEAAG,EAAE;EAC/C,IAAIC,KAAa;EAEjB,OAAO,YAAqC;IAAA;IAAA,kCAAbC,IAAI;MAAJA,IAAI;IAAA;IACjCC,YAAY,CAACF,KAAK,CAAC;IAEnBA,KAAK,GAAGG,UAAU,CAAC,YAAM;MACvBL,EAAE,CAACM,KAAK,CAAC,KAAI,EAAEH,IAAI,CAAC;IACtB,CAAC,EAAEF,KAAK,CAAsB;EAChC,CAAC;AACH,CAAC;AAED,OAAO,IAAMM,aAAa,GAAG,SAAhBA,aAAa,CAAIC,IAAI,EAAEC,cAAc,EAAK;EACrD,IAAMC,SAAS,GAAG,IAAIZ,OAAO,EAAE,CAACa,UAAU,CAACF,cAAc,EAAED,IAAI,CAACI,QAAQ,CAAC;EACzEF,SAAS,CAACG,CAAC,GAAG,CAAC;EACfH,SAAS,CAACI,SAAS,EAAE;EAErB,IAAIC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACP,SAAS,CAACQ,CAAC,EAAER,SAAS,CAACS,CAAC,CAAC;EAErDJ,SAAS,IAAIC,IAAI,CAACI,EAAE,GAAG,CAAC;EAExBZ,IAAI,CAACa,QAAQ,CAACR,CAAC,GAAGE,SAAS,GAAGC,IAAI,CAACI,EAAE;AACvC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Material, Object3D } from '@anov/3d-core';
|
|
2
|
+
declare type SwitchMaterialOptions = {
|
|
3
|
+
speed?: number;
|
|
4
|
+
start?: number;
|
|
5
|
+
end?: number;
|
|
6
|
+
callback?: () => void;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* todo 代码合并
|
|
10
|
+
* @param mesh
|
|
11
|
+
* @param material
|
|
12
|
+
* @param options
|
|
13
|
+
*/
|
|
14
|
+
declare const switchMaterialV2: (mesh: Object3D<import("@anov/3d-core").Event> & {
|
|
15
|
+
material: Material;
|
|
16
|
+
}, material: Material, options?: SwitchMaterialOptions) => void;
|
|
17
|
+
export default switchMaterialV2;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Vector3, use } from '@anov/3d-core';
|
|
2
|
+
var switchMaterial = function switchMaterial(mesh, material, options) {
|
|
3
|
+
var lastMaterial = mesh.material.clone();
|
|
4
|
+
var currentMaterial = mesh.material.clone();
|
|
5
|
+
var _ref = options || {},
|
|
6
|
+
_ref$speed = _ref.speed,
|
|
7
|
+
speed = _ref$speed === void 0 ? 10 : _ref$speed,
|
|
8
|
+
_ref$start = _ref.start,
|
|
9
|
+
start = _ref$start === void 0 ? 0 : _ref$start,
|
|
10
|
+
_ref$end = _ref.end,
|
|
11
|
+
end = _ref$end === void 0 ? 100 : _ref$end;
|
|
12
|
+
currentMaterial.transparent = true;
|
|
13
|
+
var oldShader;
|
|
14
|
+
currentMaterial.onBeforeCompile = function (shader) {
|
|
15
|
+
oldShader = shader;
|
|
16
|
+
shader.uniforms.time = {
|
|
17
|
+
value: 0.0
|
|
18
|
+
};
|
|
19
|
+
shader.uniforms.min_length = {
|
|
20
|
+
value: start
|
|
21
|
+
};
|
|
22
|
+
shader.uniforms.speed = {
|
|
23
|
+
value: 1.0
|
|
24
|
+
};
|
|
25
|
+
shader.vertexShader = shader.vertexShader.replace('void main() {', ['varying vec4 v_position;', 'varying vec3 vWorldPosition; ', 'void main() {', ' vec4 worldPosition1 = modelMatrix * vec4(position, 1.0);', ' vWorldPosition = worldPosition1.xyz;', ' v_position = vec4(position, 1.0); '].join('\n'));
|
|
26
|
+
shader.fragmentShader = shader.fragmentShader.replace('void main() {', "\n varying vec4 v_position;\n uniform float time;\n uniform float min_length;\n uniform float speed;\n varying vec3 vWorldPosition;\n void main() {\n ");
|
|
27
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>', "\n #include <dithering_fragment>\n float median = min_length + time * speed;\n if(vWorldPosition.x < median) {\n gl_FragColor.a = 0.0;\n }\n ");
|
|
28
|
+
};
|
|
29
|
+
mesh.material = currentMaterial;
|
|
30
|
+
var cancellation = use.useframe(function () {
|
|
31
|
+
if (oldShader) {
|
|
32
|
+
oldShader.uniforms.time.value += speed;
|
|
33
|
+
var worldPosition = new Vector3();
|
|
34
|
+
mesh.getWorldPosition(worldPosition);
|
|
35
|
+
if (worldPosition.x < start + oldShader.uniforms.time.value) currentMaterial.depthWrite = false;
|
|
36
|
+
if (oldShader.uniforms.time.value > end) {
|
|
37
|
+
(options === null || options === void 0 ? void 0 : options.callback) && options.callback();
|
|
38
|
+
setTimeout(function () {
|
|
39
|
+
mesh.material = lastMaterial;
|
|
40
|
+
oldShader.uniforms.time.value = 0;
|
|
41
|
+
}, 100);
|
|
42
|
+
cancellation();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* todo 代码合并
|
|
50
|
+
* @param mesh
|
|
51
|
+
* @param material
|
|
52
|
+
* @param options
|
|
53
|
+
*/
|
|
54
|
+
var switchMaterialV2 = function switchMaterialV2(mesh, material, options) {
|
|
55
|
+
var lastMaterial = mesh.material.clone();
|
|
56
|
+
var currentMaterial = mesh.material.clone();
|
|
57
|
+
var _ref2 = options || {},
|
|
58
|
+
_ref2$speed = _ref2.speed,
|
|
59
|
+
speed = _ref2$speed === void 0 ? 10 : _ref2$speed,
|
|
60
|
+
_ref2$start = _ref2.start,
|
|
61
|
+
start = _ref2$start === void 0 ? 0 : _ref2$start,
|
|
62
|
+
_ref2$end = _ref2.end,
|
|
63
|
+
end = _ref2$end === void 0 ? 100 : _ref2$end;
|
|
64
|
+
currentMaterial.transparent = true;
|
|
65
|
+
var oldShader;
|
|
66
|
+
currentMaterial.onBeforeCompile = function (shader) {
|
|
67
|
+
oldShader = shader;
|
|
68
|
+
shader.uniforms.time = {
|
|
69
|
+
value: 0.0
|
|
70
|
+
};
|
|
71
|
+
shader.uniforms.min_length = {
|
|
72
|
+
value: 0
|
|
73
|
+
};
|
|
74
|
+
shader.uniforms.speed = {
|
|
75
|
+
value: 1.0
|
|
76
|
+
};
|
|
77
|
+
shader.uniforms.center = {
|
|
78
|
+
value: {
|
|
79
|
+
x: 0,
|
|
80
|
+
y: 0,
|
|
81
|
+
z: 0
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
shader.vertexShader = shader.vertexShader.replace('void main() {', ['varying vec4 v_position;', 'varying vec3 vWorldPosition; ', 'void main() {', ' vec4 worldPosition1 = modelMatrix * vec4(position, 1.0);', ' vWorldPosition = worldPosition1.xyz;', ' v_position = vec4(position, 1.0); '].join('\n'));
|
|
85
|
+
shader.fragmentShader = shader.fragmentShader.replace('void main() {', "\n varying vec4 v_position;\n uniform float time;\n uniform float center;\n uniform float min_length;\n uniform float speed;\n varying vec3 vWorldPosition;\n void main() {\n ");
|
|
86
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>', "\n #include <dithering_fragment>\n float median = min_length + time * speed;\n\n if(distance(vec3(vWorldPosition.x,0,vWorldPosition.z), vec3(0,0,0)) < median) {\n gl_FragColor.a = 0.0;\n }\n ");
|
|
87
|
+
};
|
|
88
|
+
mesh.material = currentMaterial;
|
|
89
|
+
var cancellation = use.useframe(function () {
|
|
90
|
+
if (oldShader) {
|
|
91
|
+
oldShader.uniforms.time.value += speed;
|
|
92
|
+
var worldPosition = new Vector3();
|
|
93
|
+
mesh.getWorldPosition(worldPosition);
|
|
94
|
+
worldPosition.distanceTo(new Vector3(0, 0, 0));
|
|
95
|
+
if (worldPosition.distanceTo(new Vector3(0, 0, 0)) < oldShader.uniforms.time.value) currentMaterial.depthWrite = false;
|
|
96
|
+
if (oldShader.uniforms.time.value > end) {
|
|
97
|
+
(options === null || options === void 0 ? void 0 : options.callback) && options.callback();
|
|
98
|
+
setTimeout(function () {
|
|
99
|
+
mesh.material = lastMaterial;
|
|
100
|
+
oldShader.uniforms.time.value = 0;
|
|
101
|
+
}, 100);
|
|
102
|
+
cancellation();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
export default switchMaterialV2;
|
|
108
|
+
//# sourceMappingURL=switchMaterial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Vector3","use","switchMaterial","mesh","material","options","lastMaterial","clone","currentMaterial","speed","start","end","transparent","oldShader","onBeforeCompile","shader","uniforms","time","value","min_length","vertexShader","replace","join","fragmentShader","cancellation","useframe","worldPosition","getWorldPosition","x","depthWrite","callback","setTimeout","switchMaterialV2","center","y","z","distanceTo"],"sources":["../../../src/factory/utils/switchMaterial.ts"],"sourcesContent":["import type { Material, Object3D, Shader } from '@anov/3d-core'\nimport { Vector3, use } from '@anov/3d-core'\n\ntype SwitchMaterialOptions = {\n speed?: number\n start?: number\n end?: number\n callback?: () => void\n}\n\nconst switchMaterial = (mesh: Object3D & { material: Material }, material: Material, options?: SwitchMaterialOptions) => {\n const lastMaterial = mesh.material.clone()\n const currentMaterial = mesh.material.clone()\n\n const { speed = 10, start = 0, end = 100 } = options || {}\n\n currentMaterial.transparent = true\n\n let oldShader: Shader\n\n currentMaterial.onBeforeCompile = (shader) => {\n oldShader = shader\n shader.uniforms.time = { value: 0.0 }\n shader.uniforms.min_length = { value: start }\n shader.uniforms.speed = { value: 1.0 }\n shader.vertexShader = shader.vertexShader.replace(\n 'void main() {',\n [\n 'varying vec4 v_position;',\n 'varying vec3 vWorldPosition; ',\n 'void main() {',\n ' vec4 worldPosition1 = modelMatrix * vec4(position, 1.0);',\n ' vWorldPosition = worldPosition1.xyz;',\n ' v_position = vec4(position, 1.0); ',\n ].join('\\n'),\n )\n shader.fragmentShader = shader.fragmentShader.replace('void main() {',\n `\n varying vec4 v_position;\n uniform float time;\n uniform float min_length;\n uniform float speed;\n varying vec3 vWorldPosition;\n void main() {\n `)\n\n shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>',\n `\n #include <dithering_fragment>\n float median = min_length + time * speed;\n if(vWorldPosition.x < median) {\n gl_FragColor.a = 0.0;\n }\n `)\n }\n\n mesh.material = currentMaterial\n\n const cancellation = use.useframe(() => {\n if (oldShader) {\n oldShader.uniforms.time.value += speed\n\n const worldPosition = new Vector3()\n\n mesh.getWorldPosition(worldPosition)\n\n if (worldPosition.x < start + oldShader.uniforms.time.value)\n currentMaterial.depthWrite = false\n\n if (oldShader.uniforms.time.value > end) {\n options?.callback && options.callback()\n\n setTimeout(() => {\n mesh.material = lastMaterial\n oldShader.uniforms.time.value = 0\n }, 100)\n\n cancellation()\n }\n }\n })\n}\n\n/**\n * todo 代码合并\n * @param mesh\n * @param material\n * @param options\n */\nconst switchMaterialV2 = (mesh: Object3D & { material: Material }, material: Material, options?: SwitchMaterialOptions) => {\n const lastMaterial = mesh.material.clone()\n const currentMaterial = mesh.material.clone()\n\n const { speed = 10, start = 0, end = 100 } = options || {}\n\n currentMaterial.transparent = true\n\n let oldShader: Shader\n\n currentMaterial.onBeforeCompile = (shader) => {\n oldShader = shader\n shader.uniforms.time = { value: 0.0 }\n shader.uniforms.min_length = { value: 0 }\n shader.uniforms.speed = { value: 1.0 }\n shader.uniforms.center = { value: { x: 0, y: 0, z: 0 } }\n shader.vertexShader = shader.vertexShader.replace(\n 'void main() {',\n [\n 'varying vec4 v_position;',\n 'varying vec3 vWorldPosition; ',\n 'void main() {',\n ' vec4 worldPosition1 = modelMatrix * vec4(position, 1.0);',\n ' vWorldPosition = worldPosition1.xyz;',\n ' v_position = vec4(position, 1.0); ',\n ].join('\\n'),\n )\n shader.fragmentShader = shader.fragmentShader.replace('void main() {',\n `\n varying vec4 v_position;\n uniform float time;\n uniform float center;\n uniform float min_length;\n uniform float speed;\n varying vec3 vWorldPosition;\n void main() {\n `)\n\n shader.fragmentShader = shader.fragmentShader.replace('#include <dithering_fragment>',\n `\n #include <dithering_fragment>\n float median = min_length + time * speed;\n\n if(distance(vec3(vWorldPosition.x,0,vWorldPosition.z), vec3(0,0,0)) < median) {\n gl_FragColor.a = 0.0;\n }\n `)\n }\n\n mesh.material = currentMaterial\n\n const cancellation = use.useframe(() => {\n if (oldShader) {\n oldShader.uniforms.time.value += speed\n\n const worldPosition = new Vector3()\n\n mesh.getWorldPosition(worldPosition)\n\n worldPosition.distanceTo(new Vector3(0, 0, 0))\n\n if (worldPosition.distanceTo(new Vector3(0, 0, 0)) < oldShader.uniforms.time.value)\n currentMaterial.depthWrite = false\n\n if (oldShader.uniforms.time.value > end) {\n options?.callback && options.callback()\n\n setTimeout(() => {\n mesh.material = lastMaterial\n oldShader.uniforms.time.value = 0\n }, 100)\n\n cancellation()\n }\n }\n })\n}\n\nexport default switchMaterialV2"],"mappings":"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"}
|
|
@@ -141,12 +141,12 @@ var Camera = /*#__PURE__*/function () {
|
|
|
141
141
|
var _this2$caclCurrentPos = _this2.caclCurrentPos(currentPos, 0),
|
|
142
142
|
lastPosition = _this2$caclCurrentPos.lastPosition,
|
|
143
143
|
lastLookat = _this2$caclCurrentPos.lastLookat;
|
|
144
|
-
_this2.moveCameraTo(lastPosition, lastLookat, moveOptions());
|
|
144
|
+
_this2.moveCameraTo(lastPosition, lastLookat, pitch, moveOptions());
|
|
145
145
|
} else {
|
|
146
146
|
var _currentPos = position;
|
|
147
147
|
var _lastPosition = _this2.caclSingleCoordinate(_this2.controls.target, _this2.camera.position, new Vector3().fromArray(_currentPos));
|
|
148
148
|
var _lastLookat = _this2.caclTargetByPitch(0, new Vector3().fromArray(_currentPos), _lastPosition);
|
|
149
|
-
_this2.moveCameraTo(_lastPosition, _lastLookat, moveOptions());
|
|
149
|
+
_this2.moveCameraTo(_lastPosition, _lastLookat, pitch, moveOptions());
|
|
150
150
|
}
|
|
151
151
|
});
|
|
152
152
|
}
|
|
@@ -161,7 +161,7 @@ var Camera = /*#__PURE__*/function () {
|
|
|
161
161
|
var _this3 = this;
|
|
162
162
|
return new Promise(function (res, _) {
|
|
163
163
|
var _ref3;
|
|
164
|
-
_this3.moveCameraTo(new Vector3(params.position[0], params.position[1], params.position[2]), new Vector3(params.target[0], params.target[1], params.target[2]), {
|
|
164
|
+
_this3.moveCameraTo(new Vector3(params.position[0], params.position[1], params.position[2]), new Vector3(params.target[0], params.target[1], params.target[2]), 0, {
|
|
165
165
|
duration: (_ref3 = params.duration && params.duration * 1000) !== null && _ref3 !== void 0 ? _ref3 : 1000,
|
|
166
166
|
onUpdate: function onUpdate(_ref4) {
|
|
167
167
|
var position = _ref4.position,
|
|
@@ -206,8 +206,10 @@ var Camera = /*#__PURE__*/function () {
|
|
|
206
206
|
*/
|
|
207
207
|
}, {
|
|
208
208
|
key: "moveCameraTo",
|
|
209
|
-
value: function moveCameraTo(position, target
|
|
209
|
+
value: function moveCameraTo(position, target) {
|
|
210
210
|
var _this4 = this;
|
|
211
|
+
var pitch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
212
|
+
var options = arguments.length > 3 ? arguments[3] : undefined;
|
|
211
213
|
var currentPoition = this.camera.position.clone();
|
|
212
214
|
var currentPositionInterpolation = new Vector3();
|
|
213
215
|
if ((options === null || options === void 0 ? void 0 : options.duration) === 0) {
|
|
@@ -218,18 +220,24 @@ var Camera = /*#__PURE__*/function () {
|
|
|
218
220
|
}
|
|
219
221
|
new TWEEN.Tween({
|
|
220
222
|
t: 0,
|
|
221
|
-
lookat: this.controls.target.clone()
|
|
223
|
+
lookat: this.controls.target.clone(),
|
|
224
|
+
p: 0
|
|
222
225
|
}).to({
|
|
223
226
|
t: 1,
|
|
224
|
-
lookat: target
|
|
227
|
+
lookat: target,
|
|
228
|
+
p: -this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)
|
|
225
229
|
}, (options === null || options === void 0 ? void 0 : options.duration) || 1000).onStart(function () {
|
|
226
230
|
(options === null || options === void 0 ? void 0 : options.onStart) && options.onStart();
|
|
227
231
|
_this4.controls.enabled = false;
|
|
228
232
|
_this4.isTransitionPeriod = true;
|
|
229
233
|
}).easing(TWEEN.Easing.Quadratic.InOut).onUpdate(function (_ref5) {
|
|
230
234
|
var t = _ref5.t,
|
|
231
|
-
lookat = _ref5.lookat
|
|
235
|
+
lookat = _ref5.lookat,
|
|
236
|
+
p = _ref5.p;
|
|
232
237
|
_this4.controls.target.copy(lookat);
|
|
238
|
+
if (pitch)
|
|
239
|
+
// @ts-ignore
|
|
240
|
+
_this4.camera.rotationParent.x = p;
|
|
233
241
|
var currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t);
|
|
234
242
|
_this4.camera.position.copy(currentPosition);
|
|
235
243
|
(options === null || options === void 0 ? void 0 : options.onUpdate) && options.onUpdate({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Box3","MathUtils","Vector3","TWEEN","MessageType","sendToMessage","EMessageStatus","Camera","camera","controls","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","addEventListener","isTransitionPeriod","lookat","Event","Success","undefined","toArray","params","Promise","res","duration","moveOptions","onUpdate","onComplate","isTrigger","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","Tween","t","to","onStart","enabled","easing","Easing","Quadratic","InOut","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../src/module/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera } from '@anov/3d-core'\nimport { Box3, MathUtils, Vector3 } from '@anov/3d-core'\nimport * as TWEEN from '@tweenjs/tween.js'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\ntype vector3Array = [number, number, number]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n}\n\nclass Camera {\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private isTransitionPeriod = false\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls) {\n this.camera = camera\n this.controls = controls\n\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n this.controls.addEventListener('change', () => {\n if (!this.isTransitionPeriod) {\n const lookat = this.controls.target\n const position = this.camera.position\n\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n }\n })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise ((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n {\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n options?.onComplate && options.onComplate()\n return\n }\n\n new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone() }).to({ t: 1, lookat: target }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat }) => {\n this.controls.target.copy(lookat)\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n options?.onComplate && options.onComplate()\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Box3","MathUtils","Vector3","TWEEN","MessageType","sendToMessage","EMessageStatus","Camera","camera","controls","handleChanged","currentPos","pitch","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","length","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","position","clone","sub","target","normalize","lastPosition","multiplyScalar","add","lastLookat","caclTargetByPitch","subVectors","upVector","localPitchAxis","crossVectors","applyAxisAngle","degToRad","distance","distanceTo","newTarget","prevTarget","prevPosition","lastTarget","addEventListener","isTransitionPeriod","lookat","Event","Success","undefined","toArray","params","Promise","res","duration","moveOptions","onUpdate","onComplate","isTrigger","userInput","Array","isArray","caclCurrentPos","moveCameraTo","caclSingleCoordinate","fromArray","_","x","y","z","options","currentPoition","currentPositionInterpolation","copy","Tween","t","p","to","rotation","onStart","enabled","easing","Easing","Quadratic","InOut","rotationParent","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../src/module/camera/index.ts"],"sourcesContent":["import type { OrbitControls, PerspectiveCamera } from '@anov/3d-core'\nimport { Box3, MathUtils, Vector3 } from '@anov/3d-core'\nimport * as TWEEN from '@tweenjs/tween.js'\nimport { MessageType, sendToMessage } from '../../utils/messageFn'\nimport { EMessageStatus } from '../../messageStatus'\n\ntype vector3Array = [number, number, number]\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n}\n\nclass Camera {\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private isTransitionPeriod = false\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls) {\n this.camera = camera\n this.controls = controls\n\n this.handleChanged()\n }\n\n /**\n * caclCurrentPos\n * @param currentPos\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], pitch: number) {\n const box = new Box3()\n\n box.setFromPoints(currentPos.map(item => new Vector3(item[0], item[1], item[2])))\n\n const center = box.getCenter(new Vector3())\n const size = box.getSize(new Vector3())\n const halfDiagonal = size.length() * 0.5\n\n const maxDistance = halfDiagonal / Math.tan(this.camera.fov / 2 * Math.PI / 180)\n const cameraToCenterDistance = maxDistance\n const directionVector = (this.camera.position.clone()).sub(this.controls.target).normalize() // 相机指向物体中心的向量\n\n const lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center)\n const lastLookat = this.caclTargetByPitch(pitch, center, lastPosition)\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclTargetByPitch\n * @param pitch\n * @param target\n * @param position\n * @returns\n */\n private caclTargetByPitch(pitch: number, target: Vector3, position: Vector3) {\n const directionVector = new Vector3().subVectors(target, position)\n const upVector = new Vector3(0, 1, 0)\n const localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize()\n\n directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch))\n\n const distance = position.distanceTo(target)\n const newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance))\n\n return newTarget\n }\n\n /**\n * caclSingleCoordinate\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3) {\n const directionVector = lastTarget.clone().sub(prevTarget).normalize()\n return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition)\n }\n\n /**\n * handle camera changed\n */\n private handleChanged() {\n this.controls.addEventListener('change', () => {\n if (!this.isTransitionPeriod) {\n const lookat = this.controls.target\n const position = this.camera.position\n\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n }\n })\n }\n\n /**\n * focus On Position\n * @param params\n */\n focus(params: { target: vector3Array | vector3Array[]; pitch?: number; duration?: number }) {\n return new Promise((res) => {\n const { target: position, pitch, duration } = params\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, 0)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos))\n const lastLookat = this.caclTargetByPitch(0, new Vector3().fromArray(currentPos), lastPosition)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n pitch,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera\n * @param params\n */\n set(params: { position: vector3Array; target: vector3Array; isTrigger?: boolean; duration?: number }) {\n return new Promise ((res, _) => {\n this.moveCameraTo(\n new Vector3(params.position[0], params.position[1], params.position[2]),\n new Vector3(params.target[0], params.target[1], params.target[2]),\n 0,\n {\n duration: (params.duration && params.duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n params.isTrigger\n && sendToMessage(MessageType.Event, 'onCameraChanged', EMessageStatus.Success, undefined, {\n position: position.toArray(),\n target: lookat.toArray(),\n })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n isTrigger: true,\n duration: params.duration ?? 0,\n userInput: true,\n })\n },\n })\n })\n }\n\n /**\n * get Camera info\n * @returns\n */\n get() {\n return {\n position: [this.camera.position.x, this.camera.position.y, this.camera.position.z],\n target: [this.controls.target.x, this.controls.target.y, this.controls.target.z],\n }\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param options\n */\n private moveCameraTo(position: Vector3, target: Vector3, pitch = 0, options?: ChangeCameraPresetOptions) {\n const currentPoition = this.camera.position.clone()\n const currentPositionInterpolation = new Vector3()\n\n if (options?.duration === 0) {\n this.camera.position.copy(position)\n this.controls.target.copy(target)\n\n options?.onComplate && options.onComplate()\n return\n }\n\n new TWEEN.Tween({ t: 0, lookat: this.controls.target.clone(), p: 0 }).to({ t: 1, lookat: target, p: (-this.camera.rotation.x + (pitch ? MathUtils.degToRad(-pitch) : 0)) }, options?.duration || 1000)\n .onStart(() => {\n options?.onStart && options.onStart()\n this.controls.enabled = false\n this.isTransitionPeriod = true\n })\n .easing(TWEEN.Easing.Quadratic.InOut)\n .onUpdate(({ t, lookat, p }) => {\n this.controls.target.copy(lookat)\n\n if (pitch)\n // @ts-ignore\n this.camera.rotationParent.x = p\n\n const currentPosition = currentPositionInterpolation.lerpVectors(currentPoition, position, t)\n this.camera.position.copy(currentPosition)\n options?.onUpdate && options.onUpdate({ position: currentPosition, lookat })\n })\n .onComplete(() => {\n options?.onComplate && options.onComplate()\n this.controls.enabled = true\n\n setTimeout(() => {\n this.isTransitionPeriod = false\n })\n })\n .start()\n }\n}\n\nexport default Camera"],"mappings":";;;;;;;AACA,SAASA,IAAI,EAAEC,SAAS,EAAEC,OAAO,QAAQ,eAAe;AACxD,OAAO,KAAKC,KAAK,MAAM,mBAAmB;AAC1C,SAASC,WAAW,EAAEC,aAAa;AACnC,SAASC,cAAc;AAA6B,IAU9CC,MAAM;EAKV,gBAAYC,MAAyB,EAAEC,QAAuB,EAAE;IAAA;IAAA;IAAA;IAAA,4CAFnC,KAAK;IAGhC,IAAI,CAACD,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IAExB,IAAI,CAACC,aAAa,EAAE;EACtB;;EAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,wBAAuBC,UAA0B,EAAEC,KAAa,EAAE;MAChE,IAAMC,GAAG,GAAG,IAAIb,IAAI,EAAE;MAEtBa,GAAG,CAACC,aAAa,CAACH,UAAU,CAACI,GAAG,CAAC,UAAAC,IAAI;QAAA,OAAI,IAAId,OAAO,CAACc,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,EAAEA,IAAI,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC,CAAC;MAEjF,IAAMC,MAAM,GAAGJ,GAAG,CAACK,SAAS,CAAC,IAAIhB,OAAO,EAAE,CAAC;MAC3C,IAAMiB,IAAI,GAAGN,GAAG,CAACO,OAAO,CAAC,IAAIlB,OAAO,EAAE,CAAC;MACvC,IAAMmB,YAAY,GAAGF,IAAI,CAACG,MAAM,EAAE,GAAG,GAAG;MAExC,IAAMC,WAAW,GAAGF,YAAY,GAAGG,IAAI,CAACC,GAAG,CAAC,IAAI,CAACjB,MAAM,CAACkB,GAAG,GAAG,CAAC,GAAGF,IAAI,CAACG,EAAE,GAAG,GAAG,CAAC;MAChF,IAAMC,sBAAsB,GAAGL,WAAW;MAC1C,IAAMM,eAAe,GAAI,IAAI,CAACrB,MAAM,CAACsB,QAAQ,CAACC,KAAK,EAAE,CAAEC,GAAG,CAAC,IAAI,CAACvB,QAAQ,CAACwB,MAAM,CAAC,CAACC,SAAS,EAAE,EAAC;;MAE7F,IAAMC,YAAY,GAAGN,eAAe,CAACO,cAAc,CAACR,sBAAsB,CAAC,CAACS,GAAG,CAACpB,MAAM,CAAC;MACvF,IAAMqB,UAAU,GAAG,IAAI,CAACC,iBAAiB,CAAC3B,KAAK,EAAEK,MAAM,EAAEkB,YAAY,CAAC;MAEtE,OAAO;QACLA,YAAY,EAAZA,YAAY;QACZG,UAAU,EAAVA;MACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,2BAA0B1B,KAAa,EAAEqB,MAAe,EAAEH,QAAiB,EAAE;MAC3E,IAAMD,eAAe,GAAG,IAAI3B,OAAO,EAAE,CAACsC,UAAU,CAACP,MAAM,EAAEH,QAAQ,CAAC;MAClE,IAAMW,QAAQ,GAAG,IAAIvC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACrC,IAAMwC,cAAc,GAAG,IAAIxC,OAAO,EAAE,CAACyC,YAAY,CAACd,eAAe,EAAEY,QAAQ,CAAC,CAACP,SAAS,EAAE;MAExFL,eAAe,CAACe,cAAc,CAACF,cAAc,EAAEzC,SAAS,CAAC4C,QAAQ,CAACjC,KAAK,CAAC,CAAC;MAEzE,IAAMkC,QAAQ,GAAGhB,QAAQ,CAACiB,UAAU,CAACd,MAAM,CAAC;MAC5C,IAAMe,SAAS,GAAGlB,QAAQ,CAACC,KAAK,EAAE,CAACM,GAAG,CAACR,eAAe,CAACK,SAAS,EAAE,CAACE,cAAc,CAACU,QAAQ,CAAC,CAAC;MAE5F,OAAOE,SAAS;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,8BAA6BC,UAAmB,EAAEC,YAAqB,EAAEC,UAAmB,EAAE;MAC5F,IAAMtB,eAAe,GAAGsB,UAAU,CAACpB,KAAK,EAAE,CAACC,GAAG,CAACiB,UAAU,CAAC,CAACf,SAAS,EAAE;MACtE,OAAOL,eAAe,CAACO,cAAc,CAACe,UAAU,CAACJ,UAAU,CAACE,UAAU,CAAC,CAAC,CAACZ,GAAG,CAACa,YAAY,CAAC;IAC5F;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAGA,yBAAwB;MAAA;MACtB,IAAI,CAACzC,QAAQ,CAAC2C,gBAAgB,CAAC,QAAQ,EAAE,YAAM;QAC7C,IAAI,CAAC,KAAI,CAACC,kBAAkB,EAAE;UAC5B,IAAMC,MAAM,GAAG,KAAI,CAAC7C,QAAQ,CAACwB,MAAM;UACnC,IAAMH,QAAQ,GAAG,KAAI,CAACtB,MAAM,CAACsB,QAAQ;UAErCzB,aAAa,CAACD,WAAW,CAACmD,KAAK,EAAE,iBAAiB,EAAEjD,cAAc,CAACkD,OAAO,EAAEC,SAAS,EAAE;YACrF3B,QAAQ,EAAEA,QAAQ,CAAC4B,OAAO,EAAE;YAC5BzB,MAAM,EAAEqB,MAAM,CAACI,OAAO;UACxB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,eAAMC,MAAoF,EAAE;MAAA;MAC1F,OAAO,IAAIC,OAAO,CAAC,UAACC,GAAG,EAAK;QAC1B,IAAgB/B,QAAQ,GAAsB6B,MAAM,CAA5C1B,MAAM;UAAYrB,KAAK,GAAe+C,MAAM,CAA1B/C,KAAK;UAAEkD,QAAQ,GAAKH,MAAM,CAAnBG,QAAQ;QACzC,IAAMC,WAAW,GAAG,SAAdA,WAAW;UAAA;UAAA,OAAU;YACzBD,QAAQ,UAAGA,QAAQ,IAAIA,QAAQ,GAAG,IAAI,uCAAK,IAAI;YAC/CE,QAAQ,EAAE,yBAA0B;cAAA,IAAvBlC,QAAQ,SAARA,QAAQ;gBAAEwB,MAAM,SAANA,MAAM;cAC3BjD,aAAa,CAACD,WAAW,CAACmD,KAAK,EAAE,iBAAiB,EAAEjD,cAAc,CAACkD,OAAO,EAAEC,SAAS,EAAE;gBACrF3B,QAAQ,EAAEA,QAAQ,CAAC4B,OAAO,EAAE;gBAC5BzB,MAAM,EAAEqB,MAAM,CAACI,OAAO;cACxB,CAAC,CAAC;YACJ,CAAC;YACDO,UAAU,EAAE,sBAAM;cAAA;cAChBJ,GAAG,CAAC;gBACF/B,QAAQ,EAAE,MAAI,CAACtB,MAAM,CAACsB,QAAQ,CAAC4B,OAAO,EAAE;gBACxCzB,MAAM,EAAE,MAAI,CAACxB,QAAQ,CAACwB,MAAM,CAACyB,OAAO,EAAE;gBACtCQ,SAAS,EAAE,IAAI;gBACfJ,QAAQ,sBAAEH,MAAM,CAACG,QAAQ,+DAAI,CAAC;gBAC9BK,SAAS,EAAE,IAAI;gBACfvD,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAI;cAClB,CAAC,CAAC;YACJ;UACF,CAAC;QAAA,CAA8B;QAE/B,IAAIwD,KAAK,CAACC,OAAO,CAACvC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;UAC9B,IAAMnB,UAAU,GAAGmB,QAA0B;UAC7C,4BAAqC,MAAI,CAACwC,cAAc,CAAC3D,UAAU,EAAE,CAAC,CAAC;YAA/DwB,YAAY,yBAAZA,YAAY;YAAEG,UAAU,yBAAVA,UAAU;UAEhC,MAAI,CAACiC,YAAY,CACfpC,YAAY,EACZG,UAAU,EACV1B,KAAK,EACLmD,WAAW,EAAE,CACd;QACH,CAAC,MACI;UACH,IAAMpD,WAAU,GAAGmB,QAAwB;UAC3C,IAAMK,aAAY,GAAG,MAAI,CAACqC,oBAAoB,CAAC,MAAI,CAAC/D,QAAQ,CAACwB,MAAM,EAAE,MAAI,CAACzB,MAAM,CAACsB,QAAQ,EAAE,IAAI5B,OAAO,EAAE,CAACuE,SAAS,CAAC9D,WAAU,CAAC,CAAC;UAC/H,IAAM2B,WAAU,GAAG,MAAI,CAACC,iBAAiB,CAAC,CAAC,EAAE,IAAIrC,OAAO,EAAE,CAACuE,SAAS,CAAC9D,WAAU,CAAC,EAAEwB,aAAY,CAAC;UAE/F,MAAI,CAACoC,YAAY,CACfpC,aAAY,EACZG,WAAU,EACV1B,KAAK,EACLmD,WAAW,EAAE,CACd;QACH;MACF,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,aAAIJ,MAAgG,EAAE;MAAA;MACpG,OAAO,IAAIC,OAAO,CAAE,UAACC,GAAG,EAAEa,CAAC,EAAK;QAAA;QAC9B,MAAI,CAACH,YAAY,CACf,IAAIrE,OAAO,CAACyD,MAAM,CAAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE6B,MAAM,CAAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE6B,MAAM,CAAC7B,QAAQ,CAAC,CAAC,CAAC,CAAC,EACvE,IAAI5B,OAAO,CAACyD,MAAM,CAAC1B,MAAM,CAAC,CAAC,CAAC,EAAE0B,MAAM,CAAC1B,MAAM,CAAC,CAAC,CAAC,EAAE0B,MAAM,CAAC1B,MAAM,CAAC,CAAC,CAAC,CAAC,EACjE,CAAC,EACD;UACE6B,QAAQ,WAAGH,MAAM,CAACG,QAAQ,IAAIH,MAAM,CAACG,QAAQ,GAAG,IAAI,yCAAK,IAAI;UAC7DE,QAAQ,EAAE,yBAA0B;YAAA,IAAvBlC,QAAQ,SAARA,QAAQ;cAAEwB,MAAM,SAANA,MAAM;YAC3BK,MAAM,CAACO,SAAS,IACX7D,aAAa,CAACD,WAAW,CAACmD,KAAK,EAAE,iBAAiB,EAAEjD,cAAc,CAACkD,OAAO,EAAEC,SAAS,EAAE;cACxF3B,QAAQ,EAAEA,QAAQ,CAAC4B,OAAO,EAAE;cAC5BzB,MAAM,EAAEqB,MAAM,CAACI,OAAO;YACxB,CAAC,CAAC;UACN,CAAC;UACDO,UAAU,EAAE,sBAAM;YAAA;YAChBJ,GAAG,CAAC;cACF/B,QAAQ,EAAE,MAAI,CAACtB,MAAM,CAACsB,QAAQ,CAAC4B,OAAO,EAAE;cACxCzB,MAAM,EAAE,MAAI,CAACxB,QAAQ,CAACwB,MAAM,CAACyB,OAAO,EAAE;cACtCQ,SAAS,EAAE,IAAI;cACfJ,QAAQ,uBAAEH,MAAM,CAACG,QAAQ,iEAAI,CAAC;cAC9BK,SAAS,EAAE;YACb,CAAC,CAAC;UACJ;QACF,CAAC,CAAC;MACN,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,eAAM;MACJ,OAAO;QACLrC,QAAQ,EAAE,CAAC,IAAI,CAACtB,MAAM,CAACsB,QAAQ,CAAC6C,CAAC,EAAE,IAAI,CAACnE,MAAM,CAACsB,QAAQ,CAAC8C,CAAC,EAAE,IAAI,CAACpE,MAAM,CAACsB,QAAQ,CAAC+C,CAAC,CAAC;QAClF5C,MAAM,EAAE,CAAC,IAAI,CAACxB,QAAQ,CAACwB,MAAM,CAAC0C,CAAC,EAAE,IAAI,CAAClE,QAAQ,CAACwB,MAAM,CAAC2C,CAAC,EAAE,IAAI,CAACnE,QAAQ,CAACwB,MAAM,CAAC4C,CAAC;MACjF,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,sBAAqB/C,QAAiB,EAAEG,MAAe,EAAkD;MAAA;MAAA,IAAhDrB,KAAK,uEAAG,CAAC;MAAA,IAAEkE,OAAmC;MACrG,IAAMC,cAAc,GAAG,IAAI,CAACvE,MAAM,CAACsB,QAAQ,CAACC,KAAK,EAAE;MACnD,IAAMiD,4BAA4B,GAAG,IAAI9E,OAAO,EAAE;MAElD,IAAI,CAAA4E,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEhB,QAAQ,MAAK,CAAC,EAAE;QAC3B,IAAI,CAACtD,MAAM,CAACsB,QAAQ,CAACmD,IAAI,CAACnD,QAAQ,CAAC;QACnC,IAAI,CAACrB,QAAQ,CAACwB,MAAM,CAACgD,IAAI,CAAChD,MAAM,CAAC;QAEjC,CAAA6C,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEb,UAAU,KAAIa,OAAO,CAACb,UAAU,EAAE;QAC3C;MACF;MAEA,IAAI9D,KAAK,CAAC+E,KAAK,CAAC;QAAEC,CAAC,EAAE,CAAC;QAAE7B,MAAM,EAAE,IAAI,CAAC7C,QAAQ,CAACwB,MAAM,CAACF,KAAK,EAAE;QAAEqD,CAAC,EAAE;MAAE,CAAC,CAAC,CAACC,EAAE,CAAC;QAAEF,CAAC,EAAE,CAAC;QAAE7B,MAAM,EAAErB,MAAM;QAAEmD,CAAC,EAAG,CAAC,IAAI,CAAC5E,MAAM,CAAC8E,QAAQ,CAACX,CAAC,IAAI/D,KAAK,GAAGX,SAAS,CAAC4C,QAAQ,CAAC,CAACjC,KAAK,CAAC,GAAG,CAAC;MAAG,CAAC,EAAE,CAAAkE,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEhB,QAAQ,KAAI,IAAI,CAAC,CACnMyB,OAAO,CAAC,YAAM;QACb,CAAAT,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAES,OAAO,KAAIT,OAAO,CAACS,OAAO,EAAE;QACrC,MAAI,CAAC9E,QAAQ,CAAC+E,OAAO,GAAG,KAAK;QAC7B,MAAI,CAACnC,kBAAkB,GAAG,IAAI;MAChC,CAAC,CAAC,CACDoC,MAAM,CAACtF,KAAK,CAACuF,MAAM,CAACC,SAAS,CAACC,KAAK,CAAC,CACpC5B,QAAQ,CAAC,iBAAsB;QAAA,IAAnBmB,CAAC,SAADA,CAAC;UAAE7B,MAAM,SAANA,MAAM;UAAE8B,CAAC,SAADA,CAAC;QACvB,MAAI,CAAC3E,QAAQ,CAACwB,MAAM,CAACgD,IAAI,CAAC3B,MAAM,CAAC;QAEjC,IAAI1C,KAAK;UACT;UACE,MAAI,CAACJ,MAAM,CAACqF,cAAc,CAAClB,CAAC,GAAGS,CAAC;QAElC,IAAMU,eAAe,GAAGd,4BAA4B,CAACe,WAAW,CAAChB,cAAc,EAAEjD,QAAQ,EAAEqD,CAAC,CAAC;QAC7F,MAAI,CAAC3E,MAAM,CAACsB,QAAQ,CAACmD,IAAI,CAACa,eAAe,CAAC;QAC1C,CAAAhB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEd,QAAQ,KAAIc,OAAO,CAACd,QAAQ,CAAC;UAAElC,QAAQ,EAAEgE,eAAe;UAAExC,MAAM,EAANA;QAAO,CAAC,CAAC;MAC9E,CAAC,CAAC,CACD0C,UAAU,CAAC,YAAM;QAChB,CAAAlB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEb,UAAU,KAAIa,OAAO,CAACb,UAAU,EAAE;QAC3C,MAAI,CAACxD,QAAQ,CAAC+E,OAAO,GAAG,IAAI;QAE5BS,UAAU,CAAC,YAAM;UACf,MAAI,CAAC5C,kBAAkB,GAAG,KAAK;QACjC,CAAC,CAAC;MACJ,CAAC,CAAC,CACD6C,KAAK,EAAE;IACZ;EAAC;EAAA;AAAA;AAGH,eAAe3F,MAAM"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Vector3 } from '@anov/3d-core';
|
|
1
2
|
declare type EnvironmentOptions = {
|
|
2
3
|
weather?: string;
|
|
3
4
|
time?: number;
|
|
@@ -10,7 +11,9 @@ declare class Environment {
|
|
|
10
11
|
private cloudReturn;
|
|
11
12
|
private sky;
|
|
12
13
|
private renderer;
|
|
13
|
-
|
|
14
|
+
private changeSceneEnvironment;
|
|
15
|
+
sunPosition: Vector3;
|
|
16
|
+
constructor(changeSceneEnvironment: (openFlag?: boolean) => void, opts?: EnvironmentOptions);
|
|
14
17
|
private initConfigSet;
|
|
15
18
|
private setWeatherStrategy;
|
|
16
19
|
/**
|
|
@@ -15,7 +15,7 @@ import { use } from '@anov/3d-core';
|
|
|
15
15
|
import { createRain, createSkyCloud, createSnow } from '@anov/3d-ability';
|
|
16
16
|
import createTimeSkySystem from "./time";
|
|
17
17
|
var Environment = /*#__PURE__*/function () {
|
|
18
|
-
function Environment(opts) {
|
|
18
|
+
function Environment(changeSceneEnvironment, opts) {
|
|
19
19
|
var _this = this;
|
|
20
20
|
_classCallCheck(this, Environment);
|
|
21
21
|
_defineProperty(this, "opts", void 0);
|
|
@@ -25,6 +25,8 @@ var Environment = /*#__PURE__*/function () {
|
|
|
25
25
|
_defineProperty(this, "cloudReturn", null);
|
|
26
26
|
_defineProperty(this, "sky", void 0);
|
|
27
27
|
_defineProperty(this, "renderer", void 0);
|
|
28
|
+
_defineProperty(this, "changeSceneEnvironment", void 0);
|
|
29
|
+
_defineProperty(this, "sunPosition", void 0);
|
|
28
30
|
_defineProperty(this, "setWeatherStrategy", {
|
|
29
31
|
Snow: function Snow() {
|
|
30
32
|
!_this.snow && (_this.snow = createSnow(15, 10000, {
|
|
@@ -61,12 +63,14 @@ var Environment = /*#__PURE__*/function () {
|
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
});
|
|
64
|
-
|
|
66
|
+
this.changeSceneEnvironment = changeSceneEnvironment;
|
|
67
|
+
var _createTimeSkySystem = createTimeSkySystem(new Date(), 40, 116, 100),
|
|
65
68
|
_createTimeSkySystem2 = _slicedToArray(_createTimeSkySystem, 3),
|
|
66
69
|
setDate = _createTimeSkySystem2[0],
|
|
67
70
|
sun = _createTimeSkySystem2[1],
|
|
68
71
|
sky = _createTimeSkySystem2[2];
|
|
69
72
|
this.renderer = use.useScene().renderer;
|
|
73
|
+
this.sunPosition = sun.position;
|
|
70
74
|
this.setDate = setDate;
|
|
71
75
|
this.sky = sky;
|
|
72
76
|
this.opts = opts;
|
|
@@ -101,6 +105,7 @@ var Environment = /*#__PURE__*/function () {
|
|
|
101
105
|
date.setHours(0, 0, 0, 0);
|
|
102
106
|
date.setTime(date.getTime() + Math.floor(86400000 * params.time / 2400));
|
|
103
107
|
this.setDate(date);
|
|
108
|
+
if (this.sunPosition.y <= 0) this.changeSceneEnvironment(false);else this.changeSceneEnvironment(true);
|
|
104
109
|
return {
|
|
105
110
|
newTime: params.time
|
|
106
111
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["use","createRain","createSkyCloud","createSnow","createTimeSkySystem","Environment","opts","Snow","snow","x","y","z","renderer","toneMappingExposure","Rain","rain","Cloudy","cloudReturn","Clear_Skies","_","clear","Date","setDate","sun","sky","useScene","initConfigSet","weather","time","setWeather","weatherType","duration","setTime","params","undefined","Error","date","setHours","getTime","Math","floor","newTime","setWeatherStrategy"],"sources":["../../../src/module/environment/index.ts"],"sourcesContent":["import type { Vector3, WebGLRenderer, lib } from '@anov/3d-core'\nimport { use } from '@anov/3d-core'\nimport
|
|
1
|
+
{"version":3,"names":["use","createRain","createSkyCloud","createSnow","createTimeSkySystem","Environment","changeSceneEnvironment","opts","Snow","snow","x","y","z","renderer","toneMappingExposure","Rain","rain","Cloudy","cloudReturn","Clear_Skies","_","clear","Date","setDate","sun","sky","useScene","sunPosition","position","initConfigSet","weather","time","setWeather","weatherType","duration","setTime","params","undefined","Error","date","setHours","getTime","Math","floor","newTime","setWeatherStrategy"],"sources":["../../../src/module/environment/index.ts"],"sourcesContent":["import type { Vector3, WebGLRenderer, lib } from '@anov/3d-core'\nimport { use } from '@anov/3d-core'\nimport { createRain, createSkyCloud, createSnow } from '@anov/3d-ability'\nimport createTimeSkySystem from './time'\n\ntype EnvironmentOptions = {\n weather?: string\n time?: number\n}\n\nclass Environment {\n private opts?: EnvironmentOptions\n private setDate: (currentDate?: Date | undefined) => Vector3\n private snow: any = null\n private rain: any = null\n private cloudReturn: ReturnType<typeof createSkyCloud> | null = null\n private sky: lib.Sky\n private renderer: WebGLRenderer\n private changeSceneEnvironment: (openFlag?: boolean) => void\n sunPosition: Vector3\n\n constructor(changeSceneEnvironment: (openFlag?: boolean) => void, opts?: EnvironmentOptions) {\n this.changeSceneEnvironment = changeSceneEnvironment\n const [setDate, sun, sky] = createTimeSkySystem(new Date(), 40, 116, 100)\n this.renderer = use.useScene().renderer!\n this.sunPosition = sun.position\n this.setDate = setDate as any\n this.sky = sky\n\n this.opts = opts\n this.initConfigSet()\n }\n\n private initConfigSet() {\n const { weather, time } = this.opts as Required<EnvironmentOptions>\n\n this.setWeather({ weatherType: weather ?? 'Snow', duration: 0 })\n this.setTime({ time: time ?? 1700, duration: 0 })\n }\n\n private setWeatherStrategy = {\n Snow: () => {\n !this.snow && (this.snow = createSnow(15, 10000, { x: 0, y: 3, z: 0 }, 0.5, 50000))\n this.snow[0]()\n this.renderer.toneMappingExposure = 0.3\n },\n Rain: () => {\n !this.rain && (this.rain = createRain(4, 10000, { x: 0, y: 10, z: 0 }, 0.8, 100000))\n this.rain[0]()\n this.renderer.toneMappingExposure = 0.3\n },\n Cloudy: () => {\n !this.cloudReturn && (this.cloudReturn = createSkyCloud())\n },\n Clear_Skies: () => {\n this.snow?.[1]()\n this.rain?.[1]()\n this.renderer.toneMappingExposure = 0.6\n\n if (this.cloudReturn) {\n const [_, clear] = this.cloudReturn\n clear()\n this.cloudReturn = null\n }\n },\n }\n\n /**\n * setTime\n * @param newTime\n * @param changeTime\n */\n setTime(params: { time: number; duration?: number }) {\n if (params.time === undefined || (params.time > 2400 && params.time < 0))\n throw new Error('time must be between 0 and 2400')\n\n const date = new Date()\n date.setHours(0, 0, 0, 0)\n date.setTime(date.getTime() + Math.floor(86400000 * params.time / 2400))\n this.setDate(date)\n\n if (this.sunPosition.y <= 0)\n this.changeSceneEnvironment(false)\n\n else\n this.changeSceneEnvironment(true)\n\n return {\n newTime: params.time,\n }\n }\n\n /**\n * setWeather\n * @param type\n * @param changeTime\n */\n setWeather(params: { weatherType: string; duration?: number }) {\n // @ts-ignore\n this.setWeatherStrategy[params.weatherType]()\n\n return {\n weatherType: params.weatherType,\n }\n }\n}\n\nexport default Environment"],"mappings":"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"}
|
|
@@ -6,5 +6,7 @@
|
|
|
6
6
|
* @param sunRadius
|
|
7
7
|
* @returns
|
|
8
8
|
*/
|
|
9
|
-
declare const createTimeSkySystem: (date: Date, latitude?: number, longitude?: number, sunRadius?: number) =>
|
|
9
|
+
declare const createTimeSkySystem: (date: Date, latitude?: number, longitude?: number, sunRadius?: number) => [(currentDate?: Date | undefined) => import("@anov/3d-core").Vector3, import("@anov/3d-core/dist/core/group").default & {
|
|
10
|
+
sunPosition: import("@anov/3d-core").Vector3;
|
|
11
|
+
}, any];
|
|
10
12
|
export default createTimeSkySystem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSkySystem","createTimeSkySystem","date","latitude","longitude","sunRadius","setDate","sun","sky"],"sources":["../../../../src/module/environment/time/index.ts"],"sourcesContent":["import { createSkySystem } from '@anov/3d-ability'\n\n/**\n * create time sky system\n * @param date\n * @param latitude\n * @param longitude\n * @param sunRadius\n * @returns\n */\nconst createTimeSkySystem = (date: Date, latitude = 40, longitude = 116, sunRadius = 100) => {\n const [setDate, sun, sky] = createSkySystem(date, latitude, longitude, sunRadius)\n\n return [setDate, sun, sky]\n}\n\nexport default createTimeSkySystem"],"mappings":";;;;;;AAAA,SAASA,eAAe,QAAQ,kBAAkB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIC,IAAU,EAAsD;EAAA,IAApDC,QAAQ,uEAAG,EAAE;EAAA,IAAEC,SAAS,uEAAG,GAAG;EAAA,IAAEC,SAAS,uEAAG,GAAG;EACtF,uBAA4BL,eAAe,CAACE,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,CAAC;IAAA;IAA1EC,OAAO;IAAEC,GAAG;IAAEC,GAAG;EAExB,OAAO,CAACF,OAAO,EAAEC,GAAG,EAAEC,GAAG,CAAC;AAC5B,CAAC;AAED,eAAeP,mBAAmB"}
|
|
1
|
+
{"version":3,"names":["createSkySystem","createTimeSkySystem","date","latitude","longitude","sunRadius","setDate","sun","sky"],"sources":["../../../../src/module/environment/time/index.ts"],"sourcesContent":["import { createSkySystem } from '@anov/3d-ability'\n\n/**\n * create time sky system\n * @param date\n * @param latitude\n * @param longitude\n * @param sunRadius\n * @returns\n */\nconst createTimeSkySystem = (date: Date, latitude = 40, longitude = 116, sunRadius = 100) => {\n const [setDate, sun, sky] = createSkySystem(date, latitude, longitude, sunRadius)\n\n return [setDate, sun, sky] as [typeof setDate, typeof sun, typeof sky]\n}\n\nexport default createTimeSkySystem"],"mappings":";;;;;;AAAA,SAASA,eAAe,QAAQ,kBAAkB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIC,IAAU,EAAsD;EAAA,IAApDC,QAAQ,uEAAG,EAAE;EAAA,IAAEC,SAAS,uEAAG,GAAG;EAAA,IAAEC,SAAS,uEAAG,GAAG;EACtF,uBAA4BL,eAAe,CAACE,IAAI,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,CAAC;IAAA;IAA1EC,OAAO;IAAEC,GAAG;IAAEC,GAAG;EAExB,OAAO,CAACF,OAAO,EAAEC,GAAG,EAAEC,GAAG,CAAC;AAC5B,CAAC;AAED,eAAeP,mBAAmB"}
|
|
@@ -66,6 +66,12 @@ var Model = /*#__PURE__*/function () {
|
|
|
66
66
|
if (fileFormat === 'glb' || fileFormat === 'gltf') {
|
|
67
67
|
modelLoader.loadGLTF(lastSource, false, true, './draco/', function (model) {
|
|
68
68
|
model.scene.position.set(position.x, position.y, position.z);
|
|
69
|
+
model.scene.traverse(function (child) {
|
|
70
|
+
if (child.type === 'Mesh') {
|
|
71
|
+
child.castShadow = true;
|
|
72
|
+
child.receiveShadow = true;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
69
75
|
_this.scene.add(model.scene);
|
|
70
76
|
return model;
|
|
71
77
|
}, onProgress, onError);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ModelLoader","Vector3","use","localforage","modelLoader","Model","useScene","scene","Error","source","isCache","position","onProgress","onError","fileFormat","split","pop","fetch","then","res","blob","setItem","getItem","lastSource","URL","createObjectURL","loadGLTF","model","set","x","y","z","add","loadFbx","undefined"],"sources":["../../../src/module/model/index.ts"],"sourcesContent":["import type { Scene } from '@anov/3d-core'\nimport { ModelLoader, Vector3, use } from '@anov/3d-core'\nimport localforage from 'localforage'\n\nconst modelLoader = new ModelLoader()\n\nclass Model {\n private scene: Scene\n constructor() {\n const { scene } = use.useScene()\n\n if (!scene)\n throw new Error('scene is not init')\n\n this.scene = scene\n }\n\n /**\n * model load ,now just to test\n * @param source\n * @param isCache\n * @param position\n * @param onProgress\n * @param onError\n */\n async load(source: string, isCache = true, position = new Vector3(0, 0, 0), onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void) {\n const fileFormat = source.split('.').pop()\n\n if (isCache) {\n fetch(source).then(res => res.blob()).then((blob) => {\n localforage.setItem(source, blob)\n })\n }\n\n const blob = await localforage.getItem(source) as Blob\n let lastSource = source\n\n if (blob && isCache)\n lastSource = URL.createObjectURL(blob)\n\n if (fileFormat === 'glb' || fileFormat === 'gltf') {\n modelLoader.loadGLTF(lastSource, false, true,\n './draco/',\n (model) => {\n model.scene.position.set(position.x, position.y, position.z)\n\n this.scene.add(model.scene)\n return model\n },\n onProgress,\n onError)\n }\n\n if (fileFormat === 'fbx') {\n modelLoader.loadFbx(lastSource, false, undefined, onProgress, onError).then((model) => {\n model.position.set(position.x, position.y, position.z)\n this.scene.add(model)\n })\n }\n }\n}\n\nexport default Model"],"mappings":";+CACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAASA,WAAW,EAAEC,OAAO,EAAEC,GAAG,QAAQ,eAAe;AACzD,OAAOC,WAAW,MAAM,aAAa;AAErC,IAAMC,WAAW,GAAG,IAAIJ,WAAW,EAAE;AAAA,IAE/BK,KAAK;EAET,iBAAc;IAAA;IAAA;IACZ,oBAAkBH,GAAG,CAACI,QAAQ,EAAE;MAAxBC,KAAK,iBAALA,KAAK;IAEb,IAAI,CAACA,KAAK,EACR,MAAM,IAAIC,KAAK,CAAC,mBAAmB,CAAC;IAEtC,IAAI,CAACD,KAAK,GAAGA,KAAK;EACpB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA;IAAA;MAAA,uEAQA,iBAAWE,MAAc;QAAA;QAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;UAAA;QAAA;UAAA;YAAA;cAAEC,OAAO,2DAAG,IAAI;cAAEC,QAAQ,2DAAG,IAAIV,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;cAAEW,UAA2C;cAAEC,OAAqC;cACtJC,UAAU,GAAGL,MAAM,CAACM,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE;cAE1C,IAAIN,OAAO,EAAE;gBACXO,KAAK,CAACR,MAAM,CAAC,CAACS,IAAI,CAAC,UAAAC,GAAG;kBAAA,OAAIA,GAAG,CAACC,IAAI,EAAE;gBAAA,EAAC,CAACF,IAAI,CAAC,UAACE,IAAI,EAAK;kBACnDjB,WAAW,CAACkB,OAAO,CAACZ,MAAM,EAAEW,IAAI,CAAC;gBACnC,CAAC,CAAC;cACJ;cAAC;cAAA,OAEkBjB,WAAW,CAACmB,OAAO,CAACb,MAAM,CAAC;YAAA;cAAxCW,IAAI;cACNG,UAAU,GAAGd,MAAM;cAEvB,IAAIW,IAAI,IAAIV,OAAO,EACjBa,UAAU,GAAGC,GAAG,CAACC,eAAe,CAACL,IAAI,CAAC;cAExC,IAAIN,UAAU,KAAK,KAAK,IAAIA,UAAU,KAAK,MAAM,EAAE;gBACjDV,WAAW,CAACsB,QAAQ,CAACH,UAAU,EAAE,KAAK,EAAE,IAAI,EAC1C,UAAU,EACV,UAACI,KAAK,EAAK;kBACTA,KAAK,CAACpB,KAAK,CAACI,QAAQ,CAACiB,GAAG,CAACjB,QAAQ,CAACkB,CAAC,EAAElB,QAAQ,CAACmB,CAAC,EAAEnB,QAAQ,CAACoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"names":["ModelLoader","Vector3","use","localforage","modelLoader","Model","useScene","scene","Error","source","isCache","position","onProgress","onError","fileFormat","split","pop","fetch","then","res","blob","setItem","getItem","lastSource","URL","createObjectURL","loadGLTF","model","set","x","y","z","traverse","child","type","castShadow","receiveShadow","add","loadFbx","undefined"],"sources":["../../../src/module/model/index.ts"],"sourcesContent":["import type { Scene } from '@anov/3d-core'\nimport { ModelLoader, Vector3, use } from '@anov/3d-core'\nimport localforage from 'localforage'\n\nconst modelLoader = new ModelLoader()\n\nclass Model {\n private scene: Scene\n constructor() {\n const { scene } = use.useScene()\n\n if (!scene)\n throw new Error('scene is not init')\n\n this.scene = scene\n }\n\n /**\n * model load ,now just to test\n * @param source\n * @param isCache\n * @param position\n * @param onProgress\n * @param onError\n */\n async load(source: string, isCache = true, position = new Vector3(0, 0, 0), onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void) {\n const fileFormat = source.split('.').pop()\n\n if (isCache) {\n fetch(source).then(res => res.blob()).then((blob) => {\n localforage.setItem(source, blob)\n })\n }\n\n const blob = await localforage.getItem(source) as Blob\n let lastSource = source\n\n if (blob && isCache)\n lastSource = URL.createObjectURL(blob)\n\n if (fileFormat === 'glb' || fileFormat === 'gltf') {\n modelLoader.loadGLTF(lastSource, false, true,\n './draco/',\n (model) => {\n model.scene.position.set(position.x, position.y, position.z)\n\n model.scene.traverse((child) => {\n if (child.type === 'Mesh') {\n child.castShadow = true\n child.receiveShadow = true\n }\n })\n\n this.scene.add(model.scene)\n return model\n },\n onProgress,\n onError)\n }\n\n if (fileFormat === 'fbx') {\n modelLoader.loadFbx(lastSource, false, undefined, onProgress, onError).then((model) => {\n model.position.set(position.x, position.y, position.z)\n this.scene.add(model)\n })\n }\n }\n}\n\nexport default Model"],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { GrowOption } from '@anov/3d-ability';
|
|
2
|
+
import type Factory3D from '../../factory/3d';
|
|
2
3
|
export declare class Scene {
|
|
3
4
|
private grow;
|
|
4
5
|
private opt;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
private factory;
|
|
7
|
+
constructor(factory: Factory3D);
|
|
8
|
+
growInit(opt?: GrowOption): Promise<unknown>;
|
|
9
|
+
growIn(): Promise<unknown>;
|
|
10
|
+
growOut(): Promise<unknown>;
|
|
11
|
+
toPage(params: any): void;
|
|
8
12
|
}
|