@anov/3d 0.0.4-alpha21 → 0.0.4-alpha23
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 -0
- package/dist/applicationApi.js.map +1 -1
- package/dist/module/camera/index.d.ts +16 -0
- package/dist/module/camera/index.js +41 -6
- package/dist/module/camera/index.js.map +1 -1
- package/dist/module/environment/index.d.ts +1 -0
- package/dist/module/environment/index.js +22 -11
- package/dist/module/environment/index.js.map +1 -1
- package/package.json +4 -3
package/dist/applicationApi.js
CHANGED
|
@@ -52,6 +52,7 @@ var Application = /*#__PURE__*/function () {
|
|
|
52
52
|
sendToMessage(MessageType.Api, 'core.init', EMessageStatus.Success, id);
|
|
53
53
|
} catch (error) {
|
|
54
54
|
sendToMessage(MessageType.Api, 'core.init', EMessageStatus.EventHandleFailed);
|
|
55
|
+
console.error(error);
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["utils","getFnByFnkey","MessageType","sendToMessage","EMessageStatus","Anov3D","defaultCameraParams","Application","opts","container","el","Api","Success","params","id","camera","cameraParams","fov","near","far","position","lookAt","target","anov3D","model","size","width","clientWidth","height","clientHeight","environment","weather","time","iEngine","error","EventHandleFailed","req","name","init","Error","fn","res","Promise","resolve","then","failMessage","message","eventName","cb","storeManagement","set","createInstance"],"sources":["../src/applicationApi.ts"],"sourcesContent":["import { utils } from '@anov/3d-core'\nimport { getFnByFnkey } from './utils/index'\nimport { MessageType, sendToMessage } from './utils/messageFn'\nimport { EMessageStatus } from './messageStatus'\nimport Anov3D, { defaultCameraParams } from './index'\n\ntype ApplicationOptions = {\n el: HTMLElement\n}\n\nexport type InitOptions = {\n camera?: {\n fov?: number\n near?: number\n far?: number\n position?: [\n number,\n number,\n number,\n ]\n target?: [\n number,\n number,\n number,\n ]\n }\n model?: string\n size?: {\n width: number\n height: number\n }\n environment?: {\n weather?: string\n time?: number\n }\n}\n\nclass Application {\n private container: HTMLElement\n iEngine: Anov3D | undefined\n\n constructor(opts: ApplicationOptions) {\n this.container = opts.el\n\n sendToMessage(MessageType.Api, 'engineReady', EMessageStatus.Success)\n }\n\n private init(params: InitOptions, id: string) {\n try {\n const { camera = {} } = params || {}\n\n const cameraParams = {\n fov: camera.fov ?? defaultCameraParams.fov,\n near: camera.near ?? defaultCameraParams.near,\n far: camera.far ?? defaultCameraParams.far,\n position: camera.position,\n lookAt: camera.target,\n }\n\n const anov3D = new Anov3D({\n container: this.container,\n model: params?.model,\n size: {\n width: params?.size?.width ?? this.container.clientWidth,\n height: params?.size?.height ?? this.container.clientHeight,\n },\n camera: {\n ...cameraParams,\n },\n environment: {\n weather: params?.environment?.weather,\n time: params?.environment?.time,\n },\n })\n this.iEngine = anov3D\n\n sendToMessage(MessageType.Api, 'core.init', EMessageStatus.Success, id)\n }\n catch (error) {\n sendToMessage(MessageType.Api, 'core.init', EMessageStatus.EventHandleFailed)\n }\n }\n\n sendMessage(req: { name: string; id: string; params: any }) {\n if (req.name === 'Core.init' || req.name === 'core.init') {\n this.init(req.params, req.id)\n return\n }\n\n if (!this.iEngine)\n throw new Error('please init first')\n\n const fn = getFnByFnkey(this.iEngine, req.name, req.id) as any\n\n try {\n const res = fn(req.params)\n\n Promise.resolve(res).then((res) => {\n sendToMessage(MessageType.Api, req.name, EMessageStatus.Success, req.id, res)\n })\n }\n catch (error: any) {\n sendToMessage(MessageType.Api, req.name, EMessageStatus.EventHandleFailed, req.id, {\n failMessage: error.message,\n })\n }\n }\n\n receiveMessage(eventName: string, cb: (params: any) => void) {\n utils.storeManagement.set(eventName, cb)\n }\n}\n\n/**\n * createInstance\n * @returns\n */\nexport const createInstance = (opts: ApplicationOptions): Application => {\n return new Application(opts)\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,KAAK,QAAQ,eAAe;AACrC,SAASC,YAAY;AACrB,SAASC,WAAW,EAAEC,aAAa;AACnC,SAASC,cAAc;AACvB,OAAOC,MAAM,IAAIC,mBAAmB;AAAiB,IAiC/CC,WAAW;EAIf,qBAAYC,IAAwB,EAAE;IAAA;IAAA;IAAA;IACpC,IAAI,CAACC,SAAS,GAAGD,IAAI,CAACE,EAAE;IAExBP,aAAa,CAACD,WAAW,CAACS,GAAG,EAAE,aAAa,EAAEP,cAAc,CAACQ,OAAO,CAAC;EACvE;EAAC;IAAA;IAAA,OAED,cAAaC,MAAmB,EAAEC,EAAU,EAAE;MAC5C,IAAI;QAAA;QACF,WAAwBD,MAAM,IAAI,CAAC,CAAC;UAAA,mBAA5BE,MAAM;UAANA,MAAM,4BAAG,CAAC,CAAC;QAEnB,IAAMC,YAAY,GAAG;UACnBC,GAAG,iBAAEF,MAAM,CAACE,GAAG,qDAAIX,mBAAmB,CAACW,GAAG;UAC1CC,IAAI,kBAAEH,MAAM,CAACG,IAAI,uDAAIZ,mBAAmB,CAACY,IAAI;UAC7CC,GAAG,iBAAEJ,MAAM,CAACI,GAAG,qDAAIb,mBAAmB,CAACa,GAAG;UAC1CC,QAAQ,EAAEL,MAAM,CAACK,QAAQ;UACzBC,MAAM,EAAEN,MAAM,CAACO;QACjB,CAAC;QAED,IAAMC,MAAM,GAAG,IAAIlB,MAAM,CAAC;UACxBI,SAAS,EAAE,IAAI,CAACA,SAAS;UACzBe,KAAK,EAAEX,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEW,KAAK;UACpBC,IAAI,EAAE;YACJC,KAAK,wBAAEb,MAAM,aAANA,MAAM,uCAANA,MAAM,CAAEY,IAAI,iDAAZ,aAAcC,KAAK,mEAAI,IAAI,CAACjB,SAAS,CAACkB,WAAW;YACxDC,MAAM,yBAAEf,MAAM,aAANA,MAAM,wCAANA,MAAM,CAAEY,IAAI,kDAAZ,cAAcG,MAAM,qEAAI,IAAI,CAACnB,SAAS,CAACoB;UACjD,CAAC;UACDd,MAAM,oBACDC,YAAY,CAChB;UACDc,WAAW,EAAE;YACXC,OAAO,EAAElB,MAAM,aAANA,MAAM,8CAANA,MAAM,CAAEiB,WAAW,wDAAnB,oBAAqBC,OAAO;YACrCC,IAAI,EAAEnB,MAAM,aAANA,MAAM,+CAANA,MAAM,CAAEiB,WAAW,yDAAnB,qBAAqBE;UAC7B;QACF,CAAC,CAAC;QACF,IAAI,CAACC,OAAO,GAAGV,MAAM;QAErBpB,aAAa,CAACD,WAAW,CAACS,GAAG,EAAE,WAAW,EAAEP,cAAc,CAACQ,OAAO,EAAEE,EAAE,CAAC;MACzE,CAAC,CACD,OAAOoB,KAAK,EAAE;QACZ/B,aAAa,CAACD,WAAW,CAACS,GAAG,EAAE,WAAW,EAAEP,cAAc,CAAC+B,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"names":["utils","getFnByFnkey","MessageType","sendToMessage","EMessageStatus","Anov3D","defaultCameraParams","Application","opts","container","el","Api","Success","params","id","camera","cameraParams","fov","near","far","position","lookAt","target","anov3D","model","size","width","clientWidth","height","clientHeight","environment","weather","time","iEngine","error","EventHandleFailed","console","req","name","init","Error","fn","res","Promise","resolve","then","failMessage","message","eventName","cb","storeManagement","set","createInstance"],"sources":["../src/applicationApi.ts"],"sourcesContent":["import { utils } from '@anov/3d-core'\nimport { getFnByFnkey } from './utils/index'\nimport { MessageType, sendToMessage } from './utils/messageFn'\nimport { EMessageStatus } from './messageStatus'\nimport Anov3D, { defaultCameraParams } from './index'\n\ntype ApplicationOptions = {\n el: HTMLElement\n}\n\nexport type InitOptions = {\n camera?: {\n fov?: number\n near?: number\n far?: number\n position?: [\n number,\n number,\n number,\n ]\n target?: [\n number,\n number,\n number,\n ]\n }\n model?: string\n size?: {\n width: number\n height: number\n }\n environment?: {\n weather?: string\n time?: number\n }\n}\n\nclass Application {\n private container: HTMLElement\n iEngine: Anov3D | undefined\n\n constructor(opts: ApplicationOptions) {\n this.container = opts.el\n\n sendToMessage(MessageType.Api, 'engineReady', EMessageStatus.Success)\n }\n\n private init(params: InitOptions, id: string) {\n try {\n const { camera = {} } = params || {}\n\n const cameraParams = {\n fov: camera.fov ?? defaultCameraParams.fov,\n near: camera.near ?? defaultCameraParams.near,\n far: camera.far ?? defaultCameraParams.far,\n position: camera.position,\n lookAt: camera.target,\n }\n\n const anov3D = new Anov3D({\n container: this.container,\n model: params?.model,\n size: {\n width: params?.size?.width ?? this.container.clientWidth,\n height: params?.size?.height ?? this.container.clientHeight,\n },\n camera: {\n ...cameraParams,\n },\n environment: {\n weather: params?.environment?.weather,\n time: params?.environment?.time,\n },\n })\n this.iEngine = anov3D\n\n sendToMessage(MessageType.Api, 'core.init', EMessageStatus.Success, id)\n }\n catch (error) {\n sendToMessage(MessageType.Api, 'core.init', EMessageStatus.EventHandleFailed)\n console.error(error)\n }\n }\n\n sendMessage(req: { name: string; id: string; params: any }) {\n if (req.name === 'Core.init' || req.name === 'core.init') {\n this.init(req.params, req.id)\n return\n }\n\n if (!this.iEngine)\n throw new Error('please init first')\n\n const fn = getFnByFnkey(this.iEngine, req.name, req.id) as any\n\n try {\n const res = fn(req.params)\n\n Promise.resolve(res).then((res) => {\n sendToMessage(MessageType.Api, req.name, EMessageStatus.Success, req.id, res)\n })\n }\n catch (error: any) {\n sendToMessage(MessageType.Api, req.name, EMessageStatus.EventHandleFailed, req.id, {\n failMessage: error.message,\n })\n }\n }\n\n receiveMessage(eventName: string, cb: (params: any) => void) {\n utils.storeManagement.set(eventName, cb)\n }\n}\n\n/**\n * createInstance\n * @returns\n */\nexport const createInstance = (opts: ApplicationOptions): Application => {\n return new Application(opts)\n}\n"],"mappings":"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"}
|
|
@@ -11,6 +11,22 @@ declare class Camera {
|
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
private caclCurrentPos;
|
|
14
|
+
/**
|
|
15
|
+
* caclTargetByPitch
|
|
16
|
+
* @param pitch
|
|
17
|
+
* @param target
|
|
18
|
+
* @param position
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
private caclTargetByPitch;
|
|
22
|
+
/**
|
|
23
|
+
* caclSingleCoordinate
|
|
24
|
+
* @param prevTarget
|
|
25
|
+
* @param prevPosition
|
|
26
|
+
* @param lastTarget
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
private caclSingleCoordinate;
|
|
14
30
|
/**
|
|
15
31
|
* handle camera changed
|
|
16
32
|
*/
|
|
@@ -5,7 +5,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
5
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
6
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
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 { Box3, Vector3 } from '@anov/3d-core';
|
|
8
|
+
import { Box3, MathUtils, Vector3 } from '@anov/3d-core';
|
|
9
9
|
import * as TWEEN from '@tweenjs/tween.js';
|
|
10
10
|
import { MessageType, sendToMessage } from "../../utils/messageFn";
|
|
11
11
|
import { EMessageStatus } from "../../messageStatus";
|
|
@@ -27,7 +27,7 @@ var Camera = /*#__PURE__*/function () {
|
|
|
27
27
|
*/
|
|
28
28
|
_createClass(Camera, [{
|
|
29
29
|
key: "caclCurrentPos",
|
|
30
|
-
value: function caclCurrentPos(currentPos) {
|
|
30
|
+
value: function caclCurrentPos(currentPos, pitch) {
|
|
31
31
|
var box = new Box3();
|
|
32
32
|
box.setFromPoints(currentPos.map(function (item) {
|
|
33
33
|
return new Vector3(item[0], item[1], item[2]);
|
|
@@ -40,13 +40,46 @@ var Camera = /*#__PURE__*/function () {
|
|
|
40
40
|
var directionVector = this.camera.position.clone().sub(this.controls.target).normalize(); // 相机指向物体中心的向量
|
|
41
41
|
|
|
42
42
|
var lastPosition = directionVector.multiplyScalar(cameraToCenterDistance).add(center);
|
|
43
|
-
var lastLookat = center;
|
|
43
|
+
var lastLookat = this.caclTargetByPitch(pitch, center, lastPosition);
|
|
44
44
|
return {
|
|
45
45
|
lastPosition: lastPosition,
|
|
46
46
|
lastLookat: lastLookat
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* caclTargetByPitch
|
|
52
|
+
* @param pitch
|
|
53
|
+
* @param target
|
|
54
|
+
* @param position
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
}, {
|
|
58
|
+
key: "caclTargetByPitch",
|
|
59
|
+
value: function caclTargetByPitch(pitch, target, position) {
|
|
60
|
+
var directionVector = new Vector3().subVectors(target, position);
|
|
61
|
+
var upVector = new Vector3(0, 1, 0);
|
|
62
|
+
var localPitchAxis = new Vector3().crossVectors(directionVector, upVector).normalize();
|
|
63
|
+
directionVector.applyAxisAngle(localPitchAxis, MathUtils.degToRad(pitch));
|
|
64
|
+
var distance = position.distanceTo(target);
|
|
65
|
+
var newTarget = position.clone().add(directionVector.normalize().multiplyScalar(distance));
|
|
66
|
+
return newTarget;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* caclSingleCoordinate
|
|
71
|
+
* @param prevTarget
|
|
72
|
+
* @param prevPosition
|
|
73
|
+
* @param lastTarget
|
|
74
|
+
* @returns
|
|
75
|
+
*/
|
|
76
|
+
}, {
|
|
77
|
+
key: "caclSingleCoordinate",
|
|
78
|
+
value: function caclSingleCoordinate(prevTarget, prevPosition, lastTarget) {
|
|
79
|
+
var directionVector = lastTarget.clone().sub(prevTarget).normalize();
|
|
80
|
+
return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition);
|
|
81
|
+
}
|
|
82
|
+
|
|
50
83
|
/**
|
|
51
84
|
* handle camera changed
|
|
52
85
|
*/
|
|
@@ -98,20 +131,22 @@ var Camera = /*#__PURE__*/function () {
|
|
|
98
131
|
isTrigger: true,
|
|
99
132
|
duration: (_params$duration = params.duration) !== null && _params$duration !== void 0 ? _params$duration : 0,
|
|
100
133
|
userInput: true,
|
|
101
|
-
pitch: pitch !== null && pitch !== void 0 ? pitch :
|
|
134
|
+
pitch: pitch !== null && pitch !== void 0 ? pitch : 40
|
|
102
135
|
});
|
|
103
136
|
}
|
|
104
137
|
};
|
|
105
138
|
};
|
|
106
139
|
if (Array.isArray(position[0])) {
|
|
107
140
|
var currentPos = position;
|
|
108
|
-
var _this2$caclCurrentPos = _this2.caclCurrentPos(currentPos),
|
|
141
|
+
var _this2$caclCurrentPos = _this2.caclCurrentPos(currentPos, 0),
|
|
109
142
|
lastPosition = _this2$caclCurrentPos.lastPosition,
|
|
110
143
|
lastLookat = _this2$caclCurrentPos.lastLookat;
|
|
111
144
|
_this2.moveCameraTo(lastPosition, lastLookat, moveOptions());
|
|
112
145
|
} else {
|
|
113
146
|
var _currentPos = position;
|
|
114
|
-
_this2.
|
|
147
|
+
var _lastPosition = _this2.caclSingleCoordinate(_this2.controls.target, _this2.camera.position, new Vector3().fromArray(_currentPos));
|
|
148
|
+
var _lastLookat = _this2.caclTargetByPitch(0, new Vector3().fromArray(_currentPos), _lastPosition);
|
|
149
|
+
_this2.moveCameraTo(_lastPosition, _lastLookat, moveOptions());
|
|
115
150
|
}
|
|
116
151
|
});
|
|
117
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Box3","Vector3","TWEEN","MessageType","sendToMessage","EMessageStatus","Camera","camera","controls","handleChanged","currentPos","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","addEventListener","isTransitionPeriod","lookat","Event","Success","undefined","toArray","params","Promise","res","pitch","duration","moveOptions","onUpdate","onComplate","isTrigger","userInput","Array","isArray","caclCurrentPos","moveCameraTo","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, 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[]) {\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 = center\n\n return {\n lastPosition,\n lastLookat,\n }\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 ?? 0,\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)\n\n this.moveCameraTo(\n lastPosition,\n lastLookat,\n moveOptions(),\n )\n }\n else {\n const currentPos = position as vector3Array\n this.moveCameraTo(\n this.camera.position,\n new Vector3().fromArray(currentPos),\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","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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"}
|
|
@@ -11,7 +11,8 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
11
11
|
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; }
|
|
12
12
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
13
13
|
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); }
|
|
14
|
-
import {
|
|
14
|
+
import { use } from '@anov/3d-core';
|
|
15
|
+
import { createRain, createSkyCloud, createSnow } from '@anov/3d-ability';
|
|
15
16
|
import createTimeSkySystem from "./time";
|
|
16
17
|
var Environment = /*#__PURE__*/function () {
|
|
17
18
|
function Environment(opts) {
|
|
@@ -23,25 +24,34 @@ var Environment = /*#__PURE__*/function () {
|
|
|
23
24
|
_defineProperty(this, "rain", null);
|
|
24
25
|
_defineProperty(this, "cloudReturn", null);
|
|
25
26
|
_defineProperty(this, "sky", void 0);
|
|
27
|
+
_defineProperty(this, "renderer", void 0);
|
|
26
28
|
_defineProperty(this, "setWeatherStrategy", {
|
|
27
29
|
Snow: function Snow() {
|
|
28
|
-
!_this.snow && (_this.snow =
|
|
29
|
-
|
|
30
|
+
!_this.snow && (_this.snow = createSnow(15, 10000, {
|
|
31
|
+
x: 0,
|
|
32
|
+
y: 3,
|
|
33
|
+
z: 0
|
|
34
|
+
}, 0.5, 50000));
|
|
35
|
+
_this.snow[0]();
|
|
36
|
+
_this.renderer.toneMappingExposure = 0.3;
|
|
30
37
|
},
|
|
31
38
|
Rain: function Rain() {
|
|
32
|
-
!_this.rain && (_this.rain =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
!_this.rain && (_this.rain = createRain(4, 10000, {
|
|
40
|
+
x: 0,
|
|
41
|
+
y: 10,
|
|
42
|
+
z: 0
|
|
43
|
+
}, 0.8, 100000));
|
|
44
|
+
_this.rain[0]();
|
|
45
|
+
_this.renderer.toneMappingExposure = 0.3;
|
|
36
46
|
},
|
|
37
|
-
|
|
38
47
|
Cloudy: function Cloudy() {
|
|
39
48
|
!_this.cloudReturn && (_this.cloudReturn = createSkyCloud());
|
|
40
49
|
},
|
|
41
50
|
Clear_Skies: function Clear_Skies() {
|
|
42
51
|
var _this$snow, _this$rain;
|
|
43
|
-
(_this$snow = _this.snow) === null || _this$snow === void 0 ? void 0 : _this$snow
|
|
44
|
-
(_this$rain = _this.rain) === null || _this$rain === void 0 ? void 0 : _this$rain
|
|
52
|
+
(_this$snow = _this.snow) === null || _this$snow === void 0 ? void 0 : _this$snow[1]();
|
|
53
|
+
(_this$rain = _this.rain) === null || _this$rain === void 0 ? void 0 : _this$rain[1]();
|
|
54
|
+
_this.renderer.toneMappingExposure = 0.6;
|
|
45
55
|
if (_this.cloudReturn) {
|
|
46
56
|
var _this$cloudReturn = _slicedToArray(_this.cloudReturn, 2),
|
|
47
57
|
_ = _this$cloudReturn[0],
|
|
@@ -51,11 +61,12 @@ var Environment = /*#__PURE__*/function () {
|
|
|
51
61
|
}
|
|
52
62
|
}
|
|
53
63
|
});
|
|
54
|
-
var _createTimeSkySystem = createTimeSkySystem(new Date(), 40, 116,
|
|
64
|
+
var _createTimeSkySystem = createTimeSkySystem(new Date(), 40, 116, 200),
|
|
55
65
|
_createTimeSkySystem2 = _slicedToArray(_createTimeSkySystem, 3),
|
|
56
66
|
setDate = _createTimeSkySystem2[0],
|
|
57
67
|
sun = _createTimeSkySystem2[1],
|
|
58
68
|
sky = _createTimeSkySystem2[2];
|
|
69
|
+
this.renderer = use.useScene().renderer;
|
|
59
70
|
this.setDate = setDate;
|
|
60
71
|
this.sky = sky;
|
|
61
72
|
this.opts = opts;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
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 type { Rain, Snow } from '@anov/3d-ability'\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\n constructor(opts?: EnvironmentOptions) {\n const [setDate, sun, sky] = createTimeSkySystem(new Date(), 40, 116, 200)\n this.renderer = use.useScene().renderer!\n\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 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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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anov/3d",
|
|
3
|
-
"version": "0.0.4-
|
|
3
|
+
"version": "0.0.4-alpha23",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [],
|
|
8
|
+
"main": "dist/index.js",
|
|
8
9
|
"module": "dist/index.js",
|
|
9
10
|
"types": "dist/index.d.ts",
|
|
10
11
|
"publishConfig": {
|
|
@@ -19,8 +20,8 @@
|
|
|
19
20
|
"@tweenjs/tween.js": "^21.0.0",
|
|
20
21
|
"localforage": "^1.10.0",
|
|
21
22
|
"uuid": "^9.0.1",
|
|
22
|
-
"@anov/3d-
|
|
23
|
-
"@anov/3d-
|
|
23
|
+
"@anov/3d-ability": "^0.0.4-alpha6",
|
|
24
|
+
"@anov/3d-core": "^0.0.4-alpha17"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@types/uuid": "^9.0.7"
|