@anov/3d-ability 0.0.71 → 0.0.74

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.
@@ -61,10 +61,12 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
61
61
  this.uniforms.isFresnelFadeIn.value = false;
62
62
  this.uniforms.isPureFadeIn.value = false;
63
63
  this.uniforms.isFrameFadeIn.value = false;
64
+ var oldObject = new Group();
64
65
  var finalObject = new Group();
65
66
  var frameObject = new Group();
66
67
  var pureObject = new Group();
67
68
  var realObject = new Group();
69
+ this.add(oldObject);
68
70
  this.add(finalObject);
69
71
  this.add(frameObject);
70
72
  this.add(pureObject);
@@ -73,6 +75,7 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
73
75
  this.objectMap.set('Pure', pureObject);
74
76
  this.objectMap.set('Frame', frameObject);
75
77
  this.objectMap.set('Real', realObject);
78
+ this.objectMap.set('Old', oldObject);
76
79
  }
77
80
 
78
81
  /**
@@ -99,6 +102,10 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
99
102
  duration: 2.0,
100
103
  ease: 'linear',
101
104
  onComplete: function onComplete() {
105
+ if (type === 'Real') {
106
+ _this2.objectMap.get('Old').visible = true;
107
+ _this2.objectMap.get('Real').visible = false;
108
+ }
102
109
  _this2.dispatchEvent({
103
110
  type: 'onStyleChanged',
104
111
  style: type
@@ -115,7 +122,13 @@ export var MaterialSwitchSystem = /*#__PURE__*/function (_Object3D) {
115
122
  }, {
116
123
  key: "addObject",
117
124
  value: function addObject(object) {
125
+ if (this.type === 'Real') {
126
+ this.objectMap.get('Old').visible = true;
127
+ this.objectMap.get('Real').visible = false;
128
+ }
118
129
  this.objects.push(object);
130
+ var oldObject = object.clone();
131
+ this.objectMap.get('Old').add(oldObject);
119
132
  var realObject = object.clone();
120
133
  this.generateRealObject(realObject);
121
134
  this.objectMap.get('Real').add(realObject);
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","Color","Group","MeshBasicMaterial","Object3D","Vector3","gsap","disposeMaterial","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToRealFade","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","objects","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","progress","value","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","Map","generate","_createClass","key","uniforms","finalObject","frameObject","pureObject","realObject","add","objectMap","set","switchType","type","_this$frame","_this2","frame","kill","forEach","object","visible","get","concat","to","duration","ease","onComplete","dispatchEvent","style","addObject","push","clone","generateRealObject","generateFinalObject","generatePureObject","generateFrameObject","traverse","child","material","newMaterial","color","transparent","depthTest","depthWrite","opacity","getMaxSize","removeObject","splice","indexOf","cloneGroup","children","userData","entityParams","id","remove","box3","setFromObject","size","getSize","Math","max","x","z"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Color, Group, MeshBasicMaterial, Object3D, Vector3, gsap } from '@anov/3d-core'\nimport { disposeMaterial, injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n\n private objects: Object3D[] = []\n private frame: gsap.core.Tween | null = null\n private box3 = new Box3()\n\n public uniforms = {\n progress: { value: 0.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: false },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n }\n\n private objectMap = new Map<string, Object3D>()\n\n constructor(objects: Object3D[]) {\n super()\n\n this.objects = objects\n this.generate()\n }\n\n private generate() {\n this.uniforms.progress.value = 1.0\n\n this.uniforms.isRealFadeIn.value = true\n this.uniforms.isFresnelFadeIn.value = false\n this.uniforms.isPureFadeIn.value = false\n this.uniforms.isFrameFadeIn.value = false\n\n const finalObject = new Group()\n const frameObject = new Group()\n const pureObject = new Group()\n const realObject = new Group()\n\n this.add(finalObject)\n this.add(frameObject)\n this.add(pureObject)\n this.add(realObject)\n\n this.objectMap.set('Fresnel', finalObject)\n this.objectMap.set('Pure', pureObject)\n this.objectMap.set('Frame', frameObject)\n this.objectMap.set('Real', realObject)\n }\n\n /**\n * switch type\n * @param type\n */\n public switchType(type: MaterialSwitchType) {\n if (this.type === type)\n return\n\n this.frame?.kill()\n\n this.objectMap.forEach((object) => {\n object.visible = false\n })\n\n this.objectMap.get(type).visible = true\n this.objectMap.get(this.type).visible = true\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${type}FadeIn`].value = true\n\n this.frame = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: 2.0,\n ease: 'linear',\n onComplete: () => {\n this.dispatchEvent({\n type: 'onStyleChanged',\n style: type,\n })\n },\n })\n\n this.type = type\n }\n\n /**\n * add object\n * @param object\n */\n public addObject(object: Object3D) {\n this.objects.push(object)\n\n const realObject = object.clone()\n this.generateRealObject(realObject)\n this.objectMap.get('Real').add(realObject)\n\n const finalObject = object.clone()\n this.generateFinalObject(finalObject)\n this.objectMap.get('Fresnel').add(finalObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.objectMap.get('Pure').add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.objectMap.get('Frame').add(frameObject)\n\n object.traverse((child: any) => {\n if (child.type === 'Mesh') {\n disposeMaterial(child.material)\n const newMaterial = new MeshBasicMaterial({ color: new Color('#fff'), transparent: true, depthTest: false, depthWrite: false, opacity: 0 })\n child.material = newMaterial\n }\n })\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * remove object\n * @param object\n */\n public removeObject(object: Object3D) {\n this.objects.splice(this.objects.indexOf(object), 1)\n\n this.objectMap.forEach((cloneGroup) => {\n cloneGroup.children.forEach((child) => {\n if (child.userData.entityParams.id === object.userData.entityParams.id)\n cloneGroup.remove(child)\n })\n })\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * get max size\n * @param object\n * @returns\n */\n private getMaxSize() {\n this.box3.setFromObject(this.objectMap.get('Real'))\n const size = this.box3.getSize(new Vector3())\n const maxSize = Math.max(size.x, size.z)\n return maxSize\n }\n\n /**\n * generate final object\n * @param object\n */\n private generateFinalObject(object: Object3D) {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n /**\n * generate real object\n * @param object\n */\n private generateRealObject(object: Object3D) {\n injectToRealFade(object, this.uniforms)\n }\n\n /**\n * generate pure object\n * @param object\n */\n private generatePureObject(object: Object3D) {\n injectToBaseWrite(object, this.uniforms)\n }\n\n /**\n * generate frame object\n * @param object\n */\n private generateFrameObject(object: Object3D) {\n injectToFrameFade(object, this.uniforms)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","Color","Group","MeshBasicMaterial","Object3D","Vector3","gsap","disposeMaterial","injectToBaseWrite","injectToFinirMaterial","injectToFrameFade","injectToRealFade","MaterialSwitchSystem","_Object3D","_inherits","_super","_createSuper","objects","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","progress","value","isFresnelFadeIn","isRealFadeIn","isPureFadeIn","isFrameFadeIn","maxSize","Map","generate","_createClass","key","uniforms","oldObject","finalObject","frameObject","pureObject","realObject","add","objectMap","set","switchType","type","_this$frame","_this2","frame","kill","forEach","object","visible","get","concat","to","duration","ease","onComplete","dispatchEvent","style","addObject","push","clone","generateRealObject","generateFinalObject","generatePureObject","generateFrameObject","traverse","child","material","newMaterial","color","transparent","depthTest","depthWrite","opacity","getMaxSize","removeObject","splice","indexOf","cloneGroup","children","userData","entityParams","id","remove","box3","setFromObject","size","getSize","Math","max","x","z"],"sources":["../../../src/business/MaterialSwitch/MaterialSwitchSystem.ts"],"sourcesContent":["import { Box3, Color, Group, MeshBasicMaterial, Object3D, Vector3, gsap } from '@anov/3d-core'\nimport { disposeMaterial, injectToBaseWrite, injectToFinirMaterial, injectToFrameFade, injectToRealFade } from './inject'\nimport type { MaterialSwitchSystemInterface } from '.'\n\ntype MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'\n\n/**\n * 材质切换系统\n */\nexport class MaterialSwitchSystem extends Object3D implements MaterialSwitchSystemInterface {\n public type: MaterialSwitchType = 'Real'\n\n private objects: Object3D[] = []\n private frame: gsap.core.Tween | null = null\n private box3 = new Box3()\n\n public uniforms = {\n progress: { value: 0.0 },\n isFresnelFadeIn: { value: false },\n isRealFadeIn: { value: false },\n isPureFadeIn: { value: false },\n isFrameFadeIn: { value: false },\n maxSize: { value: 0 },\n }\n\n private objectMap = new Map<string, Object3D>()\n\n constructor(objects: Object3D[]) {\n super()\n\n this.objects = objects\n this.generate()\n }\n\n private generate() {\n this.uniforms.progress.value = 1.0\n\n this.uniforms.isRealFadeIn.value = true\n this.uniforms.isFresnelFadeIn.value = false\n this.uniforms.isPureFadeIn.value = false\n this.uniforms.isFrameFadeIn.value = false\n\n const oldObject = new Group()\n const finalObject = new Group()\n const frameObject = new Group()\n const pureObject = new Group()\n const realObject = new Group()\n\n this.add(oldObject)\n this.add(finalObject)\n this.add(frameObject)\n this.add(pureObject)\n this.add(realObject)\n\n this.objectMap.set('Fresnel', finalObject)\n this.objectMap.set('Pure', pureObject)\n this.objectMap.set('Frame', frameObject)\n this.objectMap.set('Real', realObject)\n this.objectMap.set('Old', oldObject)\n }\n\n /**\n * switch type\n * @param type\n */\n public switchType(type: MaterialSwitchType) {\n if (this.type === type)\n return\n\n this.frame?.kill()\n\n this.objectMap.forEach((object) => {\n object.visible = false\n })\n\n this.objectMap.get(type).visible = true\n this.objectMap.get(this.type).visible = true\n\n this.uniforms.progress.value = 0.0\n this.uniforms[`is${this.type}FadeIn`].value = false\n this.uniforms[`is${type}FadeIn`].value = true\n\n this.frame = gsap.to(this.uniforms.progress, {\n value: 1.0,\n duration: 2.0,\n ease: 'linear',\n onComplete: () => {\n if (type === 'Real') {\n this.objectMap.get('Old').visible = true\n this.objectMap.get('Real').visible = false\n }\n\n this.dispatchEvent({\n type: 'onStyleChanged',\n style: type,\n })\n },\n })\n\n this.type = type\n }\n\n /**\n * add object\n * @param object\n */\n public addObject(object: Object3D) {\n if (this.type === 'Real') {\n this.objectMap.get('Old').visible = true\n this.objectMap.get('Real').visible = false\n }\n\n this.objects.push(object)\n\n const oldObject = object.clone()\n this.objectMap.get('Old').add(oldObject)\n\n const realObject = object.clone()\n this.generateRealObject(realObject)\n this.objectMap.get('Real').add(realObject)\n\n const finalObject = object.clone()\n this.generateFinalObject(finalObject)\n this.objectMap.get('Fresnel').add(finalObject)\n\n const pureObject = object.clone()\n this.generatePureObject(pureObject)\n this.objectMap.get('Pure').add(pureObject)\n\n const frameObject = object.clone()\n this.generateFrameObject(frameObject)\n this.objectMap.get('Frame').add(frameObject)\n\n object.traverse((child: any) => {\n if (child.type === 'Mesh') {\n disposeMaterial(child.material)\n const newMaterial = new MeshBasicMaterial({ color: new Color('#fff'), transparent: true, depthTest: false, depthWrite: false, opacity: 0 })\n child.material = newMaterial\n }\n })\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * remove object\n * @param object\n */\n public removeObject(object: Object3D) {\n this.objects.splice(this.objects.indexOf(object), 1)\n\n this.objectMap.forEach((cloneGroup) => {\n cloneGroup.children.forEach((child) => {\n if (child.userData.entityParams.id === object.userData.entityParams.id)\n cloneGroup.remove(child)\n })\n })\n\n this.uniforms.maxSize.value = this.getMaxSize()\n }\n\n /**\n * get max size\n * @param object\n * @returns\n */\n private getMaxSize() {\n this.box3.setFromObject(this.objectMap.get('Real'))\n const size = this.box3.getSize(new Vector3())\n const maxSize = Math.max(size.x, size.z)\n return maxSize\n }\n\n /**\n * generate final object\n * @param object\n */\n private generateFinalObject(object: Object3D) {\n injectToFinirMaterial(object, this.uniforms)\n }\n\n /**\n * generate real object\n * @param object\n */\n private generateRealObject(object: Object3D) {\n injectToRealFade(object, this.uniforms)\n }\n\n /**\n * generate pure object\n * @param object\n */\n private generatePureObject(object: Object3D) {\n injectToBaseWrite(object, this.uniforms)\n }\n\n /**\n * generate frame object\n * @param object\n */\n private generateFrameObject(object: Object3D) {\n injectToFrameFade(object, this.uniforms)\n }\n}\n"],"mappings":"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"}
@@ -27,6 +27,7 @@ export var disposeMaterial = function disposeMaterial(material) {
27
27
  export var injectToFrameFade = function injectToFrameFade(object, uniforms) {
28
28
  object.traverse(function (child) {
29
29
  if (child.isMesh) {
30
+ child.material = child.material.clone();
30
31
  child.material.side = 2;
31
32
  child.material.transparent = true;
32
33
  child.material.depthTest = false;
@@ -1 +1 @@
1
- {"version":3,"names":["AdditiveBlending","Color","MeshStandardMaterial","frag","frag_pre","ver","ver_pre","fragFinal","verFinal","disposeMaterial","material","map","dispose","lightMap","bumpMap","normalMap","specularMap","envMap","emissiveMap","injectToFrameFade","object","uniforms","traverse","child","isMesh","side","transparent","depthTest","depthWrite","blending","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","onBeforeCompile","shader","_objectSpread","progress","addOpacity","value","objSize","maxSize","isFadeIn","isFrameFadeIn","vertexShader","fragmentShader","injectToRealFade","newMaterial","clone","isRealFadeIn","replace","needsUpdate","customProgramCacheKey","concat","injectToBaseWrite","color","isPureFadeIn","rimColor","rimPower","injectToFinirMaterial","isFresnelFadeIn"],"sources":["../../../src/business/MaterialSwitch/inject.ts"],"sourcesContent":["import { AdditiveBlending, Color, MeshStandardMaterial, type Object3D } from '@anov/3d-core'\nimport { frag, frag_pre, ver, ver_pre } from './realFade'\nimport { frag as fragFinal, ver as verFinal } from './finalFade'\n\nexport const disposeMaterial = (material) => {\n if (material.map)\n material.map.dispose()\n if (material.lightMap)\n material.lightMap.dispose()\n if (material.bumpMap)\n material.bumpMap.dispose()\n if (material.normalMap)\n material.normalMap.dispose()\n if (material.specularMap)\n material.specularMap.dispose()\n if (material.envMap)\n material.envMap.dispose()\n if (material.emissiveMap)\n material.emissiveMap.dispose()\n material.dispose()\n}\n\n/**\n * inject to final fade\n * @param object\n * @param maxSize\n * @param uniforms\n */\nexport const injectToFrameFade = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isFrameFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n child.material.side = 2\n child.material.transparent = true\n child.material.depthTest = false\n child.material.depthWrite = true\n child.material.blending = AdditiveBlending\n\n child.material.polygonOffset = true\n child.material.polygonOffsetFactor = 0\n child.material.polygonOffsetUnits = 0\n\n child.material.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n addOpacity: { value: 0.7 },\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isFrameFadeIn,\n }\n shader.vertexShader = verFinal\n shader.fragmentShader = fragFinal\n }\n }\n })\n}\n\n/**\n * inject to real fade\n * @param object\n * @param uniforms\n */\nexport const injectToRealFade = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isRealFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n const newMaterial = child.material.clone()\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 1\n newMaterial.polygonOffsetUnits = 1\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isRealFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n\n/**\n * inject to base write\n * @param object\n * @param uniforms\n */\nexport const injectToBaseWrite = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isPureFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n disposeMaterial(child.material)\n const newMaterial = new MeshStandardMaterial({ color: new Color('#fff') })\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 2\n newMaterial.polygonOffsetUnits = 2\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isPureFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n\n shader.uniforms.rimColor = { value: new Color('#fff') }\n shader.uniforms.rimPower = { value: 0.7 }\n\n shader.fragmentShader = /* glsl */`\n uniform vec3 rimColor;\n uniform float rimPower;\n ${shader.fragmentShader.replace(\n '#include <dithering_fragment>',\n '#include <dithering_fragment>\\n\\t'\n + 'float dotNV = 1.0-saturate( dot( normal, geometry.viewDir ) );\\n\\t'\n + 'gl_FragColor.rgb += rimPower*dotNV*rimColor;',\n )}\n `\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n\n/**\n * inject to finir material\n * @param object\n * @param uniforms\n */\nexport const injectToFinirMaterial = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isFresnelFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n disposeMaterial(child.material)\n const newMaterial = new MeshStandardMaterial({ color: new Color('#000') })\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 3\n newMaterial.polygonOffsetUnits = 3\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isFresnelFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n\n shader.uniforms.rimColor = { value: new Color('#2364B7') }\n shader.uniforms.rimPower = { value: 0.7 }\n\n shader.fragmentShader = /* glsl */`\n uniform vec3 rimColor;\n uniform float rimPower;\n ${shader.fragmentShader.replace(\n '#include <dithering_fragment>',\n '#include <dithering_fragment>\\n\\t'\n + 'float dotNV = 1.0-saturate( dot( normal, geometry.viewDir ) );\\n\\t'\n + 'gl_FragColor.rgb += rimPower*dotNV*rimColor;',\n )}\n `\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["AdditiveBlending","Color","MeshStandardMaterial","frag","frag_pre","ver","ver_pre","fragFinal","verFinal","disposeMaterial","material","map","dispose","lightMap","bumpMap","normalMap","specularMap","envMap","emissiveMap","injectToFrameFade","object","uniforms","traverse","child","isMesh","clone","side","transparent","depthTest","depthWrite","blending","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","onBeforeCompile","shader","_objectSpread","progress","addOpacity","value","objSize","maxSize","isFadeIn","isFrameFadeIn","vertexShader","fragmentShader","injectToRealFade","newMaterial","isRealFadeIn","replace","needsUpdate","customProgramCacheKey","concat","injectToBaseWrite","color","isPureFadeIn","rimColor","rimPower","injectToFinirMaterial","isFresnelFadeIn"],"sources":["../../../src/business/MaterialSwitch/inject.ts"],"sourcesContent":["import { AdditiveBlending, Color, MeshStandardMaterial, type Object3D } from '@anov/3d-core'\nimport { frag, frag_pre, ver, ver_pre } from './realFade'\nimport { frag as fragFinal, ver as verFinal } from './finalFade'\n\nexport const disposeMaterial = (material) => {\n if (material.map)\n material.map.dispose()\n if (material.lightMap)\n material.lightMap.dispose()\n if (material.bumpMap)\n material.bumpMap.dispose()\n if (material.normalMap)\n material.normalMap.dispose()\n if (material.specularMap)\n material.specularMap.dispose()\n if (material.envMap)\n material.envMap.dispose()\n if (material.emissiveMap)\n material.emissiveMap.dispose()\n material.dispose()\n}\n\n/**\n * inject to final fade\n * @param object\n * @param maxSize\n * @param uniforms\n */\nexport const injectToFrameFade = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isFrameFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n child.material = child.material.clone()\n child.material.side = 2\n child.material.transparent = true\n child.material.depthTest = false\n child.material.depthWrite = true\n child.material.blending = AdditiveBlending\n\n child.material.polygonOffset = true\n child.material.polygonOffsetFactor = 0\n child.material.polygonOffsetUnits = 0\n\n child.material.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n addOpacity: { value: 0.7 },\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isFrameFadeIn,\n }\n shader.vertexShader = verFinal\n shader.fragmentShader = fragFinal\n }\n }\n })\n}\n\n/**\n * inject to real fade\n * @param object\n * @param uniforms\n */\nexport const injectToRealFade = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isRealFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n const newMaterial = child.material.clone()\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 1\n newMaterial.polygonOffsetUnits = 1\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isRealFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n\n/**\n * inject to base write\n * @param object\n * @param uniforms\n */\nexport const injectToBaseWrite = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isPureFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n disposeMaterial(child.material)\n const newMaterial = new MeshStandardMaterial({ color: new Color('#fff') })\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 2\n newMaterial.polygonOffsetUnits = 2\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isPureFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n\n shader.uniforms.rimColor = { value: new Color('#fff') }\n shader.uniforms.rimPower = { value: 0.7 }\n\n shader.fragmentShader = /* glsl */`\n uniform vec3 rimColor;\n uniform float rimPower;\n ${shader.fragmentShader.replace(\n '#include <dithering_fragment>',\n '#include <dithering_fragment>\\n\\t'\n + 'float dotNV = 1.0-saturate( dot( normal, geometry.viewDir ) );\\n\\t'\n + 'gl_FragColor.rgb += rimPower*dotNV*rimColor;',\n )}\n `\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n\n/**\n * inject to finir material\n * @param object\n * @param uniforms\n */\nexport const injectToFinirMaterial = (object: Object3D, uniforms: { maxSize: { value: number }; progress: { value: number }; isFresnelFadeIn: { value: boolean } }) => {\n object.traverse((child: any) => {\n if (child.isMesh) {\n disposeMaterial(child.material)\n const newMaterial = new MeshStandardMaterial({ color: new Color('#000') })\n newMaterial.transparent = true\n newMaterial.depthTest = true\n newMaterial.depthWrite = true\n newMaterial.polygonOffset = true\n newMaterial.polygonOffsetFactor = 3\n newMaterial.polygonOffsetUnits = 3\n\n newMaterial.onBeforeCompile = (shader) => {\n shader.uniforms = {\n ...shader.uniforms,\n progress: uniforms.progress,\n objSize: uniforms.maxSize,\n isFadeIn: uniforms.isFresnelFadeIn,\n }\n\n shader.vertexShader = ver_pre + shader.vertexShader\n shader.vertexShader = shader.vertexShader.replace(\n '#include <begin_vertex>', ver,\n )\n shader.fragmentShader = frag_pre + shader.fragmentShader\n shader.fragmentShader = shader.fragmentShader.replace(\n '#include <map_fragment>', frag,\n )\n\n shader.uniforms.rimColor = { value: new Color('#2364B7') }\n shader.uniforms.rimPower = { value: 0.7 }\n\n shader.fragmentShader = /* glsl */`\n uniform vec3 rimColor;\n uniform float rimPower;\n ${shader.fragmentShader.replace(\n '#include <dithering_fragment>',\n '#include <dithering_fragment>\\n\\t'\n + 'float dotNV = 1.0-saturate( dot( normal, geometry.viewDir ) );\\n\\t'\n + 'gl_FragColor.rgb += rimPower*dotNV*rimColor;',\n )}\n `\n }\n\n newMaterial.needsUpdate = true\n newMaterial.customProgramCacheKey = () => `${ver}-${frag}`\n\n child.material = newMaterial\n }\n })\n}\n"],"mappings":"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"}
@@ -90,7 +90,8 @@ export var RealismTraffic = (_class = /*#__PURE__*/function (_BaseTraffic) {
90
90
  totalNum = _params$totalNum === void 0 ? 5 : _params$totalNum,
91
91
  _params$baseTime = params.baseTime,
92
92
  baseTime = _params$baseTime === void 0 ? 10 : _params$baseTime,
93
- control = params.control,
93
+ _params$control = params.control,
94
+ control = _params$control === void 0 ? [] : _params$control,
94
95
  _params$corner = params.corner,
95
96
  corner = _params$corner === void 0 ? 10 : _params$corner;
96
97
  _this._path = path;
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","LoaderModule","utils","BaseTraffic","moveWithLine","loaderModule","overrideVisible","target","propertyKey","getter","_visible","setter","newValue","_target$_control","_control","forEach","control","stop","_target$_control2","continue","Object","defineProperty","get","set","enumerable","configurable","RealismTraffic","_class","_BaseTraffic","_inherits","_super","_createSuper","params","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_initializerDefineProperty","_descriptor","path","_params$width","width","_params$divide","divide","resource","_params$totalNum","totalNum","_params$baseTime","baseTime","_params$corner","corner","_path","_width","_divide","_resource","_totalNum","_baseTime","_lanelineControl","_corner","generateLaneLines","loadBenchmarkModel","_createClass","key","w","num","value","_this2","_benchmarkVehicles","length","promises","map","_ref","_utils$storeManagemen","url","loadGLTF","draco","dracoPath","storeManagement","Promise","allSettled","then","res","modelRes","status","push","normalizedVehicleSize","scene","randomPool","generateRandomPool","generateInitPosition","getMaxVehicleLength","maxLength","reduce","max","vehicle","box","setFromObject","currentLength","z","min","_this3","lineLengths","lanelines","line","getLength","part","Math","floor","capacity","pre","next","Error","buildRandomPool","pool","i","j","t","index","random","current","currentLaneline","point","getPointAt","_startingPoints","_startingLookatPoints","_startingProgressPoints","_startinglanelinePoints","splice","placeVehicle","_this4","_vehicles","removeFromParent","remove","randomModelIndex","currentVehicle","clone","position","copy","lookAt","add","run","dispatchEvent","type","laneline","model","progress","laneIndex","lc","find","duration","direction","setProgress","currentWidth","x","scalingFactor","scale","_get","_getPrototypeOf","prototype","_applyDecoratedDescriptor","writable","initializer"],"sources":["../../../../src/business/TrafficComponents/RealismTraffic/RealismTraffic.ts"],"sourcesContent":["/* eslint-disable max-statements-per-line */\nimport type { CurvePath, Group, Object3D, Vector3 } from '@anov/3d-core'\nimport { Box3, LoaderModule, utils } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport type { RealismTrafficInterface } from '.'\n\nconst { moveWithLine } = utils\n\ntype ResourceParams = {\n url: string\n}\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype RealismTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n resource: ResourceParams[]\n baseTime?: number\n totalNum?: number\n control?: LanelineControl[]\n corner?: number\n}\n\nconst loaderModule = new LoaderModule()\n\nconst overrideVisible = (target: any, propertyKey: string | symbol) => {\n const getter = () => {\n return target._visible\n }\n\n const setter = (newValue: any) => {\n target._visible = newValue\n\n if (newValue === false) {\n target._control ?? [].forEach((control) => {\n control.stop()\n })\n }\n else {\n target._control ?? [].forEach((control) => {\n control.continue()\n })\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n enumerable: true,\n configurable: true,\n })\n}\n\n/**\n * 写实风格车辆交通组件\n */\nexport class RealismTraffic extends BaseTraffic implements RealismTrafficInterface {\n /** 车辆模型池 */\n private _resource: ResourceParams[]\n\n /** 基准时间 */\n private _baseTime: number\n\n /** 车辆数量 */\n private _totalNum = 5\n\n private _startingPoints: Vector3[] = []\n\n private _startingLookatPoints: Vector3[] = []\n\n private _startingProgressPoints: number[] = []\n\n private _startinglanelinePoints: number[] = []\n\n private _visible = true\n\n private _control: ReturnType<typeof moveWithLine>[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n /** 基准载具池 */\n private _benchmarkVehicles: Group[] = []\n\n /** 实际载具 */\n private _vehicles: Group[] = []\n\n /** 车道线 */\n public lanelines: CurvePath<Vector3>[] = []\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n @overrideVisible\n override visible = true\n\n public get baseTime(): number {\n return this._baseTime\n }\n\n constructor(params: RealismTrafficParams) {\n super(params)\n\n const { path, width = 2, divide = 1, resource, totalNum = 5, baseTime = 10, control, corner = 10 } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._resource = resource\n this._totalNum = totalNum\n this._baseTime = baseTime\n this._lanelineControl = control\n this._corner = corner\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n /**\n * load benchmark model\n */\n private loadBenchmarkModel() {\n this._benchmarkVehicles = []\n\n if (!this._resource.length)\n return\n\n const promises = this._resource.map(({ url }) => {\n return loaderModule.loadGLTF({\n url,\n draco: true,\n dracoPath: utils.storeManagement.get('decoderPath') ?? '/draco/',\n })\n })\n\n Promise.allSettled(promises).then((res) => {\n res.forEach((modelRes) => {\n if (modelRes.status === 'fulfilled')\n this._benchmarkVehicles.push(this.normalizedVehicleSize(modelRes.value.scene as Group))\n })\n\n const randomPool = this.generateRandomPool()\n this.generateInitPosition(randomPool)\n })\n }\n\n /**\n * get max vehicle length\n */\n private getMaxVehicleLength() {\n const maxLength = this._benchmarkVehicles.reduce((max, vehicle) => {\n const box = new Box3().setFromObject(vehicle)\n const currentLength = box.max.z - box.min.z\n\n return currentLength > max ? currentLength : max\n }, 0)\n\n return maxLength\n }\n\n /**\n * check reasonable location\n */\n private generateRandomPool() {\n const lineLengths = this.lanelines.map(line => line.getLength())\n const part = lineLengths.map(length => Math.floor(length / this.getMaxVehicleLength()))\n const capacity = part.reduce((pre, next) => { return pre + next }, 0)\n\n if (capacity < this._totalNum)\n throw new Error('载具数量不合理')\n\n return this.buildRandomPool(part)\n }\n\n /**\n * build random pool\n */\n private buildRandomPool(part: number[]) {\n const pool = []\n\n part.forEach((part, i) => {\n for (let j = 0; j < part; j++) {\n pool.push({\n t: 1 / part * j,\n line: i,\n })\n }\n })\n\n return pool\n }\n\n /**\n * generate random movement starting point\n */\n private generateInitPosition(randomPool) {\n for (let i = 0; i < this._totalNum; i++) {\n const index = Math.floor(Math.random() * randomPool.length)\n const current = randomPool[index]\n const currentLaneline = this.lanelines[current.line]\n const point = currentLaneline.getPointAt(current.t)\n\n this._startingPoints.push(point)\n this._startingLookatPoints.push(currentLaneline.getPointAt((current.t + 0.01) % 1))\n this._startingProgressPoints.push(current.t)\n this._startinglanelinePoints.push(current.line)\n\n randomPool.splice(index, 1)\n }\n\n this.placeVehicle()\n }\n\n /**\n * place vehicle\n */\n private placeVehicle() {\n this._vehicles.forEach((vehicle, i) => {\n vehicle.removeFromParent()\n this._control[i].remove()\n })\n\n this._vehicles = []\n this._control = []\n\n for (let i = 0; i < this._startingPoints.length; i++) {\n const randomModelIndex = Math.floor(Math.random() * this._benchmarkVehicles.length)\n const currentVehicle = this._benchmarkVehicles[randomModelIndex].clone()\n\n currentVehicle.position.copy(this._startingPoints[i])\n currentVehicle.lookAt(this._startingLookatPoints[i])\n\n this._vehicles.push(currentVehicle)\n this.add(currentVehicle)\n this.run(this.lanelines[this._startinglanelinePoints[i]], currentVehicle, this._startingProgressPoints[i], this._startinglanelinePoints[i])\n }\n\n this.dispatchEvent({\n type: 'realismTraffic-loaded',\n })\n }\n\n /**\n * run\n * @param laneline\n * @param model\n * @param progress\n * @param laneIndex\n */\n private run(laneline: CurvePath<Vector3>, model: Object3D, progress: number, laneIndex: number) {\n const lc = this._lanelineControl.find(lc => lc.index === laneIndex)\n\n const control = moveWithLine(model, laneline, {\n duration: this.baseTime,\n direction: (lc ?? lc?.direction === 1) ? 1 : -1,\n })\n\n this._control.push(control)\n control.setProgress(progress)\n }\n\n /**\n * normalized vehicle size\n */\n private normalizedVehicleSize(model: Group) {\n const box = new Box3().setFromObject(model)\n const currentWidth = box.max.x - box.min.x\n const scalingFactor = (this._width / (this._divide + 1)) / currentWidth * 0.7\n\n model.scale.set(scalingFactor, scalingFactor, scalingFactor)\n\n return model\n }\n\n override removeFromParent(): this {\n this._control.forEach((control) => {\n control.remove()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","LoaderModule","utils","BaseTraffic","moveWithLine","loaderModule","overrideVisible","target","propertyKey","getter","_visible","setter","newValue","_target$_control","_control","forEach","control","stop","_target$_control2","continue","Object","defineProperty","get","set","enumerable","configurable","RealismTraffic","_class","_BaseTraffic","_inherits","_super","_createSuper","params","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","_initializerDefineProperty","_descriptor","path","_params$width","width","_params$divide","divide","resource","_params$totalNum","totalNum","_params$baseTime","baseTime","_params$control","_params$corner","corner","_path","_width","_divide","_resource","_totalNum","_baseTime","_lanelineControl","_corner","generateLaneLines","loadBenchmarkModel","_createClass","key","w","num","value","_this2","_benchmarkVehicles","length","promises","map","_ref","_utils$storeManagemen","url","loadGLTF","draco","dracoPath","storeManagement","Promise","allSettled","then","res","modelRes","status","push","normalizedVehicleSize","scene","randomPool","generateRandomPool","generateInitPosition","getMaxVehicleLength","maxLength","reduce","max","vehicle","box","setFromObject","currentLength","z","min","_this3","lineLengths","lanelines","line","getLength","part","Math","floor","capacity","pre","next","Error","buildRandomPool","pool","i","j","t","index","random","current","currentLaneline","point","getPointAt","_startingPoints","_startingLookatPoints","_startingProgressPoints","_startinglanelinePoints","splice","placeVehicle","_this4","_vehicles","removeFromParent","remove","randomModelIndex","currentVehicle","clone","position","copy","lookAt","add","run","dispatchEvent","type","laneline","model","progress","laneIndex","lc","find","duration","direction","setProgress","currentWidth","x","scalingFactor","scale","_get","_getPrototypeOf","prototype","_applyDecoratedDescriptor","writable","initializer"],"sources":["../../../../src/business/TrafficComponents/RealismTraffic/RealismTraffic.ts"],"sourcesContent":["/* eslint-disable max-statements-per-line */\nimport type { CurvePath, Group, Object3D, Vector3 } from '@anov/3d-core'\nimport { Box3, LoaderModule, utils } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport type { RealismTrafficInterface } from '.'\n\nconst { moveWithLine } = utils\n\ntype ResourceParams = {\n url: string\n}\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype RealismTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n resource: ResourceParams[]\n baseTime?: number\n totalNum?: number\n control?: LanelineControl[]\n corner?: number\n}\n\nconst loaderModule = new LoaderModule()\n\nconst overrideVisible = (target: any, propertyKey: string | symbol) => {\n const getter = () => {\n return target._visible\n }\n\n const setter = (newValue: any) => {\n target._visible = newValue\n\n if (newValue === false) {\n target._control ?? [].forEach((control) => {\n control.stop()\n })\n }\n else {\n target._control ?? [].forEach((control) => {\n control.continue()\n })\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n enumerable: true,\n configurable: true,\n })\n}\n\n/**\n * 写实风格车辆交通组件\n */\nexport class RealismTraffic extends BaseTraffic implements RealismTrafficInterface {\n /** 车辆模型池 */\n private _resource: ResourceParams[]\n\n /** 基准时间 */\n private _baseTime: number\n\n /** 车辆数量 */\n private _totalNum = 5\n\n private _startingPoints: Vector3[] = []\n\n private _startingLookatPoints: Vector3[] = []\n\n private _startingProgressPoints: number[] = []\n\n private _startinglanelinePoints: number[] = []\n\n private _visible = true\n\n private _control: ReturnType<typeof moveWithLine>[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n /** 基准载具池 */\n private _benchmarkVehicles: Group[] = []\n\n /** 实际载具 */\n private _vehicles: Group[] = []\n\n /** 车道线 */\n public lanelines: CurvePath<Vector3>[] = []\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n @overrideVisible\n override visible = true\n\n public get baseTime(): number {\n return this._baseTime\n }\n\n constructor(params: RealismTrafficParams) {\n super(params)\n\n const { path, width = 2, divide = 1, resource, totalNum = 5, baseTime = 10, control = [], corner = 10 } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._resource = resource\n this._totalNum = totalNum\n this._baseTime = baseTime\n this._lanelineControl = control\n this._corner = corner\n\n this.generateLaneLines()\n this.loadBenchmarkModel()\n }\n\n /**\n * load benchmark model\n */\n private loadBenchmarkModel() {\n this._benchmarkVehicles = []\n\n if (!this._resource.length)\n return\n\n const promises = this._resource.map(({ url }) => {\n return loaderModule.loadGLTF({\n url,\n draco: true,\n dracoPath: utils.storeManagement.get('decoderPath') ?? '/draco/',\n })\n })\n\n Promise.allSettled(promises).then((res) => {\n res.forEach((modelRes) => {\n if (modelRes.status === 'fulfilled')\n this._benchmarkVehicles.push(this.normalizedVehicleSize(modelRes.value.scene as Group))\n })\n\n const randomPool = this.generateRandomPool()\n this.generateInitPosition(randomPool)\n })\n }\n\n /**\n * get max vehicle length\n */\n private getMaxVehicleLength() {\n const maxLength = this._benchmarkVehicles.reduce((max, vehicle) => {\n const box = new Box3().setFromObject(vehicle)\n const currentLength = box.max.z - box.min.z\n\n return currentLength > max ? currentLength : max\n }, 0)\n\n return maxLength\n }\n\n /**\n * check reasonable location\n */\n private generateRandomPool() {\n const lineLengths = this.lanelines.map(line => line.getLength())\n const part = lineLengths.map(length => Math.floor(length / this.getMaxVehicleLength()))\n const capacity = part.reduce((pre, next) => { return pre + next }, 0)\n\n if (capacity < this._totalNum)\n throw new Error('载具数量不合理')\n\n return this.buildRandomPool(part)\n }\n\n /**\n * build random pool\n */\n private buildRandomPool(part: number[]) {\n const pool = []\n\n part.forEach((part, i) => {\n for (let j = 0; j < part; j++) {\n pool.push({\n t: 1 / part * j,\n line: i,\n })\n }\n })\n\n return pool\n }\n\n /**\n * generate random movement starting point\n */\n private generateInitPosition(randomPool) {\n for (let i = 0; i < this._totalNum; i++) {\n const index = Math.floor(Math.random() * randomPool.length)\n const current = randomPool[index]\n const currentLaneline = this.lanelines[current.line]\n const point = currentLaneline.getPointAt(current.t)\n\n this._startingPoints.push(point)\n this._startingLookatPoints.push(currentLaneline.getPointAt((current.t + 0.01) % 1))\n this._startingProgressPoints.push(current.t)\n this._startinglanelinePoints.push(current.line)\n\n randomPool.splice(index, 1)\n }\n\n this.placeVehicle()\n }\n\n /**\n * place vehicle\n */\n private placeVehicle() {\n this._vehicles.forEach((vehicle, i) => {\n vehicle.removeFromParent()\n this._control[i].remove()\n })\n\n this._vehicles = []\n this._control = []\n\n for (let i = 0; i < this._startingPoints.length; i++) {\n const randomModelIndex = Math.floor(Math.random() * this._benchmarkVehicles.length)\n const currentVehicle = this._benchmarkVehicles[randomModelIndex].clone()\n\n currentVehicle.position.copy(this._startingPoints[i])\n currentVehicle.lookAt(this._startingLookatPoints[i])\n\n this._vehicles.push(currentVehicle)\n this.add(currentVehicle)\n this.run(this.lanelines[this._startinglanelinePoints[i]], currentVehicle, this._startingProgressPoints[i], this._startinglanelinePoints[i])\n }\n\n this.dispatchEvent({\n type: 'realismTraffic-loaded',\n })\n }\n\n /**\n * run\n * @param laneline\n * @param model\n * @param progress\n * @param laneIndex\n */\n private run(laneline: CurvePath<Vector3>, model: Object3D, progress: number, laneIndex: number) {\n const lc = this._lanelineControl.find(lc => lc.index === laneIndex)\n\n const control = moveWithLine(model, laneline, {\n duration: this.baseTime,\n direction: (lc ?? lc?.direction === 1) ? 1 : -1,\n })\n\n this._control.push(control)\n control.setProgress(progress)\n }\n\n /**\n * normalized vehicle size\n */\n private normalizedVehicleSize(model: Group) {\n const box = new Box3().setFromObject(model)\n const currentWidth = box.max.x - box.min.x\n const scalingFactor = (this._width / (this._divide + 1)) / currentWidth * 0.7\n\n model.scale.set(scalingFactor, scalingFactor, scalingFactor)\n\n return model\n }\n\n override removeFromParent(): this {\n this._control.forEach((control) => {\n control.remove()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
@@ -162,9 +162,13 @@ export var StreamerTraffic = /*#__PURE__*/function (_BaseTraffic) {
162
162
  },
163
163
  vertexShader: vertexShader,
164
164
  fragmentShader: fragmentShader,
165
- depthTest: false
165
+ depthTest: false,
166
+ depthWrite: false
166
167
  });
167
168
  var road = new Mesh(geometry, material);
169
+
170
+ // 渲染顺序
171
+ road.renderOrder = 1000;
168
172
  this.add(road);
169
173
  this.run(material);
170
174
  this._streamerArr.push(road);
@@ -1 +1 @@
1
- {"version":3,"names":["Clock","Color","DoubleSide","MathUtils","Mesh","ShaderMaterial","TubeGeometry","Vector2","use","BaseTraffic","fragmentShader","vertexShader","StreamerTraffic","_BaseTraffic","_inherits","_super","_createSuper","params","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","path","_params$width","width","_params$divide","divide","_params$divideWidth","divideWidth","_params$num","num","_params$length","length","_params$baseColor","baseColor","_params$speed","speed","_params$corner","corner","_params$control","control","_path","_width","_divide","_divideWidth","_num","_baseColor","_speed","_corner","_length","_lanelineControl","generateLaneLines","generateStreamer","_createClass","key","get","set","w","value","_streamerArr","forEach","mesh","removeFromParent","i","lanelines","_this$_lanelineContro","_this$_lanelineContro2","geometry","Math","floor","getLength","material","side","transparent","uniforms","uColor","uTime","lerp","random","uFade","uNumLines","uOffset","uAlpha","uSpeed","ulength","uReverse","direction","depthTest","road","add","run","push","clock","_control","useframe","getElapsedTime","_get","_getPrototypeOf","prototype"],"sources":["../../../../src/business/TrafficComponents/StreamerTraffic/StreamerTraffic.ts"],"sourcesContent":["import { Clock, Color, type CurvePath, DoubleSide, MathUtils, Mesh, ShaderMaterial, TubeGeometry, Vector2, type Vector3, use } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport { fragmentShader } from './fragmentShader'\nimport { vertexShader } from './vertexShader'\nimport type { StreamerTrafficInterface } from '.'\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype StreamerTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n divideWidth?: number\n num?: number\n length?: number\n baseColor?: string\n speed?: number\n control?: LanelineControl[]\n corner?: number\n}\n\n/**\n * 流光风格交通组件\n */\nexport class StreamerTraffic extends BaseTraffic implements StreamerTrafficInterface {\n /** 流光速度 */\n private _speed: number\n\n /** 流光数量 */\n private _num: number\n\n /** 流光颜色 */\n private _baseColor: string\n\n /** 流光宽度 */\n private _divideWidth: number\n\n /** 流光长度 */\n private _length: number\n\n private _streamerArr: Mesh[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n private _control = []\n\n public get speed() {\n return this._speed\n }\n\n public get num() {\n return this._num\n }\n\n public get baseColor() {\n return this._baseColor\n }\n\n public get divideWidth() {\n return this._divideWidth\n }\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n constructor(params: StreamerTrafficParams) {\n super(params)\n\n const { path, width = 4, divide = 4, divideWidth = 1, num = 5, length = 0.25, baseColor = '#ff7700', speed = 100, corner = 10, control = [] } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._divideWidth = divideWidth / 2\n this._num = num\n this._baseColor = baseColor\n this._speed = speed\n this._corner = corner\n this._length = length\n this._lanelineControl = control\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n /**\n * generate streamer\n */\n private generateStreamer() {\n this._streamerArr.forEach((mesh) => {\n mesh.removeFromParent()\n })\n this._streamerArr = []\n\n for (let i = 0; i < this.lanelines.length; i++) {\n const geometry = new TubeGeometry(this.lanelines[i], Math.floor(this.lanelines[i].getLength()) * 10, this._divideWidth, 5, false)\n const material = new ShaderMaterial({\n side: DoubleSide,\n transparent: true,\n uniforms: {\n uColor: { value: new Color(this._baseColor) },\n uTime: { value: MathUtils.lerp(-1, 1, Math.random()) },\n uFade: { value: new Vector2(0, this._length + Math.random() * this._length - this._length / 2) },\n uNumLines: { value: this._num },\n uOffset: { value: Math.random() },\n uAlpha: { value: Math.random() },\n uSpeed: { value: this._speed + Math.random() * this._speed - this._speed / 2 },\n ulength: { value: Math.floor(this.lanelines[i].getLength()) },\n uReverse: { value: this._lanelineControl[i]?.direction ?? -1.0 },\n },\n vertexShader,\n fragmentShader,\n depthTest: false,\n })\n\n const road = new Mesh(geometry, material)\n\n this.add(road)\n this.run(material)\n this._streamerArr.push(road)\n }\n }\n\n /**\n * run\n * @param material\n */\n private run(material) {\n const clock = new Clock()\n\n this._control.push(\n use.useframe(() => {\n material.uniforms.uTime.value = clock.getElapsedTime()\n }),\n )\n }\n\n override removeFromParent(): this {\n this._control.forEach((control) => {\n control()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["Clock","Color","DoubleSide","MathUtils","Mesh","ShaderMaterial","TubeGeometry","Vector2","use","BaseTraffic","fragmentShader","vertexShader","StreamerTraffic","_BaseTraffic","_inherits","_super","_createSuper","params","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","path","_params$width","width","_params$divide","divide","_params$divideWidth","divideWidth","_params$num","num","_params$length","length","_params$baseColor","baseColor","_params$speed","speed","_params$corner","corner","_params$control","control","_path","_width","_divide","_divideWidth","_num","_baseColor","_speed","_corner","_length","_lanelineControl","generateLaneLines","generateStreamer","_createClass","key","get","set","w","value","_streamerArr","forEach","mesh","removeFromParent","i","lanelines","_this$_lanelineContro","_this$_lanelineContro2","geometry","Math","floor","getLength","material","side","transparent","uniforms","uColor","uTime","lerp","random","uFade","uNumLines","uOffset","uAlpha","uSpeed","ulength","uReverse","direction","depthTest","depthWrite","road","renderOrder","add","run","push","clock","_control","useframe","getElapsedTime","_get","_getPrototypeOf","prototype"],"sources":["../../../../src/business/TrafficComponents/StreamerTraffic/StreamerTraffic.ts"],"sourcesContent":["import { Clock, Color, type CurvePath, DoubleSide, MathUtils, Mesh, ShaderMaterial, TubeGeometry, Vector2, type Vector3, use } from '@anov/3d-core'\nimport { BaseTraffic } from '../base'\nimport { fragmentShader } from './fragmentShader'\nimport { vertexShader } from './vertexShader'\nimport type { StreamerTrafficInterface } from '.'\n\ntype LanelineControl = {\n index: number\n direction?: number\n}\n\ntype StreamerTrafficParams = {\n path: CurvePath<Vector3>\n width?: number\n divide?: number\n divideWidth?: number\n num?: number\n length?: number\n baseColor?: string\n speed?: number\n control?: LanelineControl[]\n corner?: number\n}\n\n/**\n * 流光风格交通组件\n */\nexport class StreamerTraffic extends BaseTraffic implements StreamerTrafficInterface {\n /** 流光速度 */\n private _speed: number\n\n /** 流光数量 */\n private _num: number\n\n /** 流光颜色 */\n private _baseColor: string\n\n /** 流光宽度 */\n private _divideWidth: number\n\n /** 流光长度 */\n private _length: number\n\n private _streamerArr: Mesh[] = []\n\n private _lanelineControl: LanelineControl[] = []\n\n private _control = []\n\n public get speed() {\n return this._speed\n }\n\n public get num() {\n return this._num\n }\n\n public get baseColor() {\n return this._baseColor\n }\n\n public get divideWidth() {\n return this._divideWidth\n }\n\n public get width(): number {\n return this._width\n }\n\n public set width(w: number) {\n this._width = w\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n public get divide(): number {\n return this._divide\n }\n\n public set divide(num: number) {\n this._divide = num\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n constructor(params: StreamerTrafficParams) {\n super(params)\n\n const { path, width = 4, divide = 4, divideWidth = 1, num = 5, length = 0.25, baseColor = '#ff7700', speed = 100, corner = 10, control = [] } = params\n\n this._path = path\n this._width = width\n this._divide = divide\n this._divideWidth = divideWidth / 2\n this._num = num\n this._baseColor = baseColor\n this._speed = speed\n this._corner = corner\n this._length = length\n this._lanelineControl = control\n\n this.generateLaneLines()\n this.generateStreamer()\n }\n\n /**\n * generate streamer\n */\n private generateStreamer() {\n this._streamerArr.forEach((mesh) => {\n mesh.removeFromParent()\n })\n this._streamerArr = []\n\n for (let i = 0; i < this.lanelines.length; i++) {\n const geometry = new TubeGeometry(this.lanelines[i], Math.floor(this.lanelines[i].getLength()) * 10, this._divideWidth, 5, false)\n const material = new ShaderMaterial({\n side: DoubleSide,\n transparent: true,\n uniforms: {\n uColor: { value: new Color(this._baseColor) },\n uTime: { value: MathUtils.lerp(-1, 1, Math.random()) },\n uFade: { value: new Vector2(0, this._length + Math.random() * this._length - this._length / 2) },\n uNumLines: { value: this._num },\n uOffset: { value: Math.random() },\n uAlpha: { value: Math.random() },\n uSpeed: { value: this._speed + Math.random() * this._speed - this._speed / 2 },\n ulength: { value: Math.floor(this.lanelines[i].getLength()) },\n uReverse: { value: this._lanelineControl[i]?.direction ?? -1.0 },\n },\n vertexShader,\n fragmentShader,\n depthTest: false,\n depthWrite: false,\n })\n\n const road = new Mesh(geometry, material)\n\n // 渲染顺序\n road.renderOrder = 1000\n\n this.add(road)\n this.run(material)\n this._streamerArr.push(road)\n }\n }\n\n /**\n * run\n * @param material\n */\n private run(material) {\n const clock = new Clock()\n\n this._control.push(\n use.useframe(() => {\n material.uniforms.uTime.value = clock.getElapsedTime()\n }),\n )\n }\n\n override removeFromParent(): this {\n this._control.forEach((control) => {\n control()\n })\n\n return super.removeFromParent()\n }\n}"],"mappings":"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"}
@@ -107,9 +107,10 @@ export var PerspectiveCameraExpand = /*#__PURE__*/function (_EventDispatcher) {
107
107
  */
108
108
  }, {
109
109
  key: "caclSingleCoordinate",
110
- value: function caclSingleCoordinate(prevTarget, prevPosition, lastTarget) {
111
- var directionVector = lastTarget.clone().sub(prevTarget).normalize();
112
- return directionVector.multiplyScalar(lastTarget.distanceTo(prevTarget)).add(prevPosition);
110
+ value: function caclSingleCoordinate(prevTarget, prevPosition, lastTarget, distance) {
111
+ var directionVector = prevPosition.clone().sub(prevTarget).normalize();
112
+ var lastPosition = directionVector.multiplyScalar(distance).add(lastTarget);
113
+ return lastPosition;
113
114
  }
114
115
 
115
116
  /**
@@ -127,7 +128,8 @@ export var PerspectiveCameraExpand = /*#__PURE__*/function (_EventDispatcher) {
127
128
  pitch = _params$pitch === void 0 ? 0 : _params$pitch,
128
129
  _params$yaw = params.yaw,
129
130
  yaw = _params$yaw === void 0 ? 0 : _params$yaw,
130
- distance = params.distance,
131
+ _params$distance = params.distance,
132
+ distance = _params$distance === void 0 ? 20 : _params$distance,
131
133
  duration = params.duration,
132
134
  _onUpdate = params.onUpdate,
133
135
  _params$distanceCoeff = params.distanceCoefficient,
@@ -169,7 +171,7 @@ export var PerspectiveCameraExpand = /*#__PURE__*/function (_EventDispatcher) {
169
171
  // if target is single point
170
172
  else {
171
173
  var _currentPos = position;
172
- var _lastPosition = _this3.caclSingleCoordinate(_this3.controls.target, _this3.camera.position, new Vector3().fromArray(_currentPos));
174
+ var _lastPosition = _this3.caclSingleCoordinate(_this3.controls.target, _this3.camera.position, new Vector3().fromArray(_currentPos), distance);
173
175
  var _lastLookat = new Vector3().fromArray(_currentPos);
174
176
  _this3.motion(_lastPosition, _lastLookat, pitch, yaw, moveOptions());
175
177
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Box3","EventDispatcher","Group","MathUtils","Plane","Quaternion","TWEEN","Vector3","use","FollowControls","PerspectiveCameraExpand","_EventDispatcher","_inherits","_super","_createSuper","camera","controls","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","bindEvent","_createClass","key","get","_isTransitionPeriod","_isCameraChange","value","_this2","addEventListener","dispatchEvent","type","position","target","caclCurrentPos","currentPos","distanceCoefficient","arguments","length","undefined","distance","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","clone","sub","normalize","lastPosition","multiplyScalar","add","lastLookat","caclSingleCoordinate","prevTarget","prevPosition","lastTarget","distanceTo","focus","params","_this3","Promise","res","_params$pitch","pitch","_params$yaw","yaw","duration","onUpdate","_params$distanceCoeff","moveOptions","_ref","_params$isTrigger","isTrigger","_ref2","lookat","onComplate","_params$duration","toArray","userInput","Array","isArray","_this3$caclCurrentPos","motion","fromArray","set","_this4","_","_ref3","_ref4","_params$duration2","x","y","z","targetPosition","cameraPosition","currentDirection","plane","radToDeg","normal","angleTo","rotationParent","setPitch","deg","direction","quaternion","pitchQuat","setFromAxisAngle","degToRad","multiply","applyQuaternion","copy","setYaw","caclPositionByFollow","axisX","axisY","axisZ","anglePitch","angleYaw","quaternionX","quaternionY","addScaledVector","follow","option","_this5","followId","_ref5","_ref5$relativeRotatio","relativeRotation","_ref5$pitch","_ref5$yaw","_ref5$distance","container","rotation","scale","oldCameraParent","parent","needUpdateRotation","enabled","followControls","renderer","domElement","curPosition","radius","cancelMotion","useframe","update","cancel","remove","dispose","followCancelMap","cancelFollow","cancelAllFollow","forEach","_this6","options","currentPoition","currentPositionInterpolation","requestAnimationFrame","render","scene","tween","stop","Tween","t","p","to","onStart","easing","Easing","Quadratic","InOut","_ref6","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../../src/core/Camera/PerspectiveCamera/CameraExpand.ts"],"sourcesContent":["import type { Object3D, OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, EventDispatcher, Group, MathUtils, Plane, Quaternion, TWEEN, Vector3, use } from '@anov/3d-core'\nimport FollowControls from './FollowOrbitControls'\nimport type { CameraExpandInterface, FollowParamsOption, vector3Array } from '.'\n\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\n/**\n * CameraExpand, 主要提供了一些PerspectiveCamera的拓展能力\n */\nexport class PerspectiveCameraExpand extends EventDispatcher implements CameraExpandInterface {\n private _isTransitionPeriod = false\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private tween: any\n private _isCameraChange = false\n private followId = 0\n private followCancelMap: Map<number, () => void> = new Map()\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n super()\n\n this.camera = camera\n this.controls = controls\n this.sceneControl = sceneControl\n\n this.bindEvent()\n }\n\n get isTransitionPeriod() {\n return this._isTransitionPeriod\n }\n\n get isCameraChange() {\n return this._isCameraChange\n }\n\n private bindEvent() {\n this.controls.addEventListener('start', () => {\n this._isCameraChange = true\n })\n\n this.controls.addEventListener('end', () => {\n this._isCameraChange = false\n })\n\n this.controls.addEventListener('change', () => {\n this.dispatchEvent({\n type: 'change',\n position: this.camera.position,\n target: this.controls.target,\n })\n })\n }\n\n /**\n * calculate last position from position box\n * if distance is not defined, calculate distance from box size\n * @param currentPos\n * @param distanceCoefficient\n * @param distance\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], distanceCoefficient = 1, distance?: 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(distance ?? cameraToCenterDistance * distanceCoefficient).add(center)\n const lastLookat = center\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclSingleCoordinate, when use focus and target is single point\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 * camera focus\n * @param params\n * @returns\n */\n public focus(params: {\n target: vector3Array | vector3Array[] | string\n pitch?: number\n yaw?: number\n distance?: number // distance from target\n duration?: number\n isTrigger?: boolean\n distanceCoefficient?: number\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n return new Promise<\n {\n position: number[]\n target: number[]\n duration: number\n userInput: boolean\n pitch: number\n }\n >((res) => {\n const { target: position, pitch = 0, yaw = 0, distance, duration, onUpdate, distanceCoefficient = 1 } = params\n\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n onUpdate && onUpdate({ position, target: lookat })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n // if target is multiple points\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, distanceCoefficient, distance)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n // if target is single point\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 = new Vector3().fromArray(currentPos)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera, main set position and target\n * @param params\n * @returns\n */\n public set(params: {\n position: vector3Array\n target: vector3Array\n isTrigger?: boolean\n duration?: number\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n const { position, target, isTrigger, duration } = params\n\n return new Promise<{\n position: number[]\n target: number[]\n isTrigger: boolean\n duration: number\n userInput: boolean\n }>((res, _) => {\n this.motion(\n new Vector3(position[0], position[1], position[2]),\n new Vector3(target[0], target[1], target[2]),\n 0,\n 0,\n {\n isTrigger: isTrigger ?? true,\n duration: (duration && duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n params.onUpdate && params.onUpdate({ position, target: lookat })\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 position and target\n * @returns\n */\n public 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 * get current pitch\n */\n public get pitch() {\n const targetPosition = this.controls.target\n const cameraPosition = this.camera.position\n\n const currentDirection = cameraPosition.clone().sub(targetPosition)\n const plane = new Plane(new Vector3(0, 1, 0), 0)\n\n return -(MathUtils.radToDeg(plane.normal.angleTo(currentDirection)) - 90)\n }\n\n /**\n * get current yaw\n * @returns\n */\n public get yaw() {\n return (this.camera as (PerspectiveCamera & { rotationParent: { y: number } })).rotationParent.y\n }\n\n /**\n * set pitch, similar to ue\n * @param deg\n */\n public setPitch(deg: number) {\n if (deg > 90)\n deg = 90\n if (deg < -90)\n deg = -90\n\n const direction = new Vector3(0, 0, 1)\n const quaternion = new Quaternion()\n\n const pitchQuat = new Quaternion()\n pitchQuat.setFromAxisAngle(new Vector3(1, 0, 0), MathUtils.degToRad(-deg))\n quaternion.multiply(pitchQuat)\n\n direction.applyQuaternion(quaternion)\n direction.normalize()\n\n const distance = this.camera.position.distanceTo(this.controls.target)\n const cameraPosition = this.controls.target.clone().add(direction.multiplyScalar(distance))\n this.camera.position.copy(cameraPosition)\n }\n\n /**\n * set yaw, similar to ue\n * @param deg\n */\n public setYaw(deg: number) {\n if (deg > 180)\n deg = 180\n if (deg < -180)\n deg = -180\n\n // @ts-ignore\n this.camera.rotationParent.y = MathUtils.degToRad(deg)\n }\n\n /**\n * cacl Position By Follow\n * @param pitch\n * @param yaw\n * @param distance\n * @returns\n */\n private caclPositionByFollow(pitch = 30, yaw = 0, distance = 60) {\n const axisX = new Vector3(1, 0, 0)\n const axisY = new Vector3(0, 1, 0)\n const axisZ = new Vector3(0, 0, -1)\n const position = new Vector3(0, 0, 0)\n\n const anglePitch = MathUtils.degToRad(pitch)\n const angleYaw = MathUtils.degToRad(yaw)\n\n const quaternionX = new Quaternion().setFromAxisAngle(axisX, anglePitch)\n const quaternionY = new Quaternion().setFromAxisAngle(axisY, angleYaw)\n\n position.addScaledVector(axisZ, distance)\n position.applyQuaternion(quaternionX)\n position.applyQuaternion(quaternionY)\n\n return position\n }\n\n /**\n * follow 3d object, not only use in camera\n * @param target\n * @param camera\n * @param option\n * @returns\n */\n public follow(target: Object3D, camera: PerspectiveCamera, option?: FollowParamsOption) {\n const followId = this.followId++\n const { relativeRotation = false, pitch = 30, yaw = 0, distance = 10 } = option || {}\n const container = new Group()\n\n container.rotation.copy(target.rotation)\n container.scale.copy(target.scale)\n\n const oldCameraParent = camera.parent\n\n let needUpdateRotation = true\n\n container.add(camera)\n target.parent.add(container)\n\n this.controls.enabled = false\n\n const followControls = new FollowControls(this.camera, this.sceneControl.renderer.domElement)\n const curPosition = this.caclPositionByFollow(pitch, yaw, distance)\n\n camera.position.copy(curPosition)\n followControls.radius = camera.position.distanceTo(target.position)\n\n followControls.addEventListener('start', () => {\n relativeRotation && (needUpdateRotation = false)\n })\n\n this.controls.target.copy(target.position)\n followControls.target = target.position\n\n const cancelMotion = use.useframe(() => {\n container.position.copy(target.position)\n container.scale.copy(target.scale)\n needUpdateRotation && container.rotation.copy(target.rotation)\n\n this.controls.target.copy(target.position)\n\n followControls.target = target.position\n followControls.update()\n })\n\n const cancel = () => {\n this.controls.enabled = true\n\n oldCameraParent.add(camera)\n target.parent.remove(container)\n\n cancelMotion()\n followControls.dispose()\n }\n\n this.followCancelMap.set(followId, cancel)\n\n return followId\n }\n\n /**\n * cancel follow\n * @param followId\n */\n public cancelFollow(followId: number) {\n const cancel = this.followCancelMap.get(followId)\n cancel && cancel()\n }\n\n /**\n * cancel all follow\n */\n public cancelAllFollow() {\n this.followCancelMap.forEach((cancel) => {\n cancel()\n })\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param pitch\n * @param yaw\n * @param options\n * @returns\n */\n private motion(position: Vector3, target: Vector3, pitch = 0, yaw = 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 if (pitch) {\n // @ts-ignore\n this.camera.rotationParent.x = MathUtils.degToRad(pitch)\n }\n\n if (yaw) {\n // @ts-ignore\n this.camera.rotationParent.y = MathUtils.degToRad(yaw)\n }\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween(\n // @ts-ignore\n { t: 0, lookat: this.controls.target.clone(), p: this.camera.rotationParent.x, yaw: this.camera.rotationParent.y })\n // @ts-ignore\n .to({ t: 1, lookat: target, p: MathUtils.degToRad(pitch), y: MathUtils.degToRad(yaw) }, 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 if (yaw)\n // @ts-ignore\n this.camera.rotationParent.y = 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 requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this._isTransitionPeriod = false\n })\n })\n .start()\n }\n}"],"mappings":"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"}
1
+ {"version":3,"names":["Box3","EventDispatcher","Group","MathUtils","Plane","Quaternion","TWEEN","Vector3","use","FollowControls","PerspectiveCameraExpand","_EventDispatcher","_inherits","_super","_createSuper","camera","controls","sceneControl","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","Map","bindEvent","_createClass","key","get","_isTransitionPeriod","_isCameraChange","value","_this2","addEventListener","dispatchEvent","type","position","target","caclCurrentPos","currentPos","distanceCoefficient","arguments","length","undefined","distance","box","setFromPoints","map","item","center","getCenter","size","getSize","halfDiagonal","maxDistance","Math","tan","fov","PI","cameraToCenterDistance","directionVector","clone","sub","normalize","lastPosition","multiplyScalar","add","lastLookat","caclSingleCoordinate","prevTarget","prevPosition","lastTarget","focus","params","_this3","Promise","res","_params$pitch","pitch","_params$yaw","yaw","_params$distance","duration","onUpdate","_params$distanceCoeff","moveOptions","_ref","_params$isTrigger","isTrigger","_ref2","lookat","onComplate","_params$duration","toArray","userInput","Array","isArray","_this3$caclCurrentPos","motion","fromArray","set","_this4","_","_ref3","_ref4","_params$duration2","x","y","z","targetPosition","cameraPosition","currentDirection","plane","radToDeg","normal","angleTo","rotationParent","setPitch","deg","direction","quaternion","pitchQuat","setFromAxisAngle","degToRad","multiply","applyQuaternion","distanceTo","copy","setYaw","caclPositionByFollow","axisX","axisY","axisZ","anglePitch","angleYaw","quaternionX","quaternionY","addScaledVector","follow","option","_this5","followId","_ref5","_ref5$relativeRotatio","relativeRotation","_ref5$pitch","_ref5$yaw","_ref5$distance","container","rotation","scale","oldCameraParent","parent","needUpdateRotation","enabled","followControls","renderer","domElement","curPosition","radius","cancelMotion","useframe","update","cancel","remove","dispose","followCancelMap","cancelFollow","cancelAllFollow","forEach","_this6","options","currentPoition","currentPositionInterpolation","requestAnimationFrame","render","scene","tween","stop","Tween","t","p","to","onStart","easing","Easing","Quadratic","InOut","_ref6","currentPosition","lerpVectors","onComplete","setTimeout","start"],"sources":["../../../../src/core/Camera/PerspectiveCamera/CameraExpand.ts"],"sourcesContent":["import type { Object3D, OrbitControls, PerspectiveCamera, SceneControl } from '@anov/3d-core'\nimport { Box3, EventDispatcher, Group, MathUtils, Plane, Quaternion, TWEEN, Vector3, use } from '@anov/3d-core'\nimport FollowControls from './FollowOrbitControls'\nimport type { CameraExpandInterface, FollowParamsOption, vector3Array } from '.'\n\ninterface ChangeCameraPresetOptions {\n duration?: number\n onUpdate?: (params: { position: Vector3; lookat: Vector3 }) => void\n onStart?: () => void\n onComplate?: () => void\n isTrigger?: boolean\n}\n\n/**\n * CameraExpand, 主要提供了一些PerspectiveCamera的拓展能力\n */\nexport class PerspectiveCameraExpand extends EventDispatcher implements CameraExpandInterface {\n private _isTransitionPeriod = false\n private camera: PerspectiveCamera\n private controls: OrbitControls\n private sceneControl: SceneControl\n private tween: any\n private _isCameraChange = false\n private followId = 0\n private followCancelMap: Map<number, () => void> = new Map()\n\n constructor(camera: PerspectiveCamera, controls: OrbitControls, sceneControl: SceneControl) {\n super()\n\n this.camera = camera\n this.controls = controls\n this.sceneControl = sceneControl\n\n this.bindEvent()\n }\n\n get isTransitionPeriod() {\n return this._isTransitionPeriod\n }\n\n get isCameraChange() {\n return this._isCameraChange\n }\n\n private bindEvent() {\n this.controls.addEventListener('start', () => {\n this._isCameraChange = true\n })\n\n this.controls.addEventListener('end', () => {\n this._isCameraChange = false\n })\n\n this.controls.addEventListener('change', () => {\n this.dispatchEvent({\n type: 'change',\n position: this.camera.position,\n target: this.controls.target,\n })\n })\n }\n\n /**\n * calculate last position from position box\n * if distance is not defined, calculate distance from box size\n * @param currentPos\n * @param distanceCoefficient\n * @param distance\n * @returns\n */\n private caclCurrentPos(currentPos: vector3Array[], distanceCoefficient = 1, distance?: 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(distance ?? cameraToCenterDistance * distanceCoefficient).add(center)\n const lastLookat = center\n\n return {\n lastPosition,\n lastLookat,\n }\n }\n\n /**\n * caclSingleCoordinate, when use focus and target is single point\n * @param prevTarget\n * @param prevPosition\n * @param lastTarget\n * @returns\n */\n private caclSingleCoordinate(prevTarget: Vector3, prevPosition: Vector3, lastTarget: Vector3, distance: number) {\n const directionVector = prevPosition.clone().sub(prevTarget).normalize()\n const lastPosition = directionVector.multiplyScalar(distance).add(lastTarget)\n\n return lastPosition\n }\n\n /**\n * camera focus\n * @param params\n * @returns\n */\n public focus(params: {\n target: vector3Array | vector3Array[] | string\n pitch?: number\n yaw?: number\n distance?: number // distance from target\n duration?: number\n isTrigger?: boolean\n distanceCoefficient?: number\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n return new Promise<\n {\n position: number[]\n target: number[]\n duration: number\n userInput: boolean\n pitch: number\n }\n >((res) => {\n const { target: position, pitch = 0, yaw = 0, distance = 20, duration, onUpdate, distanceCoefficient = 1 } = params\n\n const moveOptions = () => ({\n duration: (duration && duration * 1000) ?? 1000,\n isTrigger: params.isTrigger ?? true,\n onUpdate: ({ position, lookat }) => {\n onUpdate && onUpdate({ position, target: lookat })\n },\n onComplate: () => {\n res({\n position: this.camera.position.toArray(),\n target: this.controls.target.toArray(),\n duration: params.duration ?? 0,\n userInput: true,\n pitch: pitch ?? 40,\n })\n },\n }) as ChangeCameraPresetOptions\n\n // if target is multiple points\n if (Array.isArray(position[0])) {\n const currentPos = position as vector3Array[]\n const { lastPosition, lastLookat } = this.caclCurrentPos(currentPos, distanceCoefficient, distance)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n // if target is single point\n else {\n const currentPos = position as vector3Array\n const lastPosition = this.caclSingleCoordinate(this.controls.target, this.camera.position, new Vector3().fromArray(currentPos), distance)\n const lastLookat = new Vector3().fromArray(currentPos)\n\n this.motion(\n lastPosition,\n lastLookat,\n pitch,\n yaw,\n moveOptions(),\n )\n }\n })\n }\n\n /**\n * set camera, main set position and target\n * @param params\n * @returns\n */\n public set(params: {\n position: vector3Array\n target: vector3Array\n isTrigger?: boolean\n duration?: number\n onUpdate?: (args: { position: Vector3; target: Vector3 }) => void\n }) {\n const { position, target, isTrigger, duration } = params\n\n return new Promise<{\n position: number[]\n target: number[]\n isTrigger: boolean\n duration: number\n userInput: boolean\n }>((res, _) => {\n this.motion(\n new Vector3(position[0], position[1], position[2]),\n new Vector3(target[0], target[1], target[2]),\n 0,\n 0,\n {\n isTrigger: isTrigger ?? true,\n duration: (duration && duration * 1000) ?? 1000,\n onUpdate: ({ position, lookat }) => {\n params.onUpdate && params.onUpdate({ position, target: lookat })\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 position and target\n * @returns\n */\n public 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 * get current pitch\n */\n public get pitch() {\n const targetPosition = this.controls.target\n const cameraPosition = this.camera.position\n\n const currentDirection = cameraPosition.clone().sub(targetPosition)\n const plane = new Plane(new Vector3(0, 1, 0), 0)\n\n return -(MathUtils.radToDeg(plane.normal.angleTo(currentDirection)) - 90)\n }\n\n /**\n * get current yaw\n * @returns\n */\n public get yaw() {\n return (this.camera as (PerspectiveCamera & { rotationParent: { y: number } })).rotationParent.y\n }\n\n /**\n * set pitch, similar to ue\n * @param deg\n */\n public setPitch(deg: number) {\n if (deg > 90)\n deg = 90\n if (deg < -90)\n deg = -90\n\n const direction = new Vector3(0, 0, 1)\n const quaternion = new Quaternion()\n\n const pitchQuat = new Quaternion()\n pitchQuat.setFromAxisAngle(new Vector3(1, 0, 0), MathUtils.degToRad(-deg))\n quaternion.multiply(pitchQuat)\n\n direction.applyQuaternion(quaternion)\n direction.normalize()\n\n const distance = this.camera.position.distanceTo(this.controls.target)\n const cameraPosition = this.controls.target.clone().add(direction.multiplyScalar(distance))\n this.camera.position.copy(cameraPosition)\n }\n\n /**\n * set yaw, similar to ue\n * @param deg\n */\n public setYaw(deg: number) {\n if (deg > 180)\n deg = 180\n if (deg < -180)\n deg = -180\n\n // @ts-ignore\n this.camera.rotationParent.y = MathUtils.degToRad(deg)\n }\n\n /**\n * cacl Position By Follow\n * @param pitch\n * @param yaw\n * @param distance\n * @returns\n */\n private caclPositionByFollow(pitch = 30, yaw = 0, distance = 60) {\n const axisX = new Vector3(1, 0, 0)\n const axisY = new Vector3(0, 1, 0)\n const axisZ = new Vector3(0, 0, -1)\n const position = new Vector3(0, 0, 0)\n\n const anglePitch = MathUtils.degToRad(pitch)\n const angleYaw = MathUtils.degToRad(yaw)\n\n const quaternionX = new Quaternion().setFromAxisAngle(axisX, anglePitch)\n const quaternionY = new Quaternion().setFromAxisAngle(axisY, angleYaw)\n\n position.addScaledVector(axisZ, distance)\n position.applyQuaternion(quaternionX)\n position.applyQuaternion(quaternionY)\n\n return position\n }\n\n /**\n * follow 3d object, not only use in camera\n * @param target\n * @param camera\n * @param option\n * @returns\n */\n public follow(target: Object3D, camera: PerspectiveCamera, option?: FollowParamsOption) {\n const followId = this.followId++\n const { relativeRotation = false, pitch = 30, yaw = 0, distance = 10 } = option || {}\n const container = new Group()\n\n container.rotation.copy(target.rotation)\n container.scale.copy(target.scale)\n\n const oldCameraParent = camera.parent\n\n let needUpdateRotation = true\n\n container.add(camera)\n target.parent.add(container)\n\n this.controls.enabled = false\n\n const followControls = new FollowControls(this.camera, this.sceneControl.renderer.domElement)\n const curPosition = this.caclPositionByFollow(pitch, yaw, distance)\n\n camera.position.copy(curPosition)\n followControls.radius = camera.position.distanceTo(target.position)\n\n followControls.addEventListener('start', () => {\n relativeRotation && (needUpdateRotation = false)\n })\n\n this.controls.target.copy(target.position)\n followControls.target = target.position\n\n const cancelMotion = use.useframe(() => {\n container.position.copy(target.position)\n container.scale.copy(target.scale)\n needUpdateRotation && container.rotation.copy(target.rotation)\n\n this.controls.target.copy(target.position)\n\n followControls.target = target.position\n followControls.update()\n })\n\n const cancel = () => {\n this.controls.enabled = true\n\n oldCameraParent.add(camera)\n target.parent.remove(container)\n\n cancelMotion()\n followControls.dispose()\n }\n\n this.followCancelMap.set(followId, cancel)\n\n return followId\n }\n\n /**\n * cancel follow\n * @param followId\n */\n public cancelFollow(followId: number) {\n const cancel = this.followCancelMap.get(followId)\n cancel && cancel()\n }\n\n /**\n * cancel all follow\n */\n public cancelAllFollow() {\n this.followCancelMap.forEach((cancel) => {\n cancel()\n })\n }\n\n /**\n * interpolation move camera\n * @param position\n * @param target\n * @param pitch\n * @param yaw\n * @param options\n * @returns\n */\n private motion(position: Vector3, target: Vector3, pitch = 0, yaw = 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 if (pitch) {\n // @ts-ignore\n this.camera.rotationParent.x = MathUtils.degToRad(pitch)\n }\n\n if (yaw) {\n // @ts-ignore\n this.camera.rotationParent.y = MathUtils.degToRad(yaw)\n }\n\n requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n this.sceneControl.renderer!.render(this.sceneControl.scene!, this.sceneControl.camera!)\n })\n\n return\n }\n\n if (this.tween)\n this.tween.stop()\n\n this.tween = new TWEEN.Tween(\n // @ts-ignore\n { t: 0, lookat: this.controls.target.clone(), p: this.camera.rotationParent.x, yaw: this.camera.rotationParent.y })\n // @ts-ignore\n .to({ t: 1, lookat: target, p: MathUtils.degToRad(pitch), y: MathUtils.degToRad(yaw) }, 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 if (yaw)\n // @ts-ignore\n this.camera.rotationParent.y = 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 requestAnimationFrame(() => {\n options?.onComplate && options.onComplate()\n })\n\n this.controls.enabled = true\n\n setTimeout(() => {\n this._isTransitionPeriod = false\n })\n })\n .start()\n }\n}"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anov/3d-ability",
3
- "version": "0.0.71",
3
+ "version": "0.0.74",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "license": "MIT",