@anov/3d 0.0.1-alpha.9 → 0.0.2

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.
@@ -2,6 +2,7 @@ import type { Scene } from 'three';
2
2
  import type { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
3
3
  import type { TransformControls } from '../control/transformControls';
4
4
  import type { PerspectiveCamera } from '../camera';
5
+ import type Group from '../group';
5
6
  declare class GlobalObjectManage {
6
7
  scene: Scene | null;
7
8
  triggerClick: boolean;
@@ -10,6 +11,7 @@ declare class GlobalObjectManage {
10
11
  orbitControls: OrbitControls | null;
11
12
  transformControls: TransformControls[];
12
13
  frameCallbacks: Set<() => void>;
14
+ groupCatch: Group[];
13
15
  constructor();
14
16
  addScene(object3d: Scene): void;
15
17
  setCamera(camera: PerspectiveCamera): void;
@@ -19,6 +21,7 @@ declare class GlobalObjectManage {
19
21
  setTriggerClickState(state: boolean): void;
20
22
  addFrameCallback(cb: () => void): void;
21
23
  removeFrameCallback(cb: () => void): void;
24
+ addCatch(group: Group): void;
22
25
  }
23
26
  declare const _default: GlobalObjectManage;
24
27
  export default _default;
@@ -8,6 +8,8 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
8
8
  var GlobalObjectManage = /*#__PURE__*/function () {
9
9
  // hooks callback
10
10
 
11
+ // instance
12
+
11
13
  function GlobalObjectManage() {
12
14
  _classCallCheck(this, GlobalObjectManage);
13
15
  _defineProperty(this, "scene", null);
@@ -17,6 +19,7 @@ var GlobalObjectManage = /*#__PURE__*/function () {
17
19
  _defineProperty(this, "orbitControls", null);
18
20
  _defineProperty(this, "transformControls", []);
19
21
  _defineProperty(this, "frameCallbacks", new Set());
22
+ _defineProperty(this, "groupCatch", []);
20
23
  }
21
24
  _createClass(GlobalObjectManage, [{
22
25
  key: "addScene",
@@ -58,6 +61,11 @@ var GlobalObjectManage = /*#__PURE__*/function () {
58
61
  value: function removeFrameCallback(cb) {
59
62
  this.frameCallbacks.delete(cb);
60
63
  }
64
+ }, {
65
+ key: "addCatch",
66
+ value: function addCatch(group) {
67
+ this.groupCatch.push(group);
68
+ }
61
69
  }]);
62
70
  return GlobalObjectManage;
63
71
  }();
@@ -1,8 +1,15 @@
1
+ import type { Intersection, Object3D } from 'three';
1
2
  import { Group as TGroup } from 'three';
2
3
  import type { CubeEventType, EventHandleFn } from '../type';
3
4
  declare class Group extends TGroup {
4
5
  private natureEventMap;
6
+ private object3d;
5
7
  constructor();
8
+ /**
9
+ * add model
10
+ * @param object
11
+ */
12
+ addModel(object: Object3D): void;
6
13
  /**
7
14
  * addNatureEventListener
8
15
  * @param type
@@ -20,10 +27,10 @@ declare class Group extends TGroup {
20
27
  */
21
28
  removeAllNatureEventListener(): void;
22
29
  /**
23
- * handle intersect event
24
- * @param intersects
25
- * @param eventType
26
- */
30
+ * handle intersect event
31
+ * @param intersects
32
+ * @param eventType
33
+ */
27
34
  private handleClick;
28
35
  /**
29
36
  * handle pointermove event
@@ -41,6 +48,6 @@ declare class Group extends TGroup {
41
48
  * raycastGroup
42
49
  * handle intersect event
43
50
  */
44
- raycastGroup(): void;
51
+ raycastGroup(intersets: Intersection<Object3D<Event>>[]): void;
45
52
  }
46
53
  export default Group;
@@ -2,6 +2,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
2
2
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3
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
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 _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
6
+ function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
5
7
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
6
8
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
7
9
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
@@ -22,15 +24,28 @@ var Group = /*#__PURE__*/function (_TGroup) {
22
24
  _classCallCheck(this, Group);
23
25
  _this = _super.call(this);
24
26
  _defineProperty(_assertThisInitialized(_this), "natureEventMap", new Map());
27
+ _defineProperty(_assertThisInitialized(_this), "object3d", []);
28
+ globalObjectManage.addCatch(_assertThisInitialized(_this));
25
29
  return _this;
26
30
  }
27
31
 
28
32
  /**
29
- * addNatureEventListener
30
- * @param type
31
- * @param handlefn
33
+ * add model
34
+ * @param object
32
35
  */
33
36
  _createClass(Group, [{
37
+ key: "addModel",
38
+ value: function addModel(object) {
39
+ _get(_getPrototypeOf(Group.prototype), "add", this).call(this, object);
40
+ this.object3d.push(object);
41
+ }
42
+
43
+ /**
44
+ * addNatureEventListener
45
+ * @param type
46
+ * @param handlefn
47
+ */
48
+ }, {
34
49
  key: "addNatureEventListener",
35
50
  value: function addNatureEventListener(type, handlefn) {
36
51
  if (!this.natureEventMap.has(type)) this.natureEventMap.set(type, []);
@@ -63,9 +78,9 @@ var Group = /*#__PURE__*/function (_TGroup) {
63
78
  }
64
79
 
65
80
  /**
66
- * handle intersect event
67
- * @param intersects
68
- * @param eventType
81
+ * handle intersect event
82
+ * @param intersects
83
+ * @param eventType
69
84
  */
70
85
  }, {
71
86
  key: "handleClick",
@@ -111,16 +126,8 @@ var Group = /*#__PURE__*/function (_TGroup) {
111
126
  */
112
127
  }, {
113
128
  key: "raycastGroup",
114
- value: function raycastGroup() {
115
- // const clickCallback = this.natureEventMap.get('click')
116
- // const pointerupCallback = this.natureEventMap.get('pointerup')
117
- // const pointerdownCallback = this.natureEventMap.get('pointerdown')
118
- // const pointermoveCallback = this.natureEventMap.get('pointermove')
119
-
120
- // clickCallback && clickCallback.length > 0 && this.handleClick(clickCallback)
121
- // pointerupCallback && pointerupCallback.length > 0 && this.handleClick(pointerupCallback)
122
- // pointerdownCallback && pointerdownCallback.length > 0 && this.handleClick(pointerdownCallback)
123
- // pointermoveCallback && pointermoveCallback.length > 0 && this.handlePointerMove(pointermoveCallback)
129
+ value: function raycastGroup(intersets) {
130
+ console.log('raycastGroup', intersets);
124
131
  }
125
132
  }]);
126
133
  return Group;
package/dist/core/line.js CHANGED
@@ -2,6 +2,16 @@ import { BoxGeometry, BufferAttribute, BufferGeometry, CatmullRomCurve3, Line, L
2
2
  import Mesh from "./mesh";
3
3
  import globalObjectManage from "./global/global";
4
4
  var point = new Vector3(0, 0, 0);
5
+
6
+ /**
7
+ * create control mesh
8
+ * @param position
9
+ * @param transformControl
10
+ * @param width
11
+ * @param height
12
+ * @param depth
13
+ * @returns
14
+ */
5
15
  var createSplineControlObject3d = function createSplineControlObject3d(position, transformControl) {
6
16
  var width = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
7
17
  var height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
@@ -18,9 +28,16 @@ var createSplineControlObject3d = function createSplineControlObject3d(position,
18
28
  globalObjectManage.scene.add(object);
19
29
  return object;
20
30
  };
31
+
32
+ /**
33
+ * create line
34
+ * @param positions
35
+ * @returns
36
+ */
21
37
  var createCatmullRomCurve3 = function createCatmullRomCurve3(positions) {
22
38
  var geometry = new BufferGeometry();
23
- geometry.setAttribute('position', new BufferAttribute(new Float32Array(200 * 3), 3));
39
+ var attr = new BufferAttribute(new Float32Array(200 * 3), 3);
40
+ geometry.setAttribute('position', attr);
24
41
  var curve = new CatmullRomCurve3(positions);
25
42
  curve.mesh = new Line(geometry.clone(), new LineBasicMaterial({
26
43
  color: 'red',
@@ -28,6 +45,11 @@ var createCatmullRomCurve3 = function createCatmullRomCurve3(positions) {
28
45
  }));
29
46
  return curve;
30
47
  };
48
+
49
+ /**
50
+ * uodate line
51
+ * @param curve
52
+ */
31
53
  var updateCatmullRomCurve3 = function updateCatmullRomCurve3(curve) {
32
54
  var splineMesh = curve.mesh;
33
55
  var position = splineMesh.geometry.attributes.position;
@@ -39,10 +39,6 @@ declare class Mesh extends TMesh {
39
39
  * @param natureEvent
40
40
  */
41
41
  private handlePointerleave;
42
- /**
43
- * bubbling
44
- */
45
- private bubbling;
46
42
  /**
47
43
  * handle mesh raycaster
48
44
  * @param raycaster
package/dist/core/mesh.js CHANGED
@@ -15,8 +15,6 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
15
15
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
16
16
  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); }
17
17
  import { Mesh as TMesh } from 'three';
18
- import { getObject3dAncestorsNodes } from "../utils";
19
- import Group from "./group";
20
18
  import globalObjectManage from "./global/global";
21
19
  var Mesh = /*#__PURE__*/function (_TMesh) {
22
20
  _inherits(Mesh, _TMesh);
@@ -113,18 +111,6 @@ var Mesh = /*#__PURE__*/function (_TMesh) {
113
111
  });
114
112
  }
115
113
 
116
- /**
117
- * bubbling
118
- */
119
- }, {
120
- key: "bubbling",
121
- value: function bubbling() {
122
- var ancestorsNodes = getObject3dAncestorsNodes(this);
123
- ancestorsNodes.forEach(function (node) {
124
- if (node instanceof Group) node.raycastGroup();
125
- });
126
- }
127
-
128
114
  /**
129
115
  * handle mesh raycaster
130
116
  * @param raycaster
@@ -143,10 +129,6 @@ var Mesh = /*#__PURE__*/function (_TMesh) {
143
129
  var object = intersect && intersect.object;
144
130
  if (object === this) {
145
131
  this.entered = true;
146
-
147
- // bubbling
148
- // this.bubbling()
149
-
150
132
  clickCallback && clickCallback.length > 0 && this.handleClick(clickCallback, intersect);
151
133
  pointerupCallback && pointerupCallback.length > 0 && this.handleClick(pointerupCallback, intersect);
152
134
  pointerdownCallback && pointerdownCallback.length > 0 && this.handleClick(pointerdownCallback, intersect);
@@ -1,3 +1,4 @@
1
+ import type { Group } from 'three';
1
2
  import type { GLTF } from 'three/examples/jsm/loaders/GLTFLoader';
2
3
  declare class ModelLoader {
3
4
  /**
@@ -16,6 +17,13 @@ declare class ModelLoader {
16
17
  * @param onProgress
17
18
  * @param onError
18
19
  */
19
- loadFbx(url: string, onLoad?: (result: GLTF) => GLTF, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
20
+ loadFbx(url: string, onLoad?: (result: Group) => Group, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): Promise<unknown>;
21
+ /**
22
+ * parse fbx buffer
23
+ * @param buffer
24
+ * @param path
25
+ * @returns
26
+ */
27
+ parseFbxBuffer(buffer: ArrayBuffer | string, path: string): Group;
20
28
  }
21
29
  export default ModelLoader;
@@ -6,6 +6,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
6
6
  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); }
7
7
  import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
8
8
  import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
9
+ import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader';
9
10
  var ModelLoader = /*#__PURE__*/function () {
10
11
  function ModelLoader() {
11
12
  _classCallCheck(this, ModelLoader);
@@ -53,7 +54,31 @@ var ModelLoader = /*#__PURE__*/function () {
53
54
  */
54
55
  }, {
55
56
  key: "loadFbx",
56
- value: function loadFbx(url, onLoad, onProgress, onError) {}
57
+ value: function loadFbx(url, onLoad, onProgress, onError) {
58
+ var fbxLoader = new FBXLoader();
59
+ return new Promise(function (resolve, reject) {
60
+ fbxLoader.load(url, function (fbx) {
61
+ onLoad ? resolve(onLoad(fbx)) : resolve(fbx);
62
+ }, function (xhr) {
63
+ onProgress && onProgress(xhr);
64
+ }, function (err) {
65
+ onError && onError(err);
66
+ reject(err);
67
+ });
68
+ });
69
+ }
70
+
71
+ /**
72
+ * parse fbx buffer
73
+ * @param buffer
74
+ * @param path
75
+ * @returns
76
+ */
77
+ }, {
78
+ key: "parseFbxBuffer",
79
+ value: function parseFbxBuffer(buffer, path) {
80
+ return new FBXLoader().parse(buffer, path);
81
+ }
57
82
  }]);
58
83
  return ModelLoader;
59
84
  }();
@@ -1,20 +1,24 @@
1
- import type { Color, Object3D } from 'three';
1
+ import type { Color, ColorRepresentation, Object3D, ToneMapping } from 'three';
2
2
  import { AmbientLight, Raycaster, Scene as TScene, Vector3, WebGLRenderer } from 'three';
3
3
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
4
4
  import Cssrenderer from './cssRenderer';
5
5
  import { PerspectiveCamera } from './camera';
6
- interface Anov3DSceneOptions {
7
- /**
8
- * renderer options
9
- */
6
+ interface SceneOptions {
7
+ /** renderer options */
10
8
  rendererOps?: {
11
9
  antialias?: boolean;
12
10
  logarithmicDepthBuffer?: boolean;
13
11
  alpha?: boolean;
12
+ shadowMap?: boolean;
13
+ toneMapping?: ToneMapping;
14
+ toneMappingExposure?: number;
15
+ size?: {
16
+ width: number;
17
+ height: number;
18
+ updateStyle?: boolean;
19
+ };
14
20
  };
15
- /**
16
- * default camera options
17
- */
21
+ /** default camera options */
18
22
  defCameraOps?: {
19
23
  position?: Vector3;
20
24
  fov?: number;
@@ -22,43 +26,45 @@ interface Anov3DSceneOptions {
22
26
  near?: number;
23
27
  far?: number;
24
28
  };
25
- /**
26
- * default ambient light options
27
- */
29
+ /** default ambient light options */
28
30
  defAmbientLightOps?: {
29
31
  position?: Vector3;
30
32
  color?: Color;
31
33
  intensity?: number;
32
34
  };
33
- /**
34
- * controls
35
- */
35
+ /** 默认射线检测配置 */
36
+ defRaycasterOps?: {
37
+ recursive?: boolean;
38
+ };
39
+ /** controls */
36
40
  orbitControls?: boolean;
37
- /**
38
- * 是否需要默认环境光
39
- */
41
+ /** 是否需要默认环境光 */
40
42
  ambientLight?: boolean;
41
- /**
42
- * on demand render scene, 按需渲染
43
- */
43
+ /** on demand render scene, 按需渲染 */
44
44
  onDemand?: boolean;
45
- /**
46
- * 是否开启css2d渲染
47
- */
45
+ /** 是否开启css2d渲染 */
48
46
  css2DRenderer?: boolean;
49
- /**
50
- * 是否开启css3d渲染
51
- */
47
+ /** 是否开启css3d渲染 */
52
48
  css3DRenderer?: boolean;
49
+ /** 是否开启裁剪 */
50
+ cutout?: boolean;
51
+ /** 场景背景相关 */
53
52
  background?: {
54
53
  imgs?: Tuple<string>;
55
54
  color?: Color;
56
55
  panorama?: string;
56
+ alpha?: number;
57
57
  };
58
58
  }
59
59
  declare type Tuple<TItem> = [TItem, ...TItem[]] & {
60
60
  length: 6;
61
61
  };
62
+ interface CutoutAreaType {
63
+ x: number;
64
+ y: number;
65
+ width: number;
66
+ height: number;
67
+ }
62
68
  declare class Scene {
63
69
  private opts;
64
70
  private pointer;
@@ -69,7 +75,13 @@ declare class Scene {
69
75
  renderer: WebGLRenderer | null;
70
76
  cssRenderer: Cssrenderer | null;
71
77
  controls: OrbitControls | null;
72
- constructor(opts?: Anov3DSceneOptions);
78
+ domElement: HTMLElement | null;
79
+ /** 裁剪相关 */
80
+ cutoutCamera: PerspectiveCamera | null;
81
+ cutoutBackground: ColorRepresentation | null;
82
+ cutoutBackgroundAlpha: number;
83
+ cutoutArea: CutoutAreaType;
84
+ constructor(opts?: SceneOptions);
73
85
  /**
74
86
  * init default scene components
75
87
  */
@@ -84,7 +96,21 @@ declare class Scene {
84
96
  * init renderer
85
97
  */
86
98
  private initRenderer;
99
+ /**
100
+ * main view cut
101
+ * @param renderer
102
+ */
103
+ private cutMain;
104
+ /**
105
+ * mini view cut
106
+ * @param renderer
107
+ */
108
+ private cutSub;
87
109
  private initCssRenderer;
110
+ /**
111
+ * init skybox
112
+ * @param imgs
113
+ */
88
114
  private initSkyBox;
89
115
  /**
90
116
  * init default camera
@@ -138,7 +164,12 @@ declare class Scene {
138
164
  * @param target
139
165
  */
140
166
  private registerEvent;
167
+ /**
168
+ * render scene
169
+ * @param target
170
+ */
141
171
  render(target: HTMLElement): void;
172
+ private updateRenderForCut;
142
173
  destroy(): void;
143
174
  }
144
175
  export default Scene;
@@ -15,6 +15,8 @@ import globalControl from "./global/globalControl";
15
15
  import globalObjectManage from "./global/global";
16
16
  import { PerspectiveCamera } from "./camera";
17
17
  var Scene = /*#__PURE__*/function () {
18
+ /** 裁剪相关 */
19
+
18
20
  function Scene(opts) {
19
21
  _classCallCheck(this, Scene);
20
22
  _defineProperty(this, "opts", {});
@@ -26,6 +28,16 @@ var Scene = /*#__PURE__*/function () {
26
28
  _defineProperty(this, "renderer", null);
27
29
  _defineProperty(this, "cssRenderer", null);
28
30
  _defineProperty(this, "controls", null);
31
+ _defineProperty(this, "domElement", null);
32
+ _defineProperty(this, "cutoutCamera", null);
33
+ _defineProperty(this, "cutoutBackground", null);
34
+ _defineProperty(this, "cutoutBackgroundAlpha", 1);
35
+ _defineProperty(this, "cutoutArea", {
36
+ x: 0,
37
+ y: 0,
38
+ width: 0,
39
+ height: 0
40
+ });
29
41
  this.opts = opts !== null && opts !== void 0 ? opts : {};
30
42
  this.scene = new TScene();
31
43
  this.raycaster = new Raycaster();
@@ -44,8 +56,6 @@ var Scene = /*#__PURE__*/function () {
44
56
  this.camera = camera;
45
57
  globalObjectManage.setCamera(camera);
46
58
  this.scene.add(camera);
47
- var renderer = this.initRenderer();
48
- this.renderer = renderer;
49
59
  if (this.opts.css2DRenderer) {
50
60
  var cssRenderer = this.initCssRenderer();
51
61
  this.cssRenderer = cssRenderer;
@@ -78,27 +88,72 @@ var Scene = /*#__PURE__*/function () {
78
88
  }, {
79
89
  key: "initRenderer",
80
90
  value: function initRenderer() {
81
- var _rendererOps$antialia, _rendererOps$logarith, _rendererOps$alpha;
91
+ var _rendererOps$antialia, _rendererOps$logarith, _rendererOps$alpha, _rendererOps$shadowMa, _rendererOps$toneMapp, _rendererOps$toneMapp2;
82
92
  var rendererOps = this.opts.rendererOps || {};
83
93
  var renderer = new WebGLRenderer({
84
94
  antialias: (_rendererOps$antialia = rendererOps.antialias) !== null && _rendererOps$antialia !== void 0 ? _rendererOps$antialia : true,
85
95
  logarithmicDepthBuffer: (_rendererOps$logarith = rendererOps.logarithmicDepthBuffer) !== null && _rendererOps$logarith !== void 0 ? _rendererOps$logarith : true,
86
96
  alpha: (_rendererOps$alpha = rendererOps.alpha) !== null && _rendererOps$alpha !== void 0 ? _rendererOps$alpha : false
87
97
  });
88
- renderer.setSize(window.innerWidth, window.innerHeight);
89
- renderer.shadowMap.enabled = true;
90
- renderer.toneMapping = ACESFilmicToneMapping;
91
- renderer.toneMappingExposure = 0.3;
98
+ this.cutMain(renderer);
99
+ renderer.shadowMap.enabled = (_rendererOps$shadowMa = rendererOps.shadowMap) !== null && _rendererOps$shadowMa !== void 0 ? _rendererOps$shadowMa : true;
100
+ renderer.toneMapping = (_rendererOps$toneMapp = rendererOps.toneMapping) !== null && _rendererOps$toneMapp !== void 0 ? _rendererOps$toneMapp : ACESFilmicToneMapping;
101
+ renderer.toneMappingExposure = (_rendererOps$toneMapp2 = rendererOps.toneMappingExposure) !== null && _rendererOps$toneMapp2 !== void 0 ? _rendererOps$toneMapp2 : 0.3;
92
102
  renderer.setPixelRatio(window.devicePixelRatio);
93
103
  return renderer;
94
104
  }
105
+
106
+ /**
107
+ * main view cut
108
+ * @param renderer
109
+ */
110
+ }, {
111
+ key: "cutMain",
112
+ value: function cutMain(renderer) {
113
+ var _rendererOps$size$wid, _rendererOps$size, _rendererOps$size$hei, _rendererOps$size2, _this$opts$background3, _this$opts$background4;
114
+ var rendererOps = this.opts.rendererOps || {};
115
+ var w = (_rendererOps$size$wid = (_rendererOps$size = rendererOps.size) === null || _rendererOps$size === void 0 ? void 0 : _rendererOps$size.width) !== null && _rendererOps$size$wid !== void 0 ? _rendererOps$size$wid : window.innerWidth;
116
+ var h = (_rendererOps$size$hei = (_rendererOps$size2 = rendererOps.size) === null || _rendererOps$size2 === void 0 ? void 0 : _rendererOps$size2.height) !== null && _rendererOps$size$hei !== void 0 ? _rendererOps$size$hei : window.innerHeight;
117
+ renderer.setClearColor(((_this$opts$background3 = this.opts.background) === null || _this$opts$background3 === void 0 ? void 0 : _this$opts$background3.color) || 0x000000, ((_this$opts$background4 = this.opts.background) === null || _this$opts$background4 === void 0 ? void 0 : _this$opts$background4.alpha) || 1);
118
+ renderer.setSize(w, h);
119
+ renderer.setScissor(0, 0, w, h);
120
+ renderer.render(this.scene, this.camera);
121
+ }
122
+
123
+ /**
124
+ * mini view cut
125
+ * @param renderer
126
+ */
127
+ }, {
128
+ key: "cutSub",
129
+ value: function cutSub(renderer) {
130
+ var _rendererOps$size$wid2, _rendererOps$size3, _this$cutoutBackgroun;
131
+ var rendererOps = this.opts.rendererOps || {};
132
+ var w = (_rendererOps$size$wid2 = (_rendererOps$size3 = rendererOps.size) === null || _rendererOps$size3 === void 0 ? void 0 : _rendererOps$size3.width) !== null && _rendererOps$size$wid2 !== void 0 ? _rendererOps$size$wid2 : window.innerWidth;
133
+ // const h = rendererOps.size?.height ?? window.innerHeight
134
+
135
+ // 位置 目前默认右上角
136
+ renderer.setClearColor((_this$cutoutBackgroun = this.cutoutBackground) !== null && _this$cutoutBackgroun !== void 0 ? _this$cutoutBackgroun : 0x000000, this.cutoutBackgroundAlpha);
137
+ renderer.setScissor(w - this.cutoutArea.width, 0, this.cutoutArea.width, this.cutoutArea.height);
138
+ renderer.setViewport(w - this.cutoutArea.width, 0, this.cutoutArea.width, this.cutoutArea.height);
139
+ renderer.render(this.scene, this.cutoutCamera);
140
+ }
95
141
  }, {
96
142
  key: "initCssRenderer",
97
143
  value: function initCssRenderer() {
144
+ var _rendererOps$size$wid3, _rendererOps$size4, _rendererOps$size$hei2, _rendererOps$size5;
145
+ var rendererOps = this.opts.rendererOps || {};
146
+ var w = (_rendererOps$size$wid3 = (_rendererOps$size4 = rendererOps.size) === null || _rendererOps$size4 === void 0 ? void 0 : _rendererOps$size4.width) !== null && _rendererOps$size$wid3 !== void 0 ? _rendererOps$size$wid3 : window.innerWidth;
147
+ var h = (_rendererOps$size$hei2 = (_rendererOps$size5 = rendererOps.size) === null || _rendererOps$size5 === void 0 ? void 0 : _rendererOps$size5.height) !== null && _rendererOps$size$hei2 !== void 0 ? _rendererOps$size$hei2 : window.innerHeight;
98
148
  var cssRenderer = new Cssrenderer('base');
99
- cssRenderer.setSize(window.innerWidth, window.innerHeight);
149
+ cssRenderer.setSize(w, h);
100
150
  return cssRenderer;
101
151
  }
152
+
153
+ /**
154
+ * init skybox
155
+ * @param imgs
156
+ */
102
157
  }, {
103
158
  key: "initSkyBox",
104
159
  value: function initSkyBox(imgs) {
@@ -116,7 +171,8 @@ var Scene = /*#__PURE__*/function () {
116
171
  key: "initDefaultPerspectiveCamera",
117
172
  value: function initDefaultPerspectiveCamera() {
118
173
  var rendererOps = this.opts.defCameraOps || {};
119
- var camera = new PerspectiveCamera(rendererOps.fov || 90, window.innerWidth / window.innerHeight, rendererOps.near || 0.1, rendererOps.far || 5000);
174
+ var aspect = rendererOps.aspect || window.innerWidth / window.innerHeight;
175
+ var camera = new PerspectiveCamera(rendererOps.fov || 90, aspect, rendererOps.near || 0.1, rendererOps.far || 5000);
120
176
  var position = rendererOps.position || new Vector3(0, 10, 10);
121
177
  camera.position.set(position.x, position.y, position.z);
122
178
  return camera;
@@ -154,7 +210,9 @@ var Scene = /*#__PURE__*/function () {
154
210
  });
155
211
  globalControl.update();
156
212
  TWEEN.update();
157
- this.renderer.render(this.scene, this.camera);
213
+
214
+ // if need cutout
215
+ if (this.opts.cutout) this.updateRenderForCut();else this.renderer.render(this.scene, this.camera);
158
216
  this.cssRenderer && this.cssRenderer.render(this.scene, this.camera);
159
217
  this.controls && this.controls.update();
160
218
  requestAnimationFrame(function () {
@@ -178,19 +236,30 @@ var Scene = /*#__PURE__*/function () {
178
236
  }, {
179
237
  key: "updateRaycaster",
180
238
  value: function updateRaycaster() {
239
+ var _raycasterOps$recursi;
240
+ var raycasterOps = this.opts.defRaycasterOps || {};
181
241
  this.raycaster.setFromCamera(this.pointer, this.camera);
182
242
 
183
243
  // need expand
184
244
  var object3ds = this.scene.children.filter(function (item) {
185
245
  return item instanceof Mesh;
186
246
  });
187
- this.raycaster.intersectObjects(object3ds);
247
+ this.raycaster.intersectObjects(object3ds, (_raycasterOps$recursi = raycasterOps.recursive) !== null && _raycasterOps$recursi !== void 0 ? _raycasterOps$recursi : false);
248
+
249
+ // group的拾取,构建一个mesh?
250
+
251
+ // const intersects = this.raycaster!.intersectObjects(this.scene!.children, false)
252
+ // globalObjectManage.groupCatch.forEach((group) => {
253
+ // if (intersects.length > 0)
254
+ // group.raycastGroup(intersects as Intersection<Object3D<Event>>[])
255
+ // })
188
256
  }
189
257
  }, {
190
258
  key: "getPointerPosition",
191
259
  value: function getPointerPosition(event) {
192
- this.pointer.setX(event.clientX / window.innerWidth * 2 - 1);
193
- this.pointer.setY(-(event.clientY / window.innerHeight) * 2 + 1);
260
+ var container = this.domElement;
261
+ this.pointer.setX((event.clientX - container.getBoundingClientRect().left) / container.getBoundingClientRect().width * 2 - 1);
262
+ this.pointer.setY(-((event.clientY - container.getBoundingClientRect().top) / container.getBoundingClientRect().height) * 2 + 1);
194
263
  }
195
264
 
196
265
  /**
@@ -266,13 +335,21 @@ var Scene = /*#__PURE__*/function () {
266
335
  return _this3.onPointerLeave(e);
267
336
  });
268
337
  }
338
+
339
+ /**
340
+ * render scene
341
+ * @param target
342
+ */
269
343
  }, {
270
344
  key: "render",
271
345
  value: function render(target) {
272
346
  var _this4 = this;
273
347
  emitter.emit('before-render');
348
+ var renderer = this.initRenderer();
349
+ this.renderer = renderer;
274
350
  var currentControlDom = null;
275
351
  var domElement = this.renderer.domElement;
352
+ this.domElement = domElement;
276
353
  if (this.cssRenderer) {
277
354
  currentControlDom = this.cssRenderer.cssRenderer.domElement;
278
355
  target.appendChild(currentControlDom);
@@ -291,6 +368,13 @@ var Scene = /*#__PURE__*/function () {
291
368
  });
292
369
  emitter.emit('after-render');
293
370
  }
371
+ }, {
372
+ key: "updateRenderForCut",
373
+ value: function updateRenderForCut() {
374
+ this.renderer.setScissorTest(true);
375
+ this.cutMain(this.renderer);
376
+ this.cutSub(this.renderer);
377
+ }
294
378
  }, {
295
379
  key: "destroy",
296
380
  value: function destroy() {