three-stdlib 2.7.1 → 2.8.2
Sign up to get free protection for your applications and to get access to all the features.
- package/cameras/CinematicCamera.cjs.js +1 -1
- package/cameras/CinematicCamera.js +3 -8
- package/controls/ArcballControls.cjs.js +1 -1
- package/controls/ArcballControls.d.ts +2 -3
- package/controls/ArcballControls.js +0 -14
- package/controls/FirstPersonControls.cjs.js +1 -1
- package/controls/FirstPersonControls.d.ts +4 -5
- package/controls/FirstPersonControls.js +36 -45
- package/exporters/GLTFExporter.cjs.js +1 -1
- package/exporters/GLTFExporter.js +9 -18
- package/index.cjs.js +1 -1
- package/loaders/EXRLoader.cjs.js +1 -1
- package/loaders/EXRLoader.js +21 -10
- package/loaders/GLTFLoader.cjs.js +1 -1
- package/loaders/GLTFLoader.js +4 -4
- package/loaders/HDRCubeTextureLoader.cjs.js +1 -1
- package/loaders/HDRCubeTextureLoader.js +1 -3
- package/loaders/LDrawLoader.cjs.js +1 -1
- package/loaders/LDrawLoader.js +1450 -1105
- package/loaders/LUT3dlLoader.cjs.js +1 -1
- package/loaders/LUT3dlLoader.js +18 -11
- package/loaders/LUTCubeLoader.cjs.js +1 -1
- package/loaders/LUTCubeLoader.js +4 -5
- package/loaders/PCDLoader.cjs.js +1 -1
- package/loaders/PCDLoader.js +2 -2
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +6 -6
- package/loaders/VRMLLoader.cjs.js +1 -1
- package/loaders/VRMLLoader.js +10 -18
- package/modifiers/CurveModifier.cjs.js +1 -1
- package/modifiers/CurveModifier.js +9 -8
- package/objects/Lensflare.cjs.js +1 -1
- package/objects/Lensflare.js +3 -11
- package/objects/Reflector.cjs.js +1 -1
- package/objects/Reflector.js +16 -12
- package/objects/ReflectorForSSRPass.cjs.js +1 -1
- package/objects/ReflectorForSSRPass.js +1 -9
- package/objects/Refractor.cjs.js +1 -1
- package/objects/Refractor.js +7 -12
- package/objects/Water.cjs.js +1 -1
- package/objects/Water.js +5 -16
- package/package.json +1 -1
- package/postprocessing/GlitchPass.cjs.js +1 -1
- package/postprocessing/GlitchPass.js +36 -33
- package/postprocessing/SMAAPass.cjs.js +1 -1
- package/postprocessing/SMAAPass.js +93 -96
- package/postprocessing/SSAOPass.cjs.js +1 -1
- package/postprocessing/SSAOPass.js +151 -152
- package/postprocessing/SavePass.cjs.js +1 -1
- package/postprocessing/SavePass.js +27 -28
- package/renderers/webgpu/WebGPUTextures.cjs.js +1 -1
- package/renderers/webgpu/WebGPUTextures.js +1 -2
- package/utils/LDrawUtils.cjs.js +1 -0
- package/utils/LDrawUtils.js +144 -0
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Loader{load(t,r,a,i){const n=new e.FileLoader(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(t,(e=>{try{r(this.parse(e))}catch(e){i?i(e):console.error(e),this.manager.itemError(t)}}),a,i)}parse(t){const r=(t=t.replace(/^#.*?(\n|\r)/gm,"").replace(/^\s*?(\n|\r)/gm,"").trim()).split(/[\n\r]+/g),a=r[0].trim().split(/\s+/g).map((e=>parseFloat(e))),i=a[1]-a[0],n=a.length;for(let e=1,t=a.length;e<t;e++)if(i!==a[e]-a[e-1])throw new Error("LUT3dlLoader: Inconsistent grid size not supported.");const o=new Array(n*n*n*
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Loader{load(t,r,a,i){const n=new e.FileLoader(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(t,(e=>{try{r(this.parse(e))}catch(e){i?i(e):console.error(e),this.manager.itemError(t)}}),a,i)}parse(t){const r=(t=t.replace(/^#.*?(\n|\r)/gm,"").replace(/^\s*?(\n|\r)/gm,"").trim()).split(/[\n\r]+/g),a=r[0].trim().split(/\s+/g).map((e=>parseFloat(e))),i=a[1]-a[0],n=a.length;for(let e=1,t=a.length;e<t;e++)if(i!==a[e]-a[e-1])throw new Error("LUT3dlLoader: Inconsistent grid size not supported.");const o=new Array(n*n*n*4);let p=0,s=0;for(let e=1,t=r.length;e<t;e++){const t=r[e].trim().split(/\s/g),a=parseFloat(t[0]),i=parseFloat(t[1]),l=parseFloat(t[2]);s=Math.max(s,a,i,l);const g=p%n*n*n+Math.floor(p/n)%n*n+Math.floor(p/(n*n))%n;o[4*g+0]=a,o[4*g+1]=i,o[4*g+2]=l,o[4*g+3]=1,p+=1}const l=Math.ceil(Math.log2(s)),g=Math.pow(2,l);for(let e=0,t=o.length;e<t;e+=4){const t=o[e+0],r=o[e+1],a=o[e+2];o[e+0]=255*t/g,o[e+1]=255*r/g,o[e+2]=255*a/g}const m=new Uint8Array(o),h=new e.DataTexture;h.image.data=m,h.image.width=n,h.image.height=n*n,h.format=e.RGBAFormat,h.type=e.UnsignedByteType,h.magFilter=e.LinearFilter,h.minFilter=e.LinearFilter,h.wrapS=e.ClampToEdgeWrapping,h.wrapT=e.ClampToEdgeWrapping,h.generateMipmaps=!1;const d=new e.DataTexture3D;return d.image.data=m,d.image.width=n,d.image.height=n,d.image.depth=n,d.format=e.RGBAFormat,d.type=e.UnsignedByteType,d.magFilter=e.LinearFilter,d.minFilter=e.LinearFilter,d.wrapS=e.ClampToEdgeWrapping,d.wrapT=e.ClampToEdgeWrapping,d.wrapR=e.ClampToEdgeWrapping,d.generateMipmaps=!1,{size:n,texture:h,texture3D:d}}}exports.LUT3dlLoader=t;
|
package/loaders/LUT3dlLoader.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Loader, FileLoader, DataTexture,
|
1
|
+
import { Loader, FileLoader, DataTexture, RGBAFormat, UnsignedByteType, LinearFilter, ClampToEdgeWrapping, DataTexture3D } from 'three';
|
2
2
|
|
3
3
|
// http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492
|
4
4
|
class LUT3dlLoader extends Loader {
|
@@ -36,7 +36,7 @@ class LUT3dlLoader extends Loader {
|
|
36
36
|
}
|
37
37
|
}
|
38
38
|
|
39
|
-
const dataArray = new Array(size * size * size *
|
39
|
+
const dataArray = new Array(size * size * size * 4);
|
40
40
|
let index = 0;
|
41
41
|
let maxOutputValue = 0.0;
|
42
42
|
|
@@ -52,20 +52,27 @@ class LUT3dlLoader extends Loader {
|
|
52
52
|
const rLayer = Math.floor(index / (size * size)) % size; // b grows first, then g, then r
|
53
53
|
|
54
54
|
const pixelIndex = bLayer * size * size + gLayer * size + rLayer;
|
55
|
-
dataArray[
|
56
|
-
dataArray[
|
57
|
-
dataArray[
|
55
|
+
dataArray[4 * pixelIndex + 0] = r;
|
56
|
+
dataArray[4 * pixelIndex + 1] = g;
|
57
|
+
dataArray[4 * pixelIndex + 2] = b;
|
58
|
+
dataArray[4 * pixelIndex + 3] = 1.0;
|
58
59
|
index += 1;
|
59
|
-
} // Find the apparent bit depth of the stored RGB values and
|
60
|
+
} // Find the apparent bit depth of the stored RGB values and map the
|
60
61
|
// values to [ 0, 255 ].
|
61
62
|
|
62
63
|
|
63
64
|
const bits = Math.ceil(Math.log2(maxOutputValue));
|
64
65
|
const maxBitValue = Math.pow(2.0, bits);
|
65
66
|
|
66
|
-
for (let i = 0, l = dataArray.length; i < l; i
|
67
|
-
const
|
68
|
-
dataArray[i
|
67
|
+
for (let i = 0, l = dataArray.length; i < l; i += 4) {
|
68
|
+
const r = dataArray[i + 0];
|
69
|
+
const g = dataArray[i + 1];
|
70
|
+
const b = dataArray[i + 2];
|
71
|
+
dataArray[i + 0] = 255 * r / maxBitValue; // r
|
72
|
+
|
73
|
+
dataArray[i + 1] = 255 * g / maxBitValue; // g
|
74
|
+
|
75
|
+
dataArray[i + 2] = 255 * b / maxBitValue; // b
|
69
76
|
}
|
70
77
|
|
71
78
|
const data = new Uint8Array(dataArray);
|
@@ -73,7 +80,7 @@ class LUT3dlLoader extends Loader {
|
|
73
80
|
texture.image.data = data;
|
74
81
|
texture.image.width = size;
|
75
82
|
texture.image.height = size * size;
|
76
|
-
texture.format =
|
83
|
+
texture.format = RGBAFormat;
|
77
84
|
texture.type = UnsignedByteType;
|
78
85
|
texture.magFilter = LinearFilter;
|
79
86
|
texture.minFilter = LinearFilter;
|
@@ -85,7 +92,7 @@ class LUT3dlLoader extends Loader {
|
|
85
92
|
texture3D.image.width = size;
|
86
93
|
texture3D.image.height = size;
|
87
94
|
texture3D.image.depth = size;
|
88
|
-
texture3D.format =
|
95
|
+
texture3D.format = RGBAFormat;
|
89
96
|
texture3D.type = UnsignedByteType;
|
90
97
|
texture3D.magFilter = LinearFilter;
|
91
98
|
texture3D.minFilter = LinearFilter;
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class a extends e.Loader{load(a,t,r,i){const n=new e.FileLoader(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(a,(e=>{try{t(this.parse(e))}catch(e){i?i(e):console.error(e),this.manager.itemError(a)}}),r,i)}parse(a){a=a.replace(/^#.*?(\n|\r)/gm,"").replace(/^\s*?(\n|\r)/gm,"").trim();let t=null,r=null;const i=new e.Vector3(0,0,0),n=new e.Vector3(1,1,1),s=a.split(/[\n\r]+/g);let p=null,
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class a extends e.Loader{load(a,t,r,i){const n=new e.FileLoader(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(a,(e=>{try{t(this.parse(e))}catch(e){i?i(e):console.error(e),this.manager.itemError(a)}}),r,i)}parse(a){a=a.replace(/^#.*?(\n|\r)/gm,"").replace(/^\s*?(\n|\r)/gm,"").trim();let t=null,r=null;const i=new e.Vector3(0,0,0),n=new e.Vector3(1,1,1),s=a.split(/[\n\r]+/g);let p=null,l=0;for(let e=0,a=s.length;e<a;e++){const a=s[e].trim(),o=a.split(/\s/g);switch(o[0]){case"TITLE":t=a.substring(7,a.length-1);break;case"LUT_3D_SIZE":const e=o[1];r=parseFloat(e),p=new Uint8Array(r*r*r*4);break;case"DOMAIN_MIN":i.x=parseFloat(o[1]),i.y=parseFloat(o[2]),i.z=parseFloat(o[3]);break;case"DOMAIN_MAX":n.x=parseFloat(o[1]),n.y=parseFloat(o[2]),n.z=parseFloat(o[3]);break;default:const s=parseFloat(o[0]),g=parseFloat(o[1]),m=parseFloat(o[2]);if(s>1||s<0||g>1||g<0||m>1||m<0)throw new Error("LUTCubeLoader : Non normalized values not supported.");p[l+0]=255*s,p[l+1]=255*g,p[l+2]=255*m,p[l+3]=255,l+=4}}const o=new e.DataTexture;o.image.data=p,o.image.width=r,o.image.height=r*r,o.type=e.UnsignedByteType,o.magFilter=e.LinearFilter,o.minFilter=e.LinearFilter,o.wrapS=e.ClampToEdgeWrapping,o.wrapT=e.ClampToEdgeWrapping,o.generateMipmaps=!1;const g=new e.DataTexture3D;return g.image.data=p,g.image.width=r,g.image.height=r,g.image.depth=r,g.type=e.UnsignedByteType,g.magFilter=e.LinearFilter,g.minFilter=e.LinearFilter,g.wrapS=e.ClampToEdgeWrapping,g.wrapT=e.ClampToEdgeWrapping,g.wrapR=e.ClampToEdgeWrapping,g.generateMipmaps=!1,{title:t,size:r,domainMin:i,domainMax:n,texture:o,texture3D:g}}}exports.LUTCubeLoader=a;
|
package/loaders/LUTCubeLoader.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Loader, FileLoader, Vector3, DataTexture,
|
1
|
+
import { Loader, FileLoader, Vector3, DataTexture, UnsignedByteType, LinearFilter, ClampToEdgeWrapping, DataTexture3D } from 'three';
|
2
2
|
|
3
3
|
// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf
|
4
4
|
class LUTCubeLoader extends Loader {
|
@@ -46,7 +46,7 @@ class LUTCubeLoader extends Loader {
|
|
46
46
|
// more precision than can be captured with Uint8Array.
|
47
47
|
const sizeToken = split[1];
|
48
48
|
size = parseFloat(sizeToken);
|
49
|
-
data = new Uint8Array(size * size * size *
|
49
|
+
data = new Uint8Array(size * size * size * 4);
|
50
50
|
break;
|
51
51
|
|
52
52
|
case 'DOMAIN_MIN':
|
@@ -73,7 +73,8 @@ class LUTCubeLoader extends Loader {
|
|
73
73
|
data[currIndex + 0] = r * 255;
|
74
74
|
data[currIndex + 1] = g * 255;
|
75
75
|
data[currIndex + 2] = b * 255;
|
76
|
-
currIndex
|
76
|
+
data[currIndex + 3] = 255;
|
77
|
+
currIndex += 4;
|
77
78
|
}
|
78
79
|
}
|
79
80
|
|
@@ -81,7 +82,6 @@ class LUTCubeLoader extends Loader {
|
|
81
82
|
texture.image.data = data;
|
82
83
|
texture.image.width = size;
|
83
84
|
texture.image.height = size * size;
|
84
|
-
texture.format = RGBFormat;
|
85
85
|
texture.type = UnsignedByteType;
|
86
86
|
texture.magFilter = LinearFilter;
|
87
87
|
texture.minFilter = LinearFilter;
|
@@ -93,7 +93,6 @@ class LUTCubeLoader extends Loader {
|
|
93
93
|
texture3D.image.width = size;
|
94
94
|
texture3D.image.height = size;
|
95
95
|
texture3D.image.depth = size;
|
96
|
-
texture3D.format = RGBFormat;
|
97
96
|
texture3D.type = UnsignedByteType;
|
98
97
|
texture3D.magFilter = LinearFilter;
|
99
98
|
texture3D.minFilter = LinearFilter;
|
package/loaders/PCDLoader.cjs.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Loader{constructor(e){super(e),this.littleEndian=!0}load(t,i,s,n){const r=this,o=new e.FileLoader(r.manager);o.setPath(r.path),o.setResponseType("arraybuffer"),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(e){try{i(r.parse(e,t))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),s,n)}parse(t,i){const s=e.LoaderUtils.decodeText(new Uint8Array(t)),n=function(e){const t={},i=e.search(/[\r\n]DATA\s(\S*)\s/i),s=/[\r\n]DATA\s(\S*)\s/i.exec(e.substr(i-1));if(t.data=s[1],t.headerLen=s[0].length+i,t.str=e.substr(0,t.headerLen),t.str=t.str.replace(/\#.*/gi,""),t.version=/VERSION (.*)/i.exec(t.str),t.fields=/FIELDS (.*)/i.exec(t.str),t.size=/SIZE (.*)/i.exec(t.str),t.type=/TYPE (.*)/i.exec(t.str),t.count=/COUNT (.*)/i.exec(t.str),t.width=/WIDTH (.*)/i.exec(t.str),t.height=/HEIGHT (.*)/i.exec(t.str),t.viewpoint=/VIEWPOINT (.*)/i.exec(t.str),t.points=/POINTS (.*)/i.exec(t.str),null!==t.version&&(t.version=parseFloat(t.version[1])),null!==t.fields&&(t.fields=t.fields[1].split(" ")),null!==t.type&&(t.type=t.type[1].split(" ")),null!==t.width&&(t.width=parseInt(t.width[1])),null!==t.height&&(t.height=parseInt(t.height[1])),null!==t.viewpoint&&(t.viewpoint=t.viewpoint[1]),null!==t.points&&(t.points=parseInt(t.points[1],10)),null===t.points&&(t.points=t.width*t.height),null!==t.size&&(t.size=t.size[1].split(" ").map((function(e){return parseInt(e,10)}))),null!==t.count)t.count=t.count[1].split(" ").map((function(e){return parseInt(e,10)}));else{t.count=[];for(let e=0,i=t.fields.length;e<i;e++)t.count.push(1)}t.offset={};let n=0;for(let e=0,i=t.fields.length;e<i;e++)"ascii"===t.data?t.offset[t.fields[e]]=e:(t.offset[t.fields[e]]=n,n+=t.size[e]*t.count[e]);return t.rowSize=n,t}(s),r=[],o=[],l=[];if("ascii"===n.data){const e=n.offset,t=s.substr(n.headerLen).split("\n");for(let i=0,s=t.length;i<s;i++){if(""===t[i])continue;const s=t[i].split(" ");if(void 0!==e.x&&(r.push(parseFloat(s[e.x])),r.push(parseFloat(s[e.y])),r.push(parseFloat(s[e.z]))),void 0!==e.rgb){const t=parseFloat(s[e.rgb]),i=t>>16&255,n=t>>8&255,r=t>>0&255;l.push(i/255,n/255,r/255)}void 0!==e.normal_x&&(o.push(parseFloat(s[e.normal_x])),o.push(parseFloat(s[e.normal_y])),o.push(parseFloat(s[e.normal_z])))}}if("binary_compressed"===n.data){const e=new Uint32Array(t.slice(n.headerLen,n.headerLen+8)),i=e[0],s=e[1],a=function(e,t){const i=e.length,s=new Uint8Array(t);let n,r,o,l=0,a=0;do{if(n=e[l++],n<32){if(n++,a+n>t)throw new Error("Output buffer is not large enough");if(l+n>i)throw new Error("Invalid compressed data");do{s[a++]=e[l++]}while(--n)}else{if(r=n>>5,o=a-((31&n)<<8)-1,l>=i)throw new Error("Invalid compressed data");if(7===r&&(r+=e[l++],l>=i))throw new Error("Invalid compressed data");if(o-=e[l++],a+r+2>t)throw new Error("Output buffer is not large enough");if(o<0)throw new Error("Invalid compressed data");if(o>=a)throw new Error("Invalid compressed data");do{s[a++]=s[o++]}while(2+--r)}}while(l<i);return s}(new Uint8Array(t,n.headerLen+8,i),s),p=new DataView(a.buffer),h=n.offset;for(let e=0;e<n.points;e++)void 0!==h.x&&(r.push(p.getFloat32(n.points*h.x+n.size[0]*e,this.littleEndian)),r.push(p.getFloat32(n.points*h.y+n.size[1]*e,this.littleEndian)),r.push(p.getFloat32(n.points*h.z+n.size[2]*e,this.littleEndian))),void 0!==h.rgb&&(l.push(p.getUint8(n.points*h.rgb+n.size[3]*e+
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Loader{constructor(e){super(e),this.littleEndian=!0}load(t,i,s,n){const r=this,o=new e.FileLoader(r.manager);o.setPath(r.path),o.setResponseType("arraybuffer"),o.setRequestHeader(r.requestHeader),o.setWithCredentials(r.withCredentials),o.load(t,(function(e){try{i(r.parse(e,t))}catch(e){n?n(e):console.error(e),r.manager.itemError(t)}}),s,n)}parse(t,i){const s=e.LoaderUtils.decodeText(new Uint8Array(t)),n=function(e){const t={},i=e.search(/[\r\n]DATA\s(\S*)\s/i),s=/[\r\n]DATA\s(\S*)\s/i.exec(e.substr(i-1));if(t.data=s[1],t.headerLen=s[0].length+i,t.str=e.substr(0,t.headerLen),t.str=t.str.replace(/\#.*/gi,""),t.version=/VERSION (.*)/i.exec(t.str),t.fields=/FIELDS (.*)/i.exec(t.str),t.size=/SIZE (.*)/i.exec(t.str),t.type=/TYPE (.*)/i.exec(t.str),t.count=/COUNT (.*)/i.exec(t.str),t.width=/WIDTH (.*)/i.exec(t.str),t.height=/HEIGHT (.*)/i.exec(t.str),t.viewpoint=/VIEWPOINT (.*)/i.exec(t.str),t.points=/POINTS (.*)/i.exec(t.str),null!==t.version&&(t.version=parseFloat(t.version[1])),null!==t.fields&&(t.fields=t.fields[1].split(" ")),null!==t.type&&(t.type=t.type[1].split(" ")),null!==t.width&&(t.width=parseInt(t.width[1])),null!==t.height&&(t.height=parseInt(t.height[1])),null!==t.viewpoint&&(t.viewpoint=t.viewpoint[1]),null!==t.points&&(t.points=parseInt(t.points[1],10)),null===t.points&&(t.points=t.width*t.height),null!==t.size&&(t.size=t.size[1].split(" ").map((function(e){return parseInt(e,10)}))),null!==t.count)t.count=t.count[1].split(" ").map((function(e){return parseInt(e,10)}));else{t.count=[];for(let e=0,i=t.fields.length;e<i;e++)t.count.push(1)}t.offset={};let n=0;for(let e=0,i=t.fields.length;e<i;e++)"ascii"===t.data?t.offset[t.fields[e]]=e:(t.offset[t.fields[e]]=n,n+=t.size[e]*t.count[e]);return t.rowSize=n,t}(s),r=[],o=[],l=[];if("ascii"===n.data){const e=n.offset,t=s.substr(n.headerLen).split("\n");for(let i=0,s=t.length;i<s;i++){if(""===t[i])continue;const s=t[i].split(" ");if(void 0!==e.x&&(r.push(parseFloat(s[e.x])),r.push(parseFloat(s[e.y])),r.push(parseFloat(s[e.z]))),void 0!==e.rgb){const t=parseFloat(s[e.rgb]),i=t>>16&255,n=t>>8&255,r=t>>0&255;l.push(i/255,n/255,r/255)}void 0!==e.normal_x&&(o.push(parseFloat(s[e.normal_x])),o.push(parseFloat(s[e.normal_y])),o.push(parseFloat(s[e.normal_z])))}}if("binary_compressed"===n.data){const e=new Uint32Array(t.slice(n.headerLen,n.headerLen+8)),i=e[0],s=e[1],a=function(e,t){const i=e.length,s=new Uint8Array(t);let n,r,o,l=0,a=0;do{if(n=e[l++],n<32){if(n++,a+n>t)throw new Error("Output buffer is not large enough");if(l+n>i)throw new Error("Invalid compressed data");do{s[a++]=e[l++]}while(--n)}else{if(r=n>>5,o=a-((31&n)<<8)-1,l>=i)throw new Error("Invalid compressed data");if(7===r&&(r+=e[l++],l>=i))throw new Error("Invalid compressed data");if(o-=e[l++],a+r+2>t)throw new Error("Output buffer is not large enough");if(o<0)throw new Error("Invalid compressed data");if(o>=a)throw new Error("Invalid compressed data");do{s[a++]=s[o++]}while(2+--r)}}while(l<i);return s}(new Uint8Array(t,n.headerLen+8,i),s),p=new DataView(a.buffer),h=n.offset;for(let e=0;e<n.points;e++)void 0!==h.x&&(r.push(p.getFloat32(n.points*h.x+n.size[0]*e,this.littleEndian)),r.push(p.getFloat32(n.points*h.y+n.size[1]*e,this.littleEndian)),r.push(p.getFloat32(n.points*h.z+n.size[2]*e,this.littleEndian))),void 0!==h.rgb&&(l.push(p.getUint8(n.points*h.rgb+n.size[3]*e+2)/255),l.push(p.getUint8(n.points*h.rgb+n.size[3]*e+1)/255),l.push(p.getUint8(n.points*h.rgb+n.size[3]*e+0)/255)),void 0!==h.normal_x&&(o.push(p.getFloat32(n.points*h.normal_x+n.size[4]*e,this.littleEndian)),o.push(p.getFloat32(n.points*h.normal_y+n.size[5]*e,this.littleEndian)),o.push(p.getFloat32(n.points*h.normal_z+n.size[6]*e,this.littleEndian)))}if("binary"===n.data){const e=new DataView(t,n.headerLen),i=n.offset;for(let t=0,s=0;t<n.points;t++,s+=n.rowSize)void 0!==i.x&&(r.push(e.getFloat32(s+i.x,this.littleEndian)),r.push(e.getFloat32(s+i.y,this.littleEndian)),r.push(e.getFloat32(s+i.z,this.littleEndian))),void 0!==i.rgb&&(l.push(e.getUint8(s+i.rgb+2)/255),l.push(e.getUint8(s+i.rgb+1)/255),l.push(e.getUint8(s+i.rgb+0)/255)),void 0!==i.normal_x&&(o.push(e.getFloat32(s+i.normal_x,this.littleEndian)),o.push(e.getFloat32(s+i.normal_y,this.littleEndian)),o.push(e.getFloat32(s+i.normal_z,this.littleEndian)))}const a=new e.BufferGeometry;r.length>0&&a.setAttribute("position",new e.Float32BufferAttribute(r,3)),o.length>0&&a.setAttribute("normal",new e.Float32BufferAttribute(o,3)),l.length>0&&a.setAttribute("color",new e.Float32BufferAttribute(l,3)),a.computeBoundingSphere();const p=new e.PointsMaterial({size:.005});l.length>0?p.vertexColors=!0:p.color.setHex(16777215*Math.random());const h=new e.Points(a,p);let u=i.split("").reverse().join("");return u=/([^\/]*)/.exec(u),u=u[1].split("").reverse().join(""),h.name=u,h}}exports.PCDLoader=t;
|
package/loaders/PCDLoader.js
CHANGED
@@ -197,9 +197,9 @@ class PCDLoader extends Loader {
|
|
197
197
|
}
|
198
198
|
|
199
199
|
if (offset.rgb !== undefined) {
|
200
|
-
color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0);
|
201
|
-
color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0);
|
202
200
|
color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255.0);
|
201
|
+
color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255.0);
|
202
|
+
color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255.0);
|
203
203
|
}
|
204
204
|
|
205
205
|
if (offset.normal_x !== undefined) {
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.DataTextureLoader{constructor(t){super(t),this.type=e.HalfFloatType}parse(t){const r=function(e,t){switch(e){case 1:console.error("THREE.RGBELoader Read Error: "+(t||""));break;case 2:console.error("THREE.RGBELoader Write Error: "+(t||""));break;case 3:console.error("THREE.RGBELoader Bad File Format: "+(t||""));break;default:case 4:console.error("THREE.RGBELoader: Error: "+(t||""))}return-1},a=function(e,t,r){t=t||1024;let a=e.pos,n=-1,o=0,s="",i=String.fromCharCode.apply(null,new Uint16Array(e.subarray(a,a+128)));for(;0>(n=i.indexOf("\n"))&&o<t&&a<e.byteLength;)s+=i,o+=i.length,a+=128,i+=String.fromCharCode.apply(null,new Uint16Array(e.subarray(a,a+128)));return-1<n&&(!1!==r&&(e.pos+=o+n+1),s+i.slice(0,n))},n=function(e,t,r,a){const n=e[t+3],o=Math.pow(2,n-128)/255;r[a+0]=e[t+0]*o,r[a+1]=e[t+1]*o,r[a+2]=e[t+2]*o},o=function(t,r,a,n){const o=t[r+3],s=Math.pow(2,o-128)/255;a[n+0]=e.DataUtils.toHalfFloat(Math.min(t[r+0]*s,65504)),a[n+1]=e.DataUtils.toHalfFloat(Math.min(t[r+1]*s,65504)),a[n+2]=e.DataUtils.toHalfFloat(Math.min(t[r+2]*s,65504))},s=new Uint8Array(t);s.pos=0;const i=function(e){const t=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,n=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,o=/^\s*FORMAT=(\S+)\s*$/,s=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,i={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let l,c;if(e.pos>=e.byteLength||!(l=a(e)))return r(1,"no header found");if(!(c=l.match(/^#\?(\S+)/)))return r(3,"bad initial token");for(i.valid|=1,i.programtype=c[1],i.string+=l+"\n";l=a(e),!1!==l;)if(i.string+=l+"\n","#"!==l.charAt(0)){if((c=l.match(t))&&(i.gamma=parseFloat(c[1],10)),(c=l.match(n))&&(i.exposure=parseFloat(c[1],10)),(c=l.match(o))&&(i.valid|=2,i.format=c[1]),(c=l.match(s))&&(i.valid|=4,i.height=parseInt(c[1],10),i.width=parseInt(c[2],10)),2&i.valid&&4&i.valid)break}else i.comments+=l+"\n";return 2&i.valid?4&i.valid?i:r(3,"missing image size specifier"):r(3,"missing format specifier")}(s);if(-1!==i){const t=i.width,a=i.height,l=function(e,t,a){const n=t;if(n<8||n>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);if(n!==(e[2]<<8|e[3]))return r(3,"wrong scanline width");const o=new Uint8Array(4*t*a);if(!o.length)return r(4,"unable to allocate buffer space");let s=0,i=0;const l=4*n,c=new Uint8Array(4),f=new Uint8Array(l);let p=a;for(;p>0&&i<e.byteLength;){if(i+4>e.byteLength)return r(1);if(c[0]=e[i++],c[1]=e[i++],c[2]=e[i++],c[3]=e[i++],2!=c[0]||2!=c[1]||(c[2]<<8|c[3])!=n)return r(3,"bad rgbe scanline format");let t,a=0;for(;a<l&&i<e.byteLength;){t=e[i++];const n=t>128;if(n&&(t-=128),0===t||a+t>l)return r(3,"bad scanline data");if(n){const r=e[i++];for(let e=0;e<t;e++)f[a++]=r}else f.set(e.subarray(i,i+t),a),a+=t,i+=t}const d=n;for(let e=0;e<d;e++){let t=0;o[s]=f[e+t],t+=n,o[s+1]=f[e+t],t+=n,o[s+2]=f[e+t],t+=n,o[s+3]=f[e+t],s+=4}p--}return o}(s.subarray(s.pos),t,a);if(-1!==l){let r,s,c,f;switch(this.type){case e.FloatType:f=l.length/4;const t=new Float32Array(
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.DataTextureLoader{constructor(t){super(t),this.type=e.HalfFloatType}parse(t){const r=function(e,t){switch(e){case 1:console.error("THREE.RGBELoader Read Error: "+(t||""));break;case 2:console.error("THREE.RGBELoader Write Error: "+(t||""));break;case 3:console.error("THREE.RGBELoader Bad File Format: "+(t||""));break;default:case 4:console.error("THREE.RGBELoader: Error: "+(t||""))}return-1},a=function(e,t,r){t=t||1024;let a=e.pos,n=-1,o=0,s="",i=String.fromCharCode.apply(null,new Uint16Array(e.subarray(a,a+128)));for(;0>(n=i.indexOf("\n"))&&o<t&&a<e.byteLength;)s+=i,o+=i.length,a+=128,i+=String.fromCharCode.apply(null,new Uint16Array(e.subarray(a,a+128)));return-1<n&&(!1!==r&&(e.pos+=o+n+1),s+i.slice(0,n))},n=function(e,t,r,a){const n=e[t+3],o=Math.pow(2,n-128)/255;r[a+0]=e[t+0]*o,r[a+1]=e[t+1]*o,r[a+2]=e[t+2]*o,r[a+3]=1},o=function(t,r,a,n){const o=t[r+3],s=Math.pow(2,o-128)/255;a[n+0]=e.DataUtils.toHalfFloat(Math.min(t[r+0]*s,65504)),a[n+1]=e.DataUtils.toHalfFloat(Math.min(t[r+1]*s,65504)),a[n+2]=e.DataUtils.toHalfFloat(Math.min(t[r+2]*s,65504)),a[n+3]=e.DataUtils.toHalfFloat(1)},s=new Uint8Array(t);s.pos=0;const i=function(e){const t=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,n=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,o=/^\s*FORMAT=(\S+)\s*$/,s=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,i={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let l,c;if(e.pos>=e.byteLength||!(l=a(e)))return r(1,"no header found");if(!(c=l.match(/^#\?(\S+)/)))return r(3,"bad initial token");for(i.valid|=1,i.programtype=c[1],i.string+=l+"\n";l=a(e),!1!==l;)if(i.string+=l+"\n","#"!==l.charAt(0)){if((c=l.match(t))&&(i.gamma=parseFloat(c[1],10)),(c=l.match(n))&&(i.exposure=parseFloat(c[1],10)),(c=l.match(o))&&(i.valid|=2,i.format=c[1]),(c=l.match(s))&&(i.valid|=4,i.height=parseInt(c[1],10),i.width=parseInt(c[2],10)),2&i.valid&&4&i.valid)break}else i.comments+=l+"\n";return 2&i.valid?4&i.valid?i:r(3,"missing image size specifier"):r(3,"missing format specifier")}(s);if(-1!==i){const t=i.width,a=i.height,l=function(e,t,a){const n=t;if(n<8||n>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);if(n!==(e[2]<<8|e[3]))return r(3,"wrong scanline width");const o=new Uint8Array(4*t*a);if(!o.length)return r(4,"unable to allocate buffer space");let s=0,i=0;const l=4*n,c=new Uint8Array(4),f=new Uint8Array(l);let p=a;for(;p>0&&i<e.byteLength;){if(i+4>e.byteLength)return r(1);if(c[0]=e[i++],c[1]=e[i++],c[2]=e[i++],c[3]=e[i++],2!=c[0]||2!=c[1]||(c[2]<<8|c[3])!=n)return r(3,"bad rgbe scanline format");let t,a=0;for(;a<l&&i<e.byteLength;){t=e[i++];const n=t>128;if(n&&(t-=128),0===t||a+t>l)return r(3,"bad scanline data");if(n){const r=e[i++];for(let e=0;e<t;e++)f[a++]=r}else f.set(e.subarray(i,i+t),a),a+=t,i+=t}const d=n;for(let e=0;e<d;e++){let t=0;o[s]=f[e+t],t+=n,o[s+1]=f[e+t],t+=n,o[s+2]=f[e+t],t+=n,o[s+3]=f[e+t],s+=4}p--}return o}(s.subarray(s.pos),t,a);if(-1!==l){let r,s,c,f;switch(this.type){case e.FloatType:f=l.length/4;const t=new Float32Array(4*f);for(let e=0;e<f;e++)n(l,4*e,t,4*e);r=t,c=e.FloatType;break;case e.HalfFloatType:f=l.length/4;const a=new Uint16Array(4*f);for(let e=0;e<f;e++)o(l,4*e,a,3*e);r=a,c=e.HalfFloatType;break;default:console.error("THREE.RGBELoader: unsupported type: ",this.type)}return{width:t,height:a,data:r,header:i.string,gamma:i.gamma,exposure:i.exposure,format:s,type:c}}}return null}setDataType(e){return this.type=e,this}load(t,r,a,n){return super.load(t,(function(t,a){switch(t.type){case e.FloatType:case e.HalfFloatType:t.encoding=e.LinearEncoding,t.minFilter=e.LinearFilter,t.magFilter=e.LinearFilter,t.generateMipmaps=!1,t.flipY=!0}r&&r(t,a)}),a,n)}}exports.RGBELoader=t;
|
package/loaders/RGBELoader.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { DataTextureLoader, HalfFloatType, FloatType, DataUtils,
|
1
|
+
import { DataTextureLoader, HalfFloatType, FloatType, DataUtils, LinearEncoding, LinearFilter } from 'three';
|
2
2
|
|
3
3
|
// http://en.wikipedia.org/wiki/RGBE_image_format
|
4
4
|
|
@@ -281,6 +281,7 @@ class RGBELoader extends DataTextureLoader {
|
|
281
281
|
destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;
|
282
282
|
destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;
|
283
283
|
destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;
|
284
|
+
destArray[destOffset + 3] = 1;
|
284
285
|
};
|
285
286
|
|
286
287
|
const RGBEByteToRGBHalf = function (sourceArray, sourceOffset, destArray, destOffset) {
|
@@ -290,6 +291,7 @@ class RGBELoader extends DataTextureLoader {
|
|
290
291
|
destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));
|
291
292
|
destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));
|
292
293
|
destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));
|
294
|
+
destArray[destOffset + 3] = DataUtils.toHalfFloat(1);
|
293
295
|
};
|
294
296
|
|
295
297
|
const byteArray = new Uint8Array(buffer);
|
@@ -308,27 +310,25 @@ class RGBELoader extends DataTextureLoader {
|
|
308
310
|
switch (this.type) {
|
309
311
|
case FloatType:
|
310
312
|
numElements = image_rgba_data.length / 4;
|
311
|
-
const floatArray = new Float32Array(numElements *
|
313
|
+
const floatArray = new Float32Array(numElements * 4);
|
312
314
|
|
313
315
|
for (let j = 0; j < numElements; j++) {
|
314
|
-
RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j *
|
316
|
+
RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
|
315
317
|
}
|
316
318
|
|
317
319
|
data = floatArray;
|
318
|
-
format = RGBFormat;
|
319
320
|
type = FloatType;
|
320
321
|
break;
|
321
322
|
|
322
323
|
case HalfFloatType:
|
323
324
|
numElements = image_rgba_data.length / 4;
|
324
|
-
const halfArray = new Uint16Array(numElements *
|
325
|
+
const halfArray = new Uint16Array(numElements * 4);
|
325
326
|
|
326
327
|
for (let j = 0; j < numElements; j++) {
|
327
328
|
RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 3);
|
328
329
|
}
|
329
330
|
|
330
331
|
data = halfArray;
|
331
|
-
format = RGBFormat;
|
332
332
|
type = HalfFloatType;
|
333
333
|
break;
|
334
334
|
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=require("chevrotain");class n extends e.Loader{constructor(e){super(e)}load(t,n,r,o){const a=this,s=""===a.path?e.LoaderUtils.extractUrlBase(t):a.path,l=new e.FileLoader(a.manager);l.setPath(a.path),l.setRequestHeader(a.requestHeader),l.setWithCredentials(a.withCredentials),l.load(t,(function(e){try{n(a.parse(e,s))}catch(e){o?o(e):console.error(e),a.manager.itemError(t)}}),r,o)}parse(n,l){const i={};function c(e){e.DEF&&(i[e.DEF]=e);const t=e.fields;for(let e=0,n=t.length;e<n;e++){const n=t[e];if("node"===n.type){const e=n.values;for(let t=0,n=e.length;t<n;t++)c(e[t])}}}function u(t){return t.USE?function(e){const t=u(i[e]);return t.isObject3D||t.isMaterial?t.clone():t}(t.USE):(void 0!==t.build||(t.build=function(t){const n=t.name;let r;switch(n){case"Group":case"Transform":case"Collision":r=function(t){const n=new e.Group,r=t.fields;for(let t=0,o=r.length;t<o;t++){const o=r[t],a=o.name,s=o.values;switch(a){case"bboxCenter":case"bboxSize":case"center":break;case"children":p(s,n);break;case"collide":break;case"rotation":const t=new e.Vector3(s[0],s[1],s[2]),r=s[3];n.quaternion.setFromAxisAngle(t,r);break;case"scale":n.scale.set(s[0],s[1],s[2]);break;case"scaleOrientation":break;case"translation":n.position.set(s[0],s[1],s[2]);break;case"proxy":break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return n}(t);break;case"Background":r=function(t){const n=new e.Group;let r,o,a,s;const l=t.fields;for(let e=0,t=l.length;e<t;e++){const t=l[e],n=t.name,i=t.values;switch(n){case"groundAngle":r=i;break;case"groundColor":o=i;break;case"backUrl":case"bottomUrl":case"frontUrl":case"leftUrl":case"rightUrl":case"topUrl":break;case"skyAngle":a=i;break;case"skyColor":s=i;break;default:console.warn("THREE.VRMLLoader: Unknown field:",n)}}const i=1e4;if(s){const t=new e.SphereGeometry(i,32,16),r=new e.MeshBasicMaterial({fog:!1,side:e.BackSide,depthWrite:!1,depthTest:!1});s.length>3?(N(t,i,a,I(s),!0),r.vertexColors=!0):r.color.setRGB(s[0],s[1],s[2]);const o=new e.Mesh(t,r);n.add(o)}if(o&&o.length>0){const t=new e.SphereGeometry(i,32,16,0,2*Math.PI,.5*Math.PI,1.5*Math.PI),a=new e.MeshBasicMaterial({fog:!1,side:e.BackSide,vertexColors:!0,depthWrite:!1,depthTest:!1});N(t,i,r,I(o),!1);const s=new e.Mesh(t,a);n.add(s)}return n.renderOrder=-1/0,n}(t);break;case"Shape":r=function(t){const n=t.fields;let r,o,a=new e.MeshBasicMaterial({color:0});for(let e=0,t=n.length;e<t;e++){const t=n[e],o=t.name,s=t.values;switch(o){case"appearance":null!==s[0]&&(a=u(s[0]));break;case"geometry":null!==s[0]&&(r=u(s[0]));break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}if(r&&r.attributes.position){const t=r._type;if("points"===t){const t=new e.PointsMaterial({color:16777215});void 0!==r.attributes.color?t.vertexColors=!0:a.isMeshPhongMaterial&&t.color.copy(a.emissive),o=new e.Points(r,t)}else if("line"===t){const t=new e.LineBasicMaterial({color:16777215});void 0!==r.attributes.color?t.vertexColors=!0:a.isMeshPhongMaterial&&t.color.copy(a.emissive),o=new e.LineSegments(r,t)}else void 0!==r._solid&&(a.side=r._solid?e.FrontSide:e.DoubleSide),void 0!==r.attributes.color&&(a.vertexColors=!0),o=new e.Mesh(r,a)}else o=new e.Object3D,o.visible=!1;return o}(t);break;case"Appearance":r=function(t){let n,r=new e.MeshPhongMaterial;const o=t.fields;for(let t=0,a=o.length;t<a;t++){const a=o[t],s=a.name,l=a.values;switch(s){case"material":if(null!==l[0]){const e=u(l[0]);e.diffuseColor&&r.color.copy(e.diffuseColor),e.emissiveColor&&r.emissive.copy(e.emissiveColor),e.shininess&&(r.shininess=e.shininess),e.specularColor&&r.specular.copy(e.specularColor),e.transparency&&(r.opacity=1-e.transparency),e.transparency>0&&(r.transparent=!0)}else r=new e.MeshBasicMaterial({color:0});break;case"texture":const t=l[0];null!==t&&("ImageTexture"!==t.name&&"PixelTexture"!==t.name||(r.map=u(t)));break;case"textureTransform":null!==l[0]&&(n=u(l[0]));break;default:console.warn("THREE.VRMLLoader: Unknown field:",s)}}if(r.map){if(r.map.__type){switch(r.map.__type){case s.INTENSITY_ALPHA:r.opacity=1;break;case s.RGB:r.color.set(16777215);break;case s.RGBA:r.color.set(16777215),r.opacity=1}delete r.map.__type}n&&(r.map.center.copy(n.center),r.map.rotation=n.rotation,r.map.repeat.copy(n.scale),r.map.offset.copy(n.translation))}return r}(t);break;case"Material":r=function(t){const n={},r=t.fields;for(let t=0,o=r.length;t<o;t++){const o=r[t],a=o.name,s=o.values;switch(a){case"ambientIntensity":break;case"diffuseColor":n.diffuseColor=new e.Color(s[0],s[1],s[2]);break;case"emissiveColor":n.emissiveColor=new e.Color(s[0],s[1],s[2]);break;case"shininess":n.shininess=s[0];break;case"specularColor":n.emissiveColor=new e.Color(s[0],s[1],s[2]);break;case"transparency":n.transparency=s[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return n}(t);break;case"ImageTexture":r=function(t){let n,r=e.RepeatWrapping,o=e.RepeatWrapping;const a=t.fields;for(let t=0,s=a.length;t<s;t++){const s=a[t],l=s.name,i=s.values;switch(l){case"url":const t=i[0];t&&(n=B.load(t));break;case"repeatS":!1===i[0]&&(r=e.ClampToEdgeWrapping);break;case"repeatT":!1===i[0]&&(o=e.ClampToEdgeWrapping);break;default:console.warn("THREE.VRMLLoader: Unknown field:",l)}}n&&(n.wrapS=r,n.wrapT=o);return n}(t);break;case"PixelTexture":r=function(t){let n,r=e.RepeatWrapping,o=e.RepeatWrapping;const a=t.fields;for(let t=0,s=a.length;t<s;t++){const s=a[t],l=s.name,i=s.values;switch(l){case"image":const t=i[0],a=i[1],s=i[2],c=2===s||4===s,u=d(s),p=new Uint8Array(t*a*(!0===c?4:3)),h={r:0,g:0,b:0,a:0};for(let e=3,t=0,n=i.length;e<n;e++,t++)if(f(i[e],u,h),!0===c){const e=4*t;p[e+0]=h.r,p[e+1]=h.g,p[e+2]=h.b,p[e+3]=h.a}else{const e=3*t;p[e+0]=h.r,p[e+1]=h.g,p[e+2]=h.b}n=new e.DataTexture(p,t,a,!0===c?e.RGBAFormat:e.RGBFormat),n.needsUpdate=!0,n.__type=u;break;case"repeatS":!1===i[0]&&(r=e.ClampToEdgeWrapping);break;case"repeatT":!1===i[0]&&(o=e.ClampToEdgeWrapping);break;default:console.warn("THREE.VRMLLoader: Unknown field:",l)}}n&&(n.wrapS=r,n.wrapT=o);return n}(t);break;case"TextureTransform":r=function(t){const n={center:new e.Vector2,rotation:new e.Vector2,scale:new e.Vector2,translation:new e.Vector2},r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"center":n.center.set(a[0],a[1]);break;case"rotation":n.rotation=a[0];break;case"scale":n.scale.set(a[0],a[1]);break;case"translation":n.translation.set(a[0],a[1]);break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return n}(t);break;case"IndexedFaceSet":r=function(t){let n,r,o,a,s,l,i,c,f=!0,d=!0,p=0,m=!0,g=!0;const k=t.fields;for(let e=0,t=k.length;e<t;e++){const t=k[e],h=t.name,b=t.values;switch(h){case"color":const e=b[0];null!==e&&(n=u(e));break;case"coord":const t=b[0];null!==t&&(r=u(t));break;case"normal":const x=b[0];null!==x&&(o=u(x));break;case"texCoord":const k=b[0];null!==k&&(a=u(k));break;case"ccw":f=b[0];break;case"colorIndex":s=b;break;case"colorPerVertex":m=b[0];break;case"convex":break;case"coordIndex":l=b;break;case"creaseAngle":p=b[0];break;case"normalIndex":i=b;break;case"normalPerVertex":g=b[0];break;case"solid":d=b[0];break;case"texCoordIndex":c=b;break;default:console.warn("THREE.VRMLLoader: Unknown field:",h)}}if(void 0===l)return console.warn("THREE.VRMLLoader: Missing coordIndex."),new e.BufferGeometry;const w=h(l,f);let L,E,y;if(n)if(!0===m)if(s&&s.length>0){L=S(w,h(s,f),n,3)}else L=U(w,new e.Float32BufferAttribute(n,3));else if(s&&s.length>0){L=A(w,b(x(n,s),l))}else{L=A(w,b(n,l))}if(o)if(!0===g)if(i&&i.length>0){E=S(w,h(i,f),o,3)}else E=U(w,new e.Float32BufferAttribute(o,3));else if(i&&i.length>0){E=A(w,b(x(o,i),l))}else{E=A(w,b(o,l))}else E=v(w,r,p);if(a)if(c&&c.length>0){y=S(w,h(c,f),a,2)}else y=U(w,new e.Float32BufferAttribute(a,2));const T=new e.BufferGeometry,R=U(w,new e.Float32BufferAttribute(r,3));T.setAttribute("position",R),T.setAttribute("normal",E),L&&T.setAttribute("color",L);y&&T.setAttribute("uv",y);return T._solid=d,T._type="mesh",T}(t);break;case"IndexedLineSet":r=function(t){let n,r,o,a,s=!0;const l=t.fields;for(let e=0,t=l.length;e<t;e++){const t=l[e],i=t.name,c=t.values;switch(i){case"color":const e=c[0];null!==e&&(n=u(e));break;case"coord":const t=c[0];null!==t&&(r=u(t));break;case"colorIndex":o=c;break;case"colorPerVertex":s=c[0];break;case"coordIndex":a=c;break;default:console.warn("THREE.VRMLLoader: Unknown field:",i)}}let i;const c=m(a);if(n)if(!0===s)if(o.length>0){i=S(c,m(o),n,3)}else i=U(c,new e.Float32BufferAttribute(n,3));else if(o.length>0){i=R(c,g(x(n,o),a))}else{i=R(c,g(n,a))}const f=new e.BufferGeometry,d=U(c,new e.Float32BufferAttribute(r,3));f.setAttribute("position",d),i&&f.setAttribute("color",i);return f._type="line",f}(t);break;case"PointSet":r=function(t){let n,r;const o=t.fields;for(let e=0,t=o.length;e<t;e++){const t=o[e],a=t.name,s=t.values;switch(a){case"color":const e=s[0];null!==e&&(n=u(e));break;case"coord":const t=s[0];null!==t&&(r=u(t));break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}const a=new e.BufferGeometry;a.setAttribute("position",new e.Float32BufferAttribute(r,3)),n&&a.setAttribute("color",new e.Float32BufferAttribute(n,3));return a._type="points",a}(t);break;case"Box":r=function(t){const n=new e.Vector3(2,2,2),r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"size":n.x=a[0],n.y=a[1],n.z=a[2];break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return new e.BoxGeometry(n.x,n.y,n.z)}(t);break;case"Cone":r=function(t){let n=1,r=2,o=!1;const a=t.fields;for(let e=0,t=a.length;e<t;e++){const t=a[e],s=t.name,l=t.values;switch(s){case"bottom":o=!l[0];break;case"bottomRadius":n=l[0];break;case"height":r=l[0];break;case"side":break;default:console.warn("THREE.VRMLLoader: Unknown field:",s)}}return new e.ConeGeometry(n,r,16,1,o)}(t);break;case"Cylinder":r=function(t){let n=1,r=2;const o=t.fields;for(let e=0,t=o.length;e<t;e++){const t=o[e],a=t.name,s=t.values;switch(a){case"bottom":break;case"radius":n=s[0];break;case"height":r=s[0];break;case"side":case"top":break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return new e.CylinderGeometry(n,n,r,16,1)}(t);break;case"Sphere":r=function(t){let n=1;const r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"radius":n=a[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return new e.SphereGeometry(n,16,16)}(t);break;case"ElevationGrid":r=function(t){let n,r,o,a,s=!0,l=!0,i=!0,c=!0,f=0,d=2,p=2,h=1,b=1;const x=t.fields;for(let e=0,t=x.length;e<t;e++){const t=x[e],m=t.name,g=t.values;switch(m){case"color":const e=g[0];null!==e&&(n=u(e));break;case"normal":const t=g[0];null!==t&&(r=u(t));break;case"texCoord":const x=g[0];null!==x&&(o=u(x));break;case"height":a=g;break;case"ccw":c=g[0];break;case"colorPerVertex":s=g[0];break;case"creaseAngle":f=g[0];break;case"normalPerVertex":l=g[0];break;case"solid":i=g[0];break;case"xDimension":d=g[0];break;case"xSpacing":h=g[0];break;case"zDimension":p=g[0];break;case"zSpacing":b=g[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",m)}}const m=[],g=[],k=[],w=[];for(let e=0;e<p;e++)for(let t=0;t<d;t++){const i=e*d+t,c=h*e,u=a[i],f=b*t;if(m.push(c,u,f),n&&!0===s){const e=n[3*i+0],t=n[3*i+1],r=n[3*i+2];k.push(e,t,r)}if(r&&!0===l){const e=r[3*i+0],t=r[3*i+1],n=r[3*i+2];g.push(e,t,n)}if(o){const e=o[2*i+0],t=o[2*i+1];w.push(e,t)}else w.push(e/(d-1),t/(p-1))}const L=[];for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const n=e+t*d,r=e+(t+1)*d,o=e+1+(t+1)*d,a=e+1+t*d;!0===c?(L.push(n,o,r),L.push(o,n,a)):(L.push(n,r,o),L.push(o,a,n))}const E=U(L,new e.Float32BufferAttribute(m,3)),y=U(L,new e.Float32BufferAttribute(w,2));let T,S;if(n)if(!1===s){for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const r=e+t*(d-1),o=n[3*r+0],a=n[3*r+1],s=n[3*r+2];k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s)}T=new e.Float32BufferAttribute(k,3)}else T=U(L,new e.Float32BufferAttribute(k,3));if(r)if(!1===l){for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const n=e+t*(d-1),o=r[3*n+0],a=r[3*n+1],s=r[3*n+2];g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s)}S=new e.Float32BufferAttribute(g,3)}else S=U(L,new e.Float32BufferAttribute(g,3));else S=v(L,m,f);const A=new e.BufferGeometry;A.setAttribute("position",E),A.setAttribute("normal",S),A.setAttribute("uv",y),T&&A.setAttribute("color",T);return A._solid=i,A._type="mesh",A}(t);break;case"Extrusion":r=function(t){let n,r,o=[1,1,1,-1,-1,-1,-1,1,1,1],a=[0,0,0,0,1,0],s=!0,l=!0,i=0,c=!0,u=!0;const f=t.fields;for(let e=0,t=f.length;e<t;e++){const t=f[e],d=t.name,p=t.values;switch(d){case"beginCap":s=p[0];break;case"ccw":l=p[0];break;case"convex":break;case"creaseAngle":i=p[0];break;case"crossSection":o=p;break;case"endCap":c=p[0];break;case"orientation":r=p;break;case"scale":n=p;break;case"solid":u=p[0];break;case"spine":a=p;break;default:console.warn("THREE.VRMLLoader: Unknown field:",d)}}const d=o[0]===o[o.length-2]&&o[1]===o[o.length-1],p=[],h=new e.Vector3,b=new e.Vector3,x=new e.Vector3,m=new e.Vector3,g=new e.Quaternion;for(let e=0,t=0,s=0,l=a.length;e<l;e+=3,t+=2,s+=4){h.fromArray(a,e),b.x=n?n[t+0]:1,b.y=1,b.z=n?n[t+1]:1,x.x=r?r[s+0]:0,x.y=r?r[s+1]:0,x.z=r?r[s+2]:1;const l=r?r[s+3]:0;for(let e=0,t=o.length;e<t;e+=2)m.x=o[e+0],m.y=0,m.z=o[e+1],m.multiply(b),g.setFromAxisAngle(x,l),m.applyQuaternion(g),m.add(h),p.push(m.x,m.y,m.z)}const k=[],w=a.length/3,L=o.length/2;for(let e=0;e<w-1;e++)for(let t=0;t<L-1;t++){const n=t+e*L;let r=t+1+e*L;const o=t+(e+1)*L;let a=t+1+(e+1)*L;t===L-2&&!0===d&&(r=e*L,a=(e+1)*L),!0===l?(k.push(n,r,o),k.push(o,r,a)):(k.push(n,o,r),k.push(o,a,r))}if(!0===s||!0===c){const t=[];for(let n=0,r=o.length;n<r;n+=2)t.push(new e.Vector2(o[n],o[n+1]));const n=e.ShapeUtils.triangulateShape(t,[]),r=[];for(let e=0,t=n.length;e<t;e++){const t=n[e];r.push(t[0],t[1],t[2])}if(!0===s)for(let e=0,t=r.length;e<t;e+=3)!0===l?k.push(r[e+0],r[e+1],r[e+2]):k.push(r[e+0],r[e+2],r[e+1]);if(!0===c){const e=L*(w-1);for(let t=0,n=r.length;t<n;t+=3)!0===l?k.push(e+r[t+0],e+r[t+2],e+r[t+1]):k.push(e+r[t+0],e+r[t+1],e+r[t+2])}}const E=U(k,new e.Float32BufferAttribute(p,3)),y=v(k,p,i),T=new e.BufferGeometry;return T.setAttribute("position",E),T.setAttribute("normal",y),T._solid=u,T._type="mesh",T}(t);break;case"Color":case"Coordinate":case"Normal":case"TextureCoordinate":r=function(e){return e.fields[0].values}(t);break;case"WorldInfo":r=function(e){const t={},n=e.fields;for(let e=0,r=n.length;e<r;e++){const r=n[e],o=r.name,a=r.values;switch(o){case"title":t.title=a[0];break;case"info":t.info=a;break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return t}(t);break;case"Anchor":case"Billboard":case"Inline":case"LOD":case"Switch":case"AudioClip":case"DirectionalLight":case"PointLight":case"Script":case"Sound":case"SpotLight":case"CylinderSensor":case"PlaneSensor":case"ProximitySensor":case"SphereSensor":case"TimeSensor":case"TouchSensor":case"VisibilitySensor":case"Text":case"FontStyle":case"MovieTexture":case"ColorInterpolator":case"CoordinateInterpolator":case"NormalInterpolator":case"OrientationInterpolator":case"PositionInterpolator":case"ScalarInterpolator":case"Fog":case"NavigationInfo":case"Viewpoint":break;default:console.warn("THREE.VRMLLoader: Unknown node:",n)}void 0!==r&&void 0!==t.DEF&&!0===r.hasOwnProperty("name")&&(r.name=t.DEF);return r}(t)),t.build)}function f(e,t,n){let r;switch(t){case s.INTENSITY:r=parseInt(e),n.r=r,n.g=r,n.b=r;break;case s.INTENSITY_ALPHA:r=parseInt("0x"+e.substring(2,4)),n.r=r,n.g=r,n.b=r,n.a=parseInt("0x"+e.substring(4,6));break;case s.RGB:n.r=parseInt("0x"+e.substring(2,4)),n.g=parseInt("0x"+e.substring(4,6)),n.b=parseInt("0x"+e.substring(6,8));break;case s.RGBA:n.r=parseInt("0x"+e.substring(2,4)),n.g=parseInt("0x"+e.substring(4,6)),n.b=parseInt("0x"+e.substring(6,8)),n.a=parseInt("0x"+e.substring(8,10))}}function d(e){let t;switch(e){case 1:t=s.INTENSITY;break;case 2:t=s.INTENSITY_ALPHA;break;case 3:t=s.RGB;break;case 4:t=s.RGBA}return t}function p(t,n){for(let r=0,o=t.length;r<o;r++){const o=u(t[r]);o instanceof e.Object3D&&n.add(o)}}function h(e,t){const n=[];let r=0;for(let o=0,a=e.length;o<a;o++){const s=e[r],l=e[o+(t?1:2)],i=e[o+(t?2:1)];n.push(s,l,i),(-1===e[o+3]||o+3>=a)&&(o+=3,r=o+1)}return n}function b(e,t){const n=[];let r=0;for(let o=0,a=t.length;o<a;o++){const s=3*r,l=e[s],i=e[s+1],c=e[s+2];n.push(l,i,c),(-1===t[o+3]||o+3>=a)&&(o+=3,r++)}return n}function x(e,t){const n=[];for(let r=0,o=t.length;r<o;r++){const o=3*t[r],a=e[o],s=e[o+1],l=e[o+2];n.push(a,s,l)}return n}function m(e){const t=[];for(let n=0,r=e.length;n<r;n++){const o=e[n],a=e[n+1];t.push(o,a),(-1===e[n+2]||n+2>=r)&&(n+=2)}return t}function g(e,t){const n=[];let r=0;for(let o=0,a=t.length;o<a;o++){const s=3*r,l=e[s],i=e[s+1],c=e[s+2];n.push(l,i,c),(-1===t[o+2]||o+2>=a)&&(o+=2,r++)}return n}const k=new e.Vector3,w=new e.Vector3,L=new e.Vector3,E=new e.Vector2,y=new e.Vector2,T=new e.Vector2;function S(t,n,r,o){const a=[];for(let e=0,s=t.length;e<s;e+=3){const t=n[e],s=n[e+1],l=n[e+2];2===o?(E.fromArray(r,t*o),y.fromArray(r,s*o),T.fromArray(r,l*o),a.push(E.x,E.y),a.push(y.x,y.y),a.push(T.x,T.y)):(k.fromArray(r,t*o),w.fromArray(r,s*o),L.fromArray(r,l*o),a.push(k.x,k.y,k.z),a.push(w.x,w.y,w.z),a.push(L.x,L.y,L.z))}return new e.Float32BufferAttribute(a,o)}function A(t,n){const r=[];for(let e=0,o=0,a=t.length;e<a;e+=3,o++)k.fromArray(n,3*o),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z);return new e.Float32BufferAttribute(r,3)}function R(t,n){const r=[];for(let e=0,o=0,a=t.length;e<a;e+=2,o++)k.fromArray(n,3*o),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z);return new e.Float32BufferAttribute(r,3)}function U(t,n){const r=n.array,o=n.itemSize,a=new r.constructor(t.length*o);let s=0,l=0;for(let e=0,n=t.length;e<n;e++){s=t[e]*o;for(let e=0;e<o;e++)a[l++]=r[s++]}return new e.Float32BufferAttribute(a,o)}const C=new e.Vector3,M=new e.Vector3;function v(t,n,r){const o=[],s={};for(let e=0,r=t.length;e<r;e+=3){const r=t[e],l=t[e+1],i=t[e+2],c=new a(r,l,i);k.fromArray(n,3*r),w.fromArray(n,3*l),L.fromArray(n,3*i),M.subVectors(L,w),C.subVectors(k,w),M.cross(C),M.normalize(),c.normal.copy(M),void 0===s[r]&&(s[r]=[]),void 0===s[l]&&(s[l]=[]),void 0===s[i]&&(s[i]=[]),s[r].push(c.normal),s[l].push(c.normal),s[i].push(c.normal),o.push(c)}const l=[];for(let e=0,t=o.length;e<t;e++){const t=o[e],a=V(s[t.a],t.normal,r),i=V(s[t.b],t.normal,r),c=V(s[t.c],t.normal,r);k.fromArray(n,3*t.a),w.fromArray(n,3*t.b),L.fromArray(n,3*t.c),l.push(a.x,a.y,a.z),l.push(i.x,i.y,i.z),l.push(c.x,c.y,c.z)}return new e.Float32BufferAttribute(l,3)}function V(t,n,r){const o=new e.Vector3;if(0===r)o.copy(n);else for(let e=0,a=t.length;e<a;e++)t[e].angleTo(n)<r&&o.add(t[e]);return o.normalize()}function I(t){const n=[];for(let r=0,o=t.length;r<o;r+=3)n.push(new e.Color(t[r],t[r+1],t[r+2]));return n}function N(t,n,r,o,a){const s=[],l=!0===a?0:Math.PI;for(let t=0,i=o.length;t<i;t++){let o=0===t?0:r[t-1];o=!0===a?o:l-o;const i=new e.Vector3;i.setFromSphericalCoords(n,o,0),s.push(i)}const i=t.index,c=t.attributes.position,u=new e.BufferAttribute(new Float32Array(3*t.attributes.position.count),3),f=new e.Vector3,d=new e.Color;for(let e=0;e<i.count;e++){const t=i.getX(e);let n,r;f.fromBufferAttribute(c,t);let l=1;for(let e=1;e<s.length;e++){n=e-1,r=e;const t=s[n],o=s[r];if(!0===a){if(f.y<=t.y&&f.y>o.y){l=Math.abs(t.y-f.y)/Math.abs(t.y-o.y);break}}else if(f.y>=t.y&&f.y<o.y){l=Math.abs(t.y-f.y)/Math.abs(t.y-o.y);break}}const p=o[n],h=o[r];d.copy(p).lerp(h,l),u.setXYZ(t,d.r,d.g,d.b)}t.setAttribute("color",u)}const B=new e.TextureLoader(this.manager);if(B.setPath(this.resourcePath||l).setCrossOrigin(this.crossOrigin),-1===n.indexOf("#VRML V2.0"))throw Error("THREE.VRMLLexer: Version of VRML asset not supported.");return function(t){const n=t.nodes,r=new e.Scene;for(let e=0,t=n.length;e<t;e++){c(n[e])}for(let t=0,o=n.length;t<o;t++){const o=n[t],a=u(o);a instanceof e.Object3D&&r.add(a),"WorldInfo"===o.name&&(r.userData.worldInfo=a)}return r}(function(e){const n=function(){const e=t.createToken({name:"RouteIdentifier",pattern:/[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/}),n=t.createToken({name:"Identifier",pattern:/[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/,longer_alt:e}),r=["Anchor","Billboard","Collision","Group","Transform","Inline","LOD","Switch","AudioClip","DirectionalLight","PointLight","Script","Shape","Sound","SpotLight","WorldInfo","CylinderSensor","PlaneSensor","ProximitySensor","SphereSensor","TimeSensor","TouchSensor","VisibilitySensor","Box","Cone","Cylinder","ElevationGrid","Extrusion","IndexedFaceSet","IndexedLineSet","PointSet","Sphere","Color","Coordinate","Normal","TextureCoordinate","Appearance","FontStyle","ImageTexture","Material","MovieTexture","PixelTexture","TextureTransform","ColorInterpolator","CoordinateInterpolator","NormalInterpolator","OrientationInterpolator","PositionInterpolator","ScalarInterpolator","Background","Fog","NavigationInfo","Viewpoint","Text"],o=t.createToken({name:"Version",pattern:/#VRML.*/,longer_alt:n}),a=t.createToken({name:"NodeName",pattern:new RegExp(r.join("|")),longer_alt:n}),s=t.createToken({name:"DEF",pattern:/DEF/,longer_alt:n}),l=t.createToken({name:"USE",pattern:/USE/,longer_alt:n}),i=t.createToken({name:"ROUTE",pattern:/ROUTE/,longer_alt:n}),c=t.createToken({name:"TO",pattern:/TO/,longer_alt:n}),u=t.createToken({name:"StringLiteral",pattern:/"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/}),f=t.createToken({name:"HexLiteral",pattern:/0[xX][0-9a-fA-F]+/}),d=t.createToken({name:"NumberLiteral",pattern:/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/}),p=t.createToken({name:"TrueLiteral",pattern:/TRUE/}),h=t.createToken({name:"FalseLiteral",pattern:/FALSE/}),b=t.createToken({name:"NullLiteral",pattern:/NULL/}),x=t.createToken({name:"LSquare",pattern:/\[/}),m=t.createToken({name:"RSquare",pattern:/]/}),g=t.createToken({name:"LCurly",pattern:/{/}),k=t.createToken({name:"RCurly",pattern:/}/}),w=t.createToken({name:"Comment",pattern:/#.*/,group:t.Lexer.SKIPPED}),L=[t.createToken({name:"WhiteSpace",pattern:/[ ,\s]/,group:t.Lexer.SKIPPED}),a,s,l,i,c,p,h,b,o,n,e,u,f,d,x,m,g,k,w],E={};for(let e=0,t=L.length;e<t;e++){const t=L[e];E[t.name]=t}return{tokens:L,tokenVocabulary:E}}(),a=new r(n.tokens),s=new o(n.tokenVocabulary),l=function(e){function t(){e.call(this),this.validateVisitor()}function n(e,t){const n={type:null,values:[]};if(t.node){n.type="node";for(let r=0,o=t.node.length;r<o;r++){const o=t.node[r];n.values.push(e.visit(o))}}if(t.use){n.type="use";for(let r=0,o=t.use.length;r<o;r++){const o=t.use[r];n.values.push(e.visit(o))}}if(t.StringLiteral){n.type="string";for(let e=0,r=t.StringLiteral.length;e<r;e++){const r=t.StringLiteral[e];n.values.push(r.image.replace(/'|"/g,""))}}if(t.NumberLiteral){n.type="number";for(let e=0,r=t.NumberLiteral.length;e<r;e++){const r=t.NumberLiteral[e];n.values.push(parseFloat(r.image))}}if(t.HexLiteral){n.type="hex";for(let e=0,r=t.HexLiteral.length;e<r;e++){const r=t.HexLiteral[e];n.values.push(r.image)}}if(t.TrueLiteral){n.type="boolean";for(let e=0,r=t.TrueLiteral.length;e<r;e++){"TRUE"===t.TrueLiteral[e].image&&n.values.push(!0)}}if(t.FalseLiteral){n.type="boolean";for(let e=0,r=t.FalseLiteral.length;e<r;e++){"FALSE"===t.FalseLiteral[e].image&&n.values.push(!1)}}return t.NullLiteral&&(n.type="null",t.NullLiteral.forEach((function(){n.values.push(null)}))),n}return t.prototype=Object.assign(Object.create(e.prototype),{constructor:t,vrml:function(e){const t={version:this.visit(e.version),nodes:[],routes:[]};for(let n=0,r=e.node.length;n<r;n++){const r=e.node[n];t.nodes.push(this.visit(r))}if(e.route)for(let n=0,r=e.route.length;n<r;n++){const r=e.route[n];t.routes.push(this.visit(r))}return t},version:function(e){return e.Version[0].image},node:function(e){const t={name:e.NodeName[0].image,fields:[]};if(e.field)for(let n=0,r=e.field.length;n<r;n++){const r=e.field[n];t.fields.push(this.visit(r))}return e.def&&(t.DEF=this.visit(e.def[0])),t},field:function(e){const t={name:e.Identifier[0].image,type:null,values:null};let n;return e.singleFieldValue&&(n=this.visit(e.singleFieldValue[0])),e.multiFieldValue&&(n=this.visit(e.multiFieldValue[0])),t.type=n.type,t.values=n.values,t},def:function(e){return(e.Identifier||e.NodeName)[0].image},use:function(e){return{USE:(e.Identifier||e.NodeName)[0].image}},singleFieldValue:function(e){return n(this,e)},multiFieldValue:function(e){return n(this,e)},route:function(e){return{FROM:e.RouteIdentifier[0].image,TO:e.RouteIdentifier[1].image}}}),new t}(s.getBaseCstVisitorConstructor()),i=a.lex(e);s.input=i.tokens;const c=s.vrml();if(s.errors.length>0)throw console.error(s.errors),Error("THREE.VRMLLoader: Parsing errors detected.");return l.visit(c)}(n))}}class r{constructor(e){this.lexer=new t.Lexer(e)}lex(e){const t=this.lexer.tokenize(e);if(t.errors.length>0)throw console.error(t.errors),Error("THREE.VRMLLexer: Lexing errors detected.");return t}}class o extends t.CstParser{constructor(e){super(e);const t=this,n=e.Version,r=e.LCurly,o=e.RCurly,a=e.LSquare,s=e.RSquare,l=e.Identifier,i=e.RouteIdentifier,c=e.StringLiteral,u=e.HexLiteral,f=e.NumberLiteral,d=e.TrueLiteral,p=e.FalseLiteral,h=e.NullLiteral,b=e.DEF,x=e.USE,m=e.ROUTE,g=e.TO,k=e.NodeName;t.RULE("vrml",(function(){t.SUBRULE(t.version),t.AT_LEAST_ONE((function(){t.SUBRULE(t.node)})),t.MANY((function(){t.SUBRULE(t.route)}))})),t.RULE("version",(function(){t.CONSUME(n)})),t.RULE("node",(function(){t.OPTION((function(){t.SUBRULE(t.def)})),t.CONSUME(k),t.CONSUME(r),t.MANY((function(){t.SUBRULE(t.field)})),t.CONSUME(o)})),t.RULE("field",(function(){t.CONSUME(l),t.OR2([{ALT:function(){t.SUBRULE(t.singleFieldValue)}},{ALT:function(){t.SUBRULE(t.multiFieldValue)}}])})),t.RULE("def",(function(){t.CONSUME(b),t.OR([{ALT:function(){t.CONSUME(l)}},{ALT:function(){t.CONSUME(k)}}])})),t.RULE("use",(function(){t.CONSUME(x),t.OR([{ALT:function(){t.CONSUME(l)}},{ALT:function(){t.CONSUME(k)}}])})),t.RULE("singleFieldValue",(function(){t.AT_LEAST_ONE((function(){t.OR([{ALT:function(){t.SUBRULE(t.node)}},{ALT:function(){t.SUBRULE(t.use)}},{ALT:function(){t.CONSUME(c)}},{ALT:function(){t.CONSUME(u)}},{ALT:function(){t.CONSUME(f)}},{ALT:function(){t.CONSUME(d)}},{ALT:function(){t.CONSUME(p)}},{ALT:function(){t.CONSUME(h)}}])}))})),t.RULE("multiFieldValue",(function(){t.CONSUME(a),t.MANY((function(){t.OR([{ALT:function(){t.SUBRULE(t.node)}},{ALT:function(){t.SUBRULE(t.use)}},{ALT:function(){t.CONSUME(c)}},{ALT:function(){t.CONSUME(u)}},{ALT:function(){t.CONSUME(f)}},{ALT:function(){t.CONSUME(h)}}])})),t.CONSUME(s)})),t.RULE("route",(function(){t.CONSUME(m),t.CONSUME(i),t.CONSUME(g),t.CONSUME2(i)})),this.performSelfAnalysis()}}class a{constructor(t,n,r){this.a=t,this.b=n,this.c=r,this.normal=new e.Vector3}}const s={INTENSITY:1,INTENSITY_ALPHA:2,RGB:3,RGBA:4};exports.VRMLLoader=n;
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),t=require("chevrotain");class n extends e.Loader{constructor(e){super(e)}load(t,n,r,o){const a=this,s=""===a.path?e.LoaderUtils.extractUrlBase(t):a.path,l=new e.FileLoader(a.manager);l.setPath(a.path),l.setRequestHeader(a.requestHeader),l.setWithCredentials(a.withCredentials),l.load(t,(function(e){try{n(a.parse(e,s))}catch(e){o?o(e):console.error(e),a.manager.itemError(t)}}),r,o)}parse(n,l){const i={};function c(e){e.DEF&&(i[e.DEF]=e);const t=e.fields;for(let e=0,n=t.length;e<n;e++){const n=t[e];if("node"===n.type){const e=n.values;for(let t=0,n=e.length;t<n;t++)c(e[t])}}}function u(t){return t.USE?function(e){const t=u(i[e]);return t.isObject3D||t.isMaterial?t.clone():t}(t.USE):(void 0!==t.build||(t.build=function(t){const n=t.name;let r;switch(n){case"Group":case"Transform":case"Collision":r=function(t){const n=new e.Group,r=t.fields;for(let t=0,o=r.length;t<o;t++){const o=r[t],a=o.name,s=o.values;switch(a){case"bboxCenter":case"bboxSize":case"center":break;case"children":p(s,n);break;case"collide":break;case"rotation":const t=new e.Vector3(s[0],s[1],s[2]),r=s[3];n.quaternion.setFromAxisAngle(t,r);break;case"scale":n.scale.set(s[0],s[1],s[2]);break;case"scaleOrientation":break;case"translation":n.position.set(s[0],s[1],s[2]);break;case"proxy":break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return n}(t);break;case"Background":r=function(t){const n=new e.Group;let r,o,a,s;const l=t.fields;for(let e=0,t=l.length;e<t;e++){const t=l[e],n=t.name,i=t.values;switch(n){case"groundAngle":r=i;break;case"groundColor":o=i;break;case"backUrl":case"bottomUrl":case"frontUrl":case"leftUrl":case"rightUrl":case"topUrl":break;case"skyAngle":a=i;break;case"skyColor":s=i;break;default:console.warn("THREE.VRMLLoader: Unknown field:",n)}}const i=1e4;if(s){const t=new e.SphereGeometry(i,32,16),r=new e.MeshBasicMaterial({fog:!1,side:e.BackSide,depthWrite:!1,depthTest:!1});s.length>3?(N(t,i,a,I(s),!0),r.vertexColors=!0):r.color.setRGB(s[0],s[1],s[2]);const o=new e.Mesh(t,r);n.add(o)}if(o&&o.length>0){const t=new e.SphereGeometry(i,32,16,0,2*Math.PI,.5*Math.PI,1.5*Math.PI),a=new e.MeshBasicMaterial({fog:!1,side:e.BackSide,vertexColors:!0,depthWrite:!1,depthTest:!1});N(t,i,r,I(o),!1);const s=new e.Mesh(t,a);n.add(s)}return n.renderOrder=-1/0,n}(t);break;case"Shape":r=function(t){const n=t.fields;let r,o,a=new e.MeshBasicMaterial({color:0});for(let e=0,t=n.length;e<t;e++){const t=n[e],o=t.name,s=t.values;switch(o){case"appearance":null!==s[0]&&(a=u(s[0]));break;case"geometry":null!==s[0]&&(r=u(s[0]));break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}if(r&&r.attributes.position){const t=r._type;if("points"===t){const t=new e.PointsMaterial({color:16777215});void 0!==r.attributes.color?t.vertexColors=!0:a.isMeshPhongMaterial&&t.color.copy(a.emissive),o=new e.Points(r,t)}else if("line"===t){const t=new e.LineBasicMaterial({color:16777215});void 0!==r.attributes.color?t.vertexColors=!0:a.isMeshPhongMaterial&&t.color.copy(a.emissive),o=new e.LineSegments(r,t)}else void 0!==r._solid&&(a.side=r._solid?e.FrontSide:e.DoubleSide),void 0!==r.attributes.color&&(a.vertexColors=!0),o=new e.Mesh(r,a)}else o=new e.Object3D,o.visible=!1;return o}(t);break;case"Appearance":r=function(t){let n,r=new e.MeshPhongMaterial;const o=t.fields;for(let t=0,a=o.length;t<a;t++){const a=o[t],s=a.name,l=a.values;switch(s){case"material":if(null!==l[0]){const e=u(l[0]);e.diffuseColor&&r.color.copy(e.diffuseColor),e.emissiveColor&&r.emissive.copy(e.emissiveColor),e.shininess&&(r.shininess=e.shininess),e.specularColor&&r.specular.copy(e.specularColor),e.transparency&&(r.opacity=1-e.transparency),e.transparency>0&&(r.transparent=!0)}else r=new e.MeshBasicMaterial({color:0});break;case"texture":const t=l[0];null!==t&&("ImageTexture"!==t.name&&"PixelTexture"!==t.name||(r.map=u(t)));break;case"textureTransform":null!==l[0]&&(n=u(l[0]));break;default:console.warn("THREE.VRMLLoader: Unknown field:",s)}}if(r.map){if(r.map.__type){switch(r.map.__type){case s.INTENSITY_ALPHA:r.opacity=1;break;case s.RGB:r.color.set(16777215);break;case s.RGBA:r.color.set(16777215),r.opacity=1}delete r.map.__type}n&&(r.map.center.copy(n.center),r.map.rotation=n.rotation,r.map.repeat.copy(n.scale),r.map.offset.copy(n.translation))}return r}(t);break;case"Material":r=function(t){const n={},r=t.fields;for(let t=0,o=r.length;t<o;t++){const o=r[t],a=o.name,s=o.values;switch(a){case"ambientIntensity":break;case"diffuseColor":n.diffuseColor=new e.Color(s[0],s[1],s[2]);break;case"emissiveColor":n.emissiveColor=new e.Color(s[0],s[1],s[2]);break;case"shininess":n.shininess=s[0];break;case"specularColor":n.emissiveColor=new e.Color(s[0],s[1],s[2]);break;case"transparency":n.transparency=s[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return n}(t);break;case"ImageTexture":r=function(t){let n,r=e.RepeatWrapping,o=e.RepeatWrapping;const a=t.fields;for(let t=0,s=a.length;t<s;t++){const s=a[t],l=s.name,i=s.values;switch(l){case"url":const t=i[0];t&&(n=B.load(t));break;case"repeatS":!1===i[0]&&(r=e.ClampToEdgeWrapping);break;case"repeatT":!1===i[0]&&(o=e.ClampToEdgeWrapping);break;default:console.warn("THREE.VRMLLoader: Unknown field:",l)}}n&&(n.wrapS=r,n.wrapT=o);return n}(t);break;case"PixelTexture":r=function(t){let n,r=e.RepeatWrapping,o=e.RepeatWrapping;const a=t.fields;for(let t=0,s=a.length;t<s;t++){const s=a[t],l=s.name,i=s.values;switch(l){case"image":const t=i[0],a=i[1],s=d(i[2]),c=new Uint8Array(4*t*a),u={r:0,g:0,b:0,a:0};for(let e=3,t=0,n=i.length;e<n;e++,t++){f(i[e],s,u);const n=4*t;c[n+0]=u.r,c[n+1]=u.g,c[n+2]=u.b,c[n+3]=u.a}n=new e.DataTexture(c,t,a),n.needsUpdate=!0,n.__type=s;break;case"repeatS":!1===i[0]&&(r=e.ClampToEdgeWrapping);break;case"repeatT":!1===i[0]&&(o=e.ClampToEdgeWrapping);break;default:console.warn("THREE.VRMLLoader: Unknown field:",l)}}n&&(n.wrapS=r,n.wrapT=o);return n}(t);break;case"TextureTransform":r=function(t){const n={center:new e.Vector2,rotation:new e.Vector2,scale:new e.Vector2,translation:new e.Vector2},r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"center":n.center.set(a[0],a[1]);break;case"rotation":n.rotation=a[0];break;case"scale":n.scale.set(a[0],a[1]);break;case"translation":n.translation.set(a[0],a[1]);break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return n}(t);break;case"IndexedFaceSet":r=function(t){let n,r,o,a,s,l,i,c,f=!0,d=!0,p=0,m=!0,g=!0;const k=t.fields;for(let e=0,t=k.length;e<t;e++){const t=k[e],h=t.name,b=t.values;switch(h){case"color":const e=b[0];null!==e&&(n=u(e));break;case"coord":const t=b[0];null!==t&&(r=u(t));break;case"normal":const x=b[0];null!==x&&(o=u(x));break;case"texCoord":const k=b[0];null!==k&&(a=u(k));break;case"ccw":f=b[0];break;case"colorIndex":s=b;break;case"colorPerVertex":m=b[0];break;case"convex":break;case"coordIndex":l=b;break;case"creaseAngle":p=b[0];break;case"normalIndex":i=b;break;case"normalPerVertex":g=b[0];break;case"solid":d=b[0];break;case"texCoordIndex":c=b;break;default:console.warn("THREE.VRMLLoader: Unknown field:",h)}}if(void 0===l)return console.warn("THREE.VRMLLoader: Missing coordIndex."),new e.BufferGeometry;const w=h(l,f);let L,E,y;if(n)if(!0===m)if(s&&s.length>0){L=S(w,h(s,f),n,3)}else L=U(w,new e.Float32BufferAttribute(n,3));else if(s&&s.length>0){L=A(w,b(x(n,s),l))}else{L=A(w,b(n,l))}if(o)if(!0===g)if(i&&i.length>0){E=S(w,h(i,f),o,3)}else E=U(w,new e.Float32BufferAttribute(o,3));else if(i&&i.length>0){E=A(w,b(x(o,i),l))}else{E=A(w,b(o,l))}else E=v(w,r,p);if(a)if(c&&c.length>0){y=S(w,h(c,f),a,2)}else y=U(w,new e.Float32BufferAttribute(a,2));const T=new e.BufferGeometry,R=U(w,new e.Float32BufferAttribute(r,3));T.setAttribute("position",R),T.setAttribute("normal",E),L&&T.setAttribute("color",L);y&&T.setAttribute("uv",y);return T._solid=d,T._type="mesh",T}(t);break;case"IndexedLineSet":r=function(t){let n,r,o,a,s=!0;const l=t.fields;for(let e=0,t=l.length;e<t;e++){const t=l[e],i=t.name,c=t.values;switch(i){case"color":const e=c[0];null!==e&&(n=u(e));break;case"coord":const t=c[0];null!==t&&(r=u(t));break;case"colorIndex":o=c;break;case"colorPerVertex":s=c[0];break;case"coordIndex":a=c;break;default:console.warn("THREE.VRMLLoader: Unknown field:",i)}}let i;const c=m(a);if(n)if(!0===s)if(o.length>0){i=S(c,m(o),n,3)}else i=U(c,new e.Float32BufferAttribute(n,3));else if(o.length>0){i=R(c,g(x(n,o),a))}else{i=R(c,g(n,a))}const f=new e.BufferGeometry,d=U(c,new e.Float32BufferAttribute(r,3));f.setAttribute("position",d),i&&f.setAttribute("color",i);return f._type="line",f}(t);break;case"PointSet":r=function(t){let n,r;const o=t.fields;for(let e=0,t=o.length;e<t;e++){const t=o[e],a=t.name,s=t.values;switch(a){case"color":const e=s[0];null!==e&&(n=u(e));break;case"coord":const t=s[0];null!==t&&(r=u(t));break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}const a=new e.BufferGeometry;a.setAttribute("position",new e.Float32BufferAttribute(r,3)),n&&a.setAttribute("color",new e.Float32BufferAttribute(n,3));return a._type="points",a}(t);break;case"Box":r=function(t){const n=new e.Vector3(2,2,2),r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"size":n.x=a[0],n.y=a[1],n.z=a[2];break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return new e.BoxGeometry(n.x,n.y,n.z)}(t);break;case"Cone":r=function(t){let n=1,r=2,o=!1;const a=t.fields;for(let e=0,t=a.length;e<t;e++){const t=a[e],s=t.name,l=t.values;switch(s){case"bottom":o=!l[0];break;case"bottomRadius":n=l[0];break;case"height":r=l[0];break;case"side":break;default:console.warn("THREE.VRMLLoader: Unknown field:",s)}}return new e.ConeGeometry(n,r,16,1,o)}(t);break;case"Cylinder":r=function(t){let n=1,r=2;const o=t.fields;for(let e=0,t=o.length;e<t;e++){const t=o[e],a=t.name,s=t.values;switch(a){case"bottom":break;case"radius":n=s[0];break;case"height":r=s[0];break;case"side":case"top":break;default:console.warn("THREE.VRMLLoader: Unknown field:",a)}}return new e.CylinderGeometry(n,n,r,16,1)}(t);break;case"Sphere":r=function(t){let n=1;const r=t.fields;for(let e=0,t=r.length;e<t;e++){const t=r[e],o=t.name,a=t.values;switch(o){case"radius":n=a[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return new e.SphereGeometry(n,16,16)}(t);break;case"ElevationGrid":r=function(t){let n,r,o,a,s=!0,l=!0,i=!0,c=!0,f=0,d=2,p=2,h=1,b=1;const x=t.fields;for(let e=0,t=x.length;e<t;e++){const t=x[e],m=t.name,g=t.values;switch(m){case"color":const e=g[0];null!==e&&(n=u(e));break;case"normal":const t=g[0];null!==t&&(r=u(t));break;case"texCoord":const x=g[0];null!==x&&(o=u(x));break;case"height":a=g;break;case"ccw":c=g[0];break;case"colorPerVertex":s=g[0];break;case"creaseAngle":f=g[0];break;case"normalPerVertex":l=g[0];break;case"solid":i=g[0];break;case"xDimension":d=g[0];break;case"xSpacing":h=g[0];break;case"zDimension":p=g[0];break;case"zSpacing":b=g[0];break;default:console.warn("THREE.VRMLLoader: Unknown field:",m)}}const m=[],g=[],k=[],w=[];for(let e=0;e<p;e++)for(let t=0;t<d;t++){const i=e*d+t,c=h*e,u=a[i],f=b*t;if(m.push(c,u,f),n&&!0===s){const e=n[3*i+0],t=n[3*i+1],r=n[3*i+2];k.push(e,t,r)}if(r&&!0===l){const e=r[3*i+0],t=r[3*i+1],n=r[3*i+2];g.push(e,t,n)}if(o){const e=o[2*i+0],t=o[2*i+1];w.push(e,t)}else w.push(e/(d-1),t/(p-1))}const L=[];for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const n=e+t*d,r=e+(t+1)*d,o=e+1+(t+1)*d,a=e+1+t*d;!0===c?(L.push(n,o,r),L.push(o,n,a)):(L.push(n,r,o),L.push(o,a,n))}const E=U(L,new e.Float32BufferAttribute(m,3)),y=U(L,new e.Float32BufferAttribute(w,2));let T,S;if(n)if(!1===s){for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const r=e+t*(d-1),o=n[3*r+0],a=n[3*r+1],s=n[3*r+2];k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s),k.push(o,a,s)}T=new e.Float32BufferAttribute(k,3)}else T=U(L,new e.Float32BufferAttribute(k,3));if(r)if(!1===l){for(let e=0;e<d-1;e++)for(let t=0;t<p-1;t++){const n=e+t*(d-1),o=r[3*n+0],a=r[3*n+1],s=r[3*n+2];g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s),g.push(o,a,s)}S=new e.Float32BufferAttribute(g,3)}else S=U(L,new e.Float32BufferAttribute(g,3));else S=v(L,m,f);const A=new e.BufferGeometry;A.setAttribute("position",E),A.setAttribute("normal",S),A.setAttribute("uv",y),T&&A.setAttribute("color",T);return A._solid=i,A._type="mesh",A}(t);break;case"Extrusion":r=function(t){let n,r,o=[1,1,1,-1,-1,-1,-1,1,1,1],a=[0,0,0,0,1,0],s=!0,l=!0,i=0,c=!0,u=!0;const f=t.fields;for(let e=0,t=f.length;e<t;e++){const t=f[e],d=t.name,p=t.values;switch(d){case"beginCap":s=p[0];break;case"ccw":l=p[0];break;case"convex":break;case"creaseAngle":i=p[0];break;case"crossSection":o=p;break;case"endCap":c=p[0];break;case"orientation":r=p;break;case"scale":n=p;break;case"solid":u=p[0];break;case"spine":a=p;break;default:console.warn("THREE.VRMLLoader: Unknown field:",d)}}const d=o[0]===o[o.length-2]&&o[1]===o[o.length-1],p=[],h=new e.Vector3,b=new e.Vector3,x=new e.Vector3,m=new e.Vector3,g=new e.Quaternion;for(let e=0,t=0,s=0,l=a.length;e<l;e+=3,t+=2,s+=4){h.fromArray(a,e),b.x=n?n[t+0]:1,b.y=1,b.z=n?n[t+1]:1,x.x=r?r[s+0]:0,x.y=r?r[s+1]:0,x.z=r?r[s+2]:1;const l=r?r[s+3]:0;for(let e=0,t=o.length;e<t;e+=2)m.x=o[e+0],m.y=0,m.z=o[e+1],m.multiply(b),g.setFromAxisAngle(x,l),m.applyQuaternion(g),m.add(h),p.push(m.x,m.y,m.z)}const k=[],w=a.length/3,L=o.length/2;for(let e=0;e<w-1;e++)for(let t=0;t<L-1;t++){const n=t+e*L;let r=t+1+e*L;const o=t+(e+1)*L;let a=t+1+(e+1)*L;t===L-2&&!0===d&&(r=e*L,a=(e+1)*L),!0===l?(k.push(n,r,o),k.push(o,r,a)):(k.push(n,o,r),k.push(o,a,r))}if(!0===s||!0===c){const t=[];for(let n=0,r=o.length;n<r;n+=2)t.push(new e.Vector2(o[n],o[n+1]));const n=e.ShapeUtils.triangulateShape(t,[]),r=[];for(let e=0,t=n.length;e<t;e++){const t=n[e];r.push(t[0],t[1],t[2])}if(!0===s)for(let e=0,t=r.length;e<t;e+=3)!0===l?k.push(r[e+0],r[e+1],r[e+2]):k.push(r[e+0],r[e+2],r[e+1]);if(!0===c){const e=L*(w-1);for(let t=0,n=r.length;t<n;t+=3)!0===l?k.push(e+r[t+0],e+r[t+2],e+r[t+1]):k.push(e+r[t+0],e+r[t+1],e+r[t+2])}}const E=U(k,new e.Float32BufferAttribute(p,3)),y=v(k,p,i),T=new e.BufferGeometry;return T.setAttribute("position",E),T.setAttribute("normal",y),T._solid=u,T._type="mesh",T}(t);break;case"Color":case"Coordinate":case"Normal":case"TextureCoordinate":r=function(e){return e.fields[0].values}(t);break;case"WorldInfo":r=function(e){const t={},n=e.fields;for(let e=0,r=n.length;e<r;e++){const r=n[e],o=r.name,a=r.values;switch(o){case"title":t.title=a[0];break;case"info":t.info=a;break;default:console.warn("THREE.VRMLLoader: Unknown field:",o)}}return t}(t);break;case"Anchor":case"Billboard":case"Inline":case"LOD":case"Switch":case"AudioClip":case"DirectionalLight":case"PointLight":case"Script":case"Sound":case"SpotLight":case"CylinderSensor":case"PlaneSensor":case"ProximitySensor":case"SphereSensor":case"TimeSensor":case"TouchSensor":case"VisibilitySensor":case"Text":case"FontStyle":case"MovieTexture":case"ColorInterpolator":case"CoordinateInterpolator":case"NormalInterpolator":case"OrientationInterpolator":case"PositionInterpolator":case"ScalarInterpolator":case"Fog":case"NavigationInfo":case"Viewpoint":break;default:console.warn("THREE.VRMLLoader: Unknown node:",n)}void 0!==r&&void 0!==t.DEF&&!0===r.hasOwnProperty("name")&&(r.name=t.DEF);return r}(t)),t.build)}function f(e,t,n){let r;switch(t){case s.INTENSITY:r=parseInt(e),n.r=r,n.g=r,n.b=r,n.a=1;break;case s.INTENSITY_ALPHA:r=parseInt("0x"+e.substring(2,4)),n.r=r,n.g=r,n.b=r,n.a=parseInt("0x"+e.substring(4,6));break;case s.RGB:n.r=parseInt("0x"+e.substring(2,4)),n.g=parseInt("0x"+e.substring(4,6)),n.b=parseInt("0x"+e.substring(6,8)),n.a=1;break;case s.RGBA:n.r=parseInt("0x"+e.substring(2,4)),n.g=parseInt("0x"+e.substring(4,6)),n.b=parseInt("0x"+e.substring(6,8)),n.a=parseInt("0x"+e.substring(8,10))}}function d(e){let t;switch(e){case 1:t=s.INTENSITY;break;case 2:t=s.INTENSITY_ALPHA;break;case 3:t=s.RGB;break;case 4:t=s.RGBA}return t}function p(t,n){for(let r=0,o=t.length;r<o;r++){const o=u(t[r]);o instanceof e.Object3D&&n.add(o)}}function h(e,t){const n=[];let r=0;for(let o=0,a=e.length;o<a;o++){const s=e[r],l=e[o+(t?1:2)],i=e[o+(t?2:1)];n.push(s,l,i),(-1===e[o+3]||o+3>=a)&&(o+=3,r=o+1)}return n}function b(e,t){const n=[];let r=0;for(let o=0,a=t.length;o<a;o++){const s=3*r,l=e[s],i=e[s+1],c=e[s+2];n.push(l,i,c),(-1===t[o+3]||o+3>=a)&&(o+=3,r++)}return n}function x(e,t){const n=[];for(let r=0,o=t.length;r<o;r++){const o=3*t[r],a=e[o],s=e[o+1],l=e[o+2];n.push(a,s,l)}return n}function m(e){const t=[];for(let n=0,r=e.length;n<r;n++){const o=e[n],a=e[n+1];t.push(o,a),(-1===e[n+2]||n+2>=r)&&(n+=2)}return t}function g(e,t){const n=[];let r=0;for(let o=0,a=t.length;o<a;o++){const s=3*r,l=e[s],i=e[s+1],c=e[s+2];n.push(l,i,c),(-1===t[o+2]||o+2>=a)&&(o+=2,r++)}return n}const k=new e.Vector3,w=new e.Vector3,L=new e.Vector3,E=new e.Vector2,y=new e.Vector2,T=new e.Vector2;function S(t,n,r,o){const a=[];for(let e=0,s=t.length;e<s;e+=3){const t=n[e],s=n[e+1],l=n[e+2];2===o?(E.fromArray(r,t*o),y.fromArray(r,s*o),T.fromArray(r,l*o),a.push(E.x,E.y),a.push(y.x,y.y),a.push(T.x,T.y)):(k.fromArray(r,t*o),w.fromArray(r,s*o),L.fromArray(r,l*o),a.push(k.x,k.y,k.z),a.push(w.x,w.y,w.z),a.push(L.x,L.y,L.z))}return new e.Float32BufferAttribute(a,o)}function A(t,n){const r=[];for(let e=0,o=0,a=t.length;e<a;e+=3,o++)k.fromArray(n,3*o),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z);return new e.Float32BufferAttribute(r,3)}function R(t,n){const r=[];for(let e=0,o=0,a=t.length;e<a;e+=2,o++)k.fromArray(n,3*o),r.push(k.x,k.y,k.z),r.push(k.x,k.y,k.z);return new e.Float32BufferAttribute(r,3)}function U(t,n){const r=n.array,o=n.itemSize,a=new r.constructor(t.length*o);let s=0,l=0;for(let e=0,n=t.length;e<n;e++){s=t[e]*o;for(let e=0;e<o;e++)a[l++]=r[s++]}return new e.Float32BufferAttribute(a,o)}const C=new e.Vector3,M=new e.Vector3;function v(t,n,r){const o=[],s={};for(let e=0,r=t.length;e<r;e+=3){const r=t[e],l=t[e+1],i=t[e+2],c=new a(r,l,i);k.fromArray(n,3*r),w.fromArray(n,3*l),L.fromArray(n,3*i),M.subVectors(L,w),C.subVectors(k,w),M.cross(C),M.normalize(),c.normal.copy(M),void 0===s[r]&&(s[r]=[]),void 0===s[l]&&(s[l]=[]),void 0===s[i]&&(s[i]=[]),s[r].push(c.normal),s[l].push(c.normal),s[i].push(c.normal),o.push(c)}const l=[];for(let e=0,t=o.length;e<t;e++){const t=o[e],a=V(s[t.a],t.normal,r),i=V(s[t.b],t.normal,r),c=V(s[t.c],t.normal,r);k.fromArray(n,3*t.a),w.fromArray(n,3*t.b),L.fromArray(n,3*t.c),l.push(a.x,a.y,a.z),l.push(i.x,i.y,i.z),l.push(c.x,c.y,c.z)}return new e.Float32BufferAttribute(l,3)}function V(t,n,r){const o=new e.Vector3;if(0===r)o.copy(n);else for(let e=0,a=t.length;e<a;e++)t[e].angleTo(n)<r&&o.add(t[e]);return o.normalize()}function I(t){const n=[];for(let r=0,o=t.length;r<o;r+=3)n.push(new e.Color(t[r],t[r+1],t[r+2]));return n}function N(t,n,r,o,a){const s=[],l=!0===a?0:Math.PI;for(let t=0,i=o.length;t<i;t++){let o=0===t?0:r[t-1];o=!0===a?o:l-o;const i=new e.Vector3;i.setFromSphericalCoords(n,o,0),s.push(i)}const i=t.index,c=t.attributes.position,u=new e.BufferAttribute(new Float32Array(3*t.attributes.position.count),3),f=new e.Vector3,d=new e.Color;for(let e=0;e<i.count;e++){const t=i.getX(e);let n,r;f.fromBufferAttribute(c,t);let l=1;for(let e=1;e<s.length;e++){n=e-1,r=e;const t=s[n],o=s[r];if(!0===a){if(f.y<=t.y&&f.y>o.y){l=Math.abs(t.y-f.y)/Math.abs(t.y-o.y);break}}else if(f.y>=t.y&&f.y<o.y){l=Math.abs(t.y-f.y)/Math.abs(t.y-o.y);break}}const p=o[n],h=o[r];d.copy(p).lerp(h,l),u.setXYZ(t,d.r,d.g,d.b)}t.setAttribute("color",u)}const B=new e.TextureLoader(this.manager);if(B.setPath(this.resourcePath||l).setCrossOrigin(this.crossOrigin),-1===n.indexOf("#VRML V2.0"))throw Error("THREE.VRMLLexer: Version of VRML asset not supported.");return function(t){const n=t.nodes,r=new e.Scene;for(let e=0,t=n.length;e<t;e++){c(n[e])}for(let t=0,o=n.length;t<o;t++){const o=n[t],a=u(o);a instanceof e.Object3D&&r.add(a),"WorldInfo"===o.name&&(r.userData.worldInfo=a)}return r}(function(e){const n=function(){const e=t.createToken({name:"RouteIdentifier",pattern:/[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/}),n=t.createToken({name:"Identifier",pattern:/[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/,longer_alt:e}),r=["Anchor","Billboard","Collision","Group","Transform","Inline","LOD","Switch","AudioClip","DirectionalLight","PointLight","Script","Shape","Sound","SpotLight","WorldInfo","CylinderSensor","PlaneSensor","ProximitySensor","SphereSensor","TimeSensor","TouchSensor","VisibilitySensor","Box","Cone","Cylinder","ElevationGrid","Extrusion","IndexedFaceSet","IndexedLineSet","PointSet","Sphere","Color","Coordinate","Normal","TextureCoordinate","Appearance","FontStyle","ImageTexture","Material","MovieTexture","PixelTexture","TextureTransform","ColorInterpolator","CoordinateInterpolator","NormalInterpolator","OrientationInterpolator","PositionInterpolator","ScalarInterpolator","Background","Fog","NavigationInfo","Viewpoint","Text"],o=t.createToken({name:"Version",pattern:/#VRML.*/,longer_alt:n}),a=t.createToken({name:"NodeName",pattern:new RegExp(r.join("|")),longer_alt:n}),s=t.createToken({name:"DEF",pattern:/DEF/,longer_alt:n}),l=t.createToken({name:"USE",pattern:/USE/,longer_alt:n}),i=t.createToken({name:"ROUTE",pattern:/ROUTE/,longer_alt:n}),c=t.createToken({name:"TO",pattern:/TO/,longer_alt:n}),u=t.createToken({name:"StringLiteral",pattern:/"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/}),f=t.createToken({name:"HexLiteral",pattern:/0[xX][0-9a-fA-F]+/}),d=t.createToken({name:"NumberLiteral",pattern:/[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/}),p=t.createToken({name:"TrueLiteral",pattern:/TRUE/}),h=t.createToken({name:"FalseLiteral",pattern:/FALSE/}),b=t.createToken({name:"NullLiteral",pattern:/NULL/}),x=t.createToken({name:"LSquare",pattern:/\[/}),m=t.createToken({name:"RSquare",pattern:/]/}),g=t.createToken({name:"LCurly",pattern:/{/}),k=t.createToken({name:"RCurly",pattern:/}/}),w=t.createToken({name:"Comment",pattern:/#.*/,group:t.Lexer.SKIPPED}),L=[t.createToken({name:"WhiteSpace",pattern:/[ ,\s]/,group:t.Lexer.SKIPPED}),a,s,l,i,c,p,h,b,o,n,e,u,f,d,x,m,g,k,w],E={};for(let e=0,t=L.length;e<t;e++){const t=L[e];E[t.name]=t}return{tokens:L,tokenVocabulary:E}}(),a=new r(n.tokens),s=new o(n.tokenVocabulary),l=function(e){function t(){e.call(this),this.validateVisitor()}function n(e,t){const n={type:null,values:[]};if(t.node){n.type="node";for(let r=0,o=t.node.length;r<o;r++){const o=t.node[r];n.values.push(e.visit(o))}}if(t.use){n.type="use";for(let r=0,o=t.use.length;r<o;r++){const o=t.use[r];n.values.push(e.visit(o))}}if(t.StringLiteral){n.type="string";for(let e=0,r=t.StringLiteral.length;e<r;e++){const r=t.StringLiteral[e];n.values.push(r.image.replace(/'|"/g,""))}}if(t.NumberLiteral){n.type="number";for(let e=0,r=t.NumberLiteral.length;e<r;e++){const r=t.NumberLiteral[e];n.values.push(parseFloat(r.image))}}if(t.HexLiteral){n.type="hex";for(let e=0,r=t.HexLiteral.length;e<r;e++){const r=t.HexLiteral[e];n.values.push(r.image)}}if(t.TrueLiteral){n.type="boolean";for(let e=0,r=t.TrueLiteral.length;e<r;e++){"TRUE"===t.TrueLiteral[e].image&&n.values.push(!0)}}if(t.FalseLiteral){n.type="boolean";for(let e=0,r=t.FalseLiteral.length;e<r;e++){"FALSE"===t.FalseLiteral[e].image&&n.values.push(!1)}}return t.NullLiteral&&(n.type="null",t.NullLiteral.forEach((function(){n.values.push(null)}))),n}return t.prototype=Object.assign(Object.create(e.prototype),{constructor:t,vrml:function(e){const t={version:this.visit(e.version),nodes:[],routes:[]};for(let n=0,r=e.node.length;n<r;n++){const r=e.node[n];t.nodes.push(this.visit(r))}if(e.route)for(let n=0,r=e.route.length;n<r;n++){const r=e.route[n];t.routes.push(this.visit(r))}return t},version:function(e){return e.Version[0].image},node:function(e){const t={name:e.NodeName[0].image,fields:[]};if(e.field)for(let n=0,r=e.field.length;n<r;n++){const r=e.field[n];t.fields.push(this.visit(r))}return e.def&&(t.DEF=this.visit(e.def[0])),t},field:function(e){const t={name:e.Identifier[0].image,type:null,values:null};let n;return e.singleFieldValue&&(n=this.visit(e.singleFieldValue[0])),e.multiFieldValue&&(n=this.visit(e.multiFieldValue[0])),t.type=n.type,t.values=n.values,t},def:function(e){return(e.Identifier||e.NodeName)[0].image},use:function(e){return{USE:(e.Identifier||e.NodeName)[0].image}},singleFieldValue:function(e){return n(this,e)},multiFieldValue:function(e){return n(this,e)},route:function(e){return{FROM:e.RouteIdentifier[0].image,TO:e.RouteIdentifier[1].image}}}),new t}(s.getBaseCstVisitorConstructor()),i=a.lex(e);s.input=i.tokens;const c=s.vrml();if(s.errors.length>0)throw console.error(s.errors),Error("THREE.VRMLLoader: Parsing errors detected.");return l.visit(c)}(n))}}class r{constructor(e){this.lexer=new t.Lexer(e)}lex(e){const t=this.lexer.tokenize(e);if(t.errors.length>0)throw console.error(t.errors),Error("THREE.VRMLLexer: Lexing errors detected.");return t}}class o extends t.CstParser{constructor(e){super(e);const t=this,n=e.Version,r=e.LCurly,o=e.RCurly,a=e.LSquare,s=e.RSquare,l=e.Identifier,i=e.RouteIdentifier,c=e.StringLiteral,u=e.HexLiteral,f=e.NumberLiteral,d=e.TrueLiteral,p=e.FalseLiteral,h=e.NullLiteral,b=e.DEF,x=e.USE,m=e.ROUTE,g=e.TO,k=e.NodeName;t.RULE("vrml",(function(){t.SUBRULE(t.version),t.AT_LEAST_ONE((function(){t.SUBRULE(t.node)})),t.MANY((function(){t.SUBRULE(t.route)}))})),t.RULE("version",(function(){t.CONSUME(n)})),t.RULE("node",(function(){t.OPTION((function(){t.SUBRULE(t.def)})),t.CONSUME(k),t.CONSUME(r),t.MANY((function(){t.SUBRULE(t.field)})),t.CONSUME(o)})),t.RULE("field",(function(){t.CONSUME(l),t.OR2([{ALT:function(){t.SUBRULE(t.singleFieldValue)}},{ALT:function(){t.SUBRULE(t.multiFieldValue)}}])})),t.RULE("def",(function(){t.CONSUME(b),t.OR([{ALT:function(){t.CONSUME(l)}},{ALT:function(){t.CONSUME(k)}}])})),t.RULE("use",(function(){t.CONSUME(x),t.OR([{ALT:function(){t.CONSUME(l)}},{ALT:function(){t.CONSUME(k)}}])})),t.RULE("singleFieldValue",(function(){t.AT_LEAST_ONE((function(){t.OR([{ALT:function(){t.SUBRULE(t.node)}},{ALT:function(){t.SUBRULE(t.use)}},{ALT:function(){t.CONSUME(c)}},{ALT:function(){t.CONSUME(u)}},{ALT:function(){t.CONSUME(f)}},{ALT:function(){t.CONSUME(d)}},{ALT:function(){t.CONSUME(p)}},{ALT:function(){t.CONSUME(h)}}])}))})),t.RULE("multiFieldValue",(function(){t.CONSUME(a),t.MANY((function(){t.OR([{ALT:function(){t.SUBRULE(t.node)}},{ALT:function(){t.SUBRULE(t.use)}},{ALT:function(){t.CONSUME(c)}},{ALT:function(){t.CONSUME(u)}},{ALT:function(){t.CONSUME(f)}},{ALT:function(){t.CONSUME(h)}}])})),t.CONSUME(s)})),t.RULE("route",(function(){t.CONSUME(m),t.CONSUME(i),t.CONSUME(g),t.CONSUME2(i)})),this.performSelfAnalysis()}}class a{constructor(t,n,r){this.a=t,this.b=n,this.c=r,this.normal=new e.Vector3}}const s={INTENSITY:1,INTENSITY_ALPHA:2,RGB:3,RGBA:4};exports.VRMLLoader=n;
|
package/loaders/VRMLLoader.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Loader, LoaderUtils, FileLoader, Vector3, Vector2, TextureLoader, Scene, Object3D, Group, SphereGeometry, MeshBasicMaterial, BackSide, Mesh, PointsMaterial, Points, LineBasicMaterial, LineSegments, FrontSide, DoubleSide, MeshPhongMaterial, Color, DataTexture,
|
1
|
+
import { Loader, LoaderUtils, FileLoader, Vector3, Vector2, TextureLoader, Scene, Object3D, Group, SphereGeometry, MeshBasicMaterial, BackSide, Mesh, PointsMaterial, Points, LineBasicMaterial, LineSegments, FrontSide, DoubleSide, MeshPhongMaterial, Color, DataTexture, BufferGeometry, Float32BufferAttribute, BoxGeometry, ConeGeometry, CylinderGeometry, Quaternion, ShapeUtils, BufferAttribute, RepeatWrapping, ClampToEdgeWrapping } from 'three';
|
2
2
|
import { createToken, Lexer, CstParser } from 'chevrotain';
|
3
3
|
|
4
4
|
class VRMLLoader extends Loader {
|
@@ -943,6 +943,7 @@ class VRMLLoader extends Loader {
|
|
943
943
|
color.r = value;
|
944
944
|
color.g = value;
|
945
945
|
color.b = value;
|
946
|
+
color.a = 1;
|
946
947
|
break;
|
947
948
|
|
948
949
|
case TEXTURE_TYPE.INTENSITY_ALPHA:
|
@@ -959,6 +960,7 @@ class VRMLLoader extends Loader {
|
|
959
960
|
color.r = parseInt('0x' + hex.substring(2, 4));
|
960
961
|
color.g = parseInt('0x' + hex.substring(4, 6));
|
961
962
|
color.b = parseInt('0x' + hex.substring(6, 8));
|
963
|
+
color.a = 1;
|
962
964
|
break;
|
963
965
|
|
964
966
|
case TEXTURE_TYPE.RGBA:
|
@@ -1011,10 +1013,8 @@ class VRMLLoader extends Loader {
|
|
1011
1013
|
const width = fieldValues[0];
|
1012
1014
|
const height = fieldValues[1];
|
1013
1015
|
const num_components = fieldValues[2];
|
1014
|
-
const useAlpha = num_components === 2 || num_components === 4;
|
1015
1016
|
const textureType = getTextureType(num_components);
|
1016
|
-
const
|
1017
|
-
const data = new Uint8Array(size);
|
1017
|
+
const data = new Uint8Array(4 * width * height);
|
1018
1018
|
const color = {
|
1019
1019
|
r: 0,
|
1020
1020
|
g: 0,
|
@@ -1024,22 +1024,14 @@ class VRMLLoader extends Loader {
|
|
1024
1024
|
|
1025
1025
|
for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) {
|
1026
1026
|
parseHexColor(fieldValues[j], textureType, color);
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
data[stride + 2] = color.b;
|
1033
|
-
data[stride + 3] = color.a;
|
1034
|
-
} else {
|
1035
|
-
const stride = k * 3;
|
1036
|
-
data[stride + 0] = color.r;
|
1037
|
-
data[stride + 1] = color.g;
|
1038
|
-
data[stride + 2] = color.b;
|
1039
|
-
}
|
1027
|
+
const stride = k * 4;
|
1028
|
+
data[stride + 0] = color.r;
|
1029
|
+
data[stride + 1] = color.g;
|
1030
|
+
data[stride + 2] = color.b;
|
1031
|
+
data[stride + 3] = color.a;
|
1040
1032
|
}
|
1041
1033
|
|
1042
|
-
texture = new DataTexture(data, width, height
|
1034
|
+
texture = new DataTexture(data, width, height);
|
1043
1035
|
texture.needsUpdate = true;
|
1044
1036
|
texture.__type = textureType; // needed for material modifications
|
1045
1037
|
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),t=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s=(e=1)=>{const n=new Float32Array(4096*e*3),r=new t.DataTexture(n,1024,4*e,t.
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),t=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=n(e);const s=(e=1)=>{const n=new Float32Array(4096*e*3),r=new t.DataTexture(n,1024,4*e,t.RGBAFormat,t.FloatType);return r.wrapS=t.RepeatWrapping,r.wrapT=t.RepeatWrapping,r.magFilter=t.NearestFilter,r.needsUpdate=!0,r},i=(e,t,n=0)=>{const r=Math.floor(1024);t.arcLengthDivisions=r/2,t.updateArcLengths();const s=t.getSpacedPoints(r),i=t.computeFrenetFrames(r,!0);for(let t=0;t<r;t++){const r=Math.floor(t/1024),o=t%1024;let f=s[t];a(e,o,f.x,f.y,f.z,0+r+4*n),f=i.tangents[t],a(e,o,f.x,f.y,f.z,1+r+4*n),f=i.normals[t],a(e,o,f.x,f.y,f.z,2+r+4*n),f=i.binormals[t],a(e,o,f.x,f.y,f.z,3+r+4*n)}e.needsUpdate=!0},a=(e,t,n,r,s,i)=>{const a=e.image,{data:o}=a,f=3072*i;o[3*t+f+0]=n,o[3*t+f+1]=r,o[3*t+f+2]=s,o[3*t+f+3]=1};function o(e){return{spineTexture:{value:e},pathOffset:{type:"f",value:0},pathSegment:{type:"f",value:1},spineOffset:{type:"f",value:161},spineLength:{type:"f",value:400},flow:{type:"i",value:1}}}function f(e,t,n=1){e.__ok||(e.__ok=!0,e.onBeforeCompile=e=>{if(e.__modified)return;e.__modified=!0,Object.assign(e.uniforms,t);const r=`\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${4*n}.;\n\t\tfloat textureStacks = 1.;\n\n\t\t${e.vertexShader}\n\t\t`.replace("#include <beginnormal_vertex>","").replace("#include <defaultnormal_vertex>","").replace("#include <begin_vertex>","").replace(/void\s*main\s*\(\)\s*\{/,"\n void main() {\n #include <beginnormal_vertex>\n\n vec4 worldPos = modelMatrix * vec4(position, 1.);\n\n bool bend = flow > 0;\n float xWeight = bend ? 0. : 1.;\n\n #ifdef USE_INSTANCING\n float pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\n float spineLengthFromInstanceMatrix = instanceMatrix[3][0];\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\n float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n #else\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\n float mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n #endif\n\n mt = mod(mt, textureStacks);\n float rowOffset = floor(mt);\n\n #ifdef USE_INSTANCING\n rowOffset += instanceMatrix[3][1] * 4.;\n #endif\n\n vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\n mat3 basis = mat3(a, b, c);\n\n vec3 transformed = basis\n * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n + spinePos;\n\n vec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t").replace("#include <project_vertex>","vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;");e.vertexShader=r})}class l{constructor(e,n=1){r.default(this,"curveArray",void 0),r.default(this,"curveLengthArray",void 0),r.default(this,"object3D",void 0),r.default(this,"splineTexure",void 0),r.default(this,"uniforms",void 0);const i=e.clone(),a=s(n),l=o(a);i.traverse((e=>{(e instanceof t.Mesh||e instanceof t.InstancedMesh)&&(e.material=e.material.clone(),f(e.material,l,n))})),this.curveArray=new Array(n),this.curveLengthArray=new Array(n),this.object3D=i,this.splineTexure=a,this.uniforms=l}updateCurve(e,t){if(e>=this.curveArray.length)throw Error("Index out of range for Flow");const n=t.getLength();this.uniforms.spineLength.value=n,this.curveLengthArray[e]=n,this.curveArray[e]=t,i(this.splineTexure,t,e)}moveAlongCurve(e){this.uniforms.pathOffset.value+=e}}const u=new t.Matrix4;exports.Flow=l,exports.InstancedFlow=class extends l{constructor(e,n,s,i){const a=new t.InstancedMesh(s,i,e);a.instanceMatrix.setUsage(t.DynamicDrawUsage),super(a,n),r.default(this,"offsets",void 0),r.default(this,"whichCurve",void 0),this.offsets=new Array(e).fill(0),this.whichCurve=new Array(e).fill(0)}writeChanges(e){u.makeTranslation(this.curveLengthArray[this.whichCurve[e]],this.whichCurve[e],this.offsets[e]),this.object3D.setMatrixAt(e,u),this.object3D.instanceMatrix.needsUpdate=!0}moveIndividualAlongCurve(e,t){this.offsets[e]+=t,this.writeChanges(e)}setCurve(e,t){if(isNaN(t))throw Error("curve index being set is Not a Number (NaN)");this.whichCurve[e]=t,this.writeChanges(e)}},exports.getUniforms=o,exports.initSplineTexture=s,exports.modifyShader=f,exports.updateSplineTexture=i;
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
|
2
|
-
import { DataTexture,
|
2
|
+
import { DataTexture, RGBAFormat, FloatType, RepeatWrapping, NearestFilter, Mesh, InstancedMesh, Matrix4, DynamicDrawUsage } from 'three';
|
3
3
|
|
4
4
|
// Original src: https://github.com/zz85/threejs-path-flow
|
5
|
-
const
|
5
|
+
const CHANNELS = 3;
|
6
6
|
const TEXTURE_WIDTH = 1024;
|
7
7
|
const TEXTURE_HEIGHT = 4;
|
8
8
|
|
@@ -12,8 +12,8 @@ const TEXTURE_HEIGHT = 4;
|
|
12
12
|
* @param { number } numberOfCurves the number of curves needed to be described by this texture.
|
13
13
|
*/
|
14
14
|
const initSplineTexture = (numberOfCurves = 1) => {
|
15
|
-
const dataArray = new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves *
|
16
|
-
const dataTexture = new DataTexture(dataArray, TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves,
|
15
|
+
const dataArray = new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS);
|
16
|
+
const dataTexture = new DataTexture(dataArray, TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, RGBAFormat, FloatType);
|
17
17
|
dataTexture.wrapS = RepeatWrapping;
|
18
18
|
dataTexture.wrapT = RepeatWrapping;
|
19
19
|
dataTexture.magFilter = NearestFilter;
|
@@ -56,11 +56,12 @@ const setTextureValue = (texture, index, x, y, z, o) => {
|
|
56
56
|
const {
|
57
57
|
data
|
58
58
|
} = image;
|
59
|
-
const i =
|
59
|
+
const i = CHANNELS * TEXTURE_WIDTH * o; // Row Offset
|
60
60
|
|
61
|
-
data[index *
|
62
|
-
data[index *
|
63
|
-
data[index *
|
61
|
+
data[index * CHANNELS + i + 0] = x;
|
62
|
+
data[index * CHANNELS + i + 1] = y;
|
63
|
+
data[index * CHANNELS + i + 2] = z;
|
64
|
+
data[index * CHANNELS + i + 3] = 1;
|
64
65
|
};
|
65
66
|
|
66
67
|
/**
|
package/objects/Lensflare.cjs.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three");class e extends t.Mesh{constructor(){super(e.Geometry,new t.MeshBasicMaterial({opacity:0,transparent:!0})),this.type="Lensflare",this.frustumCulled=!1,this.renderOrder=1/0;const i=new t.Vector3,r=new t.Vector3,o=new t.
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three");class e extends t.Mesh{constructor(){super(e.Geometry,new t.MeshBasicMaterial({opacity:0,transparent:!0})),this.type="Lensflare",this.frustumCulled=!1,this.renderOrder=1/0;const i=new t.Vector3,r=new t.Vector3,o=new t.FramebufferTexture(16,16,t.RGBAFormat),s=new t.FramebufferTexture(16,16,t.RGBAFormat),a=e.Geometry,l=new t.RawShaderMaterial({uniforms:{scale:{value:null},screenPosition:{value:null}},vertexShader:"\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}",fragmentShader:"\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}",depthTest:!0,depthWrite:!1,transparent:!1}),c=new t.RawShaderMaterial({uniforms:{map:{value:o},scale:{value:null},screenPosition:{value:null}},vertexShader:"\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}",fragmentShader:"\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}",depthTest:!1,depthWrite:!1,transparent:!1}),u=new t.Mesh(a,l),v=[],p=n.Shader,f=new t.RawShaderMaterial({uniforms:{map:{value:null},occlusionMap:{value:s},color:{value:new t.Color(16777215)},scale:{value:new t.Vector2},screenPosition:{value:new t.Vector3}},vertexShader:p.vertexShader,fragmentShader:p.fragmentShader,blending:t.AdditiveBlending,transparent:!0,depthWrite:!1}),d=new t.Mesh(a,f);this.addElement=function(t){v.push(t)};const m=new t.Vector2,x=new t.Vector2,y=new t.Box2,h=new t.Vector4;this.onBeforeRender=function(t,e,n){t.getCurrentViewport(h);const p=h.w/h.z,b=h.z/2,g=h.w/2;let w=16/h.w;if(m.set(w*p,w),y.min.set(h.x,h.y),y.max.set(h.x+(h.z-16),h.y+(h.w-16)),r.setFromMatrixPosition(this.matrixWorld),r.applyMatrix4(n.matrixWorldInverse),!(r.z>0)&&(i.copy(r).applyMatrix4(n.projectionMatrix),x.x=h.x+i.x*b+b-8,x.y=h.y+i.y*g+g-8,y.containsPoint(x))){t.copyFramebufferToTexture(x,o);let e=l.uniforms;e.scale.value=m,e.screenPosition.value=i,t.renderBufferDirect(n,null,a,l,u,null),t.copyFramebufferToTexture(x,s),e=c.uniforms,e.scale.value=m,e.screenPosition.value=i,t.renderBufferDirect(n,null,a,c,u,null);const r=2*-i.x,p=2*-i.y;for(let e=0,o=v.length;e<o;e++){const o=v[e],s=f.uniforms;s.color.value.copy(o.color),s.map.value=o.texture,s.screenPosition.value.x=i.x+r*o.distance,s.screenPosition.value.y=i.y+p*o.distance,w=o.size/h.w;const l=h.w/h.z;s.scale.value.set(w*l,w),f.uniformsNeedUpdate=!0,t.renderBufferDirect(n,null,a,f,d,null)}}},this.dispose=function(){l.dispose(),c.dispose(),f.dispose(),o.dispose(),s.dispose();for(let t=0,e=v.length;t<e;t++)v[t].texture.dispose()}}}e.prototype.isLensflare=!0;class n{constructor(e,n=1,i=0,r=new t.Color(16777215)){this.texture=e,this.size=n,this.distance=i,this.color=r}}n.Shader={uniforms:{map:{value:null},occlusionMap:{value:null},color:{value:null},scale:{value:null},screenPosition:{value:null}},vertexShader:"\n\n\t\tprecision highp float;\n\n\t\tuniform vec3 screenPosition;\n\t\tuniform vec2 scale;\n\n\t\tuniform sampler2D occlusionMap;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvUV = uv;\n\n\t\t\tvec2 pos = position.xy;\n\n\t\t\tvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n\t\t\tvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n\t\t\tvVisibility = visibility.r / 9.0;\n\t\t\tvVisibility *= 1.0 - visibility.g / 9.0;\n\t\t\tvVisibility *= visibility.b / 9.0;\n\n\t\t\tgl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tprecision highp float;\n\n\t\tuniform sampler2D map;\n\t\tuniform vec3 color;\n\n\t\tvarying vec2 vUV;\n\t\tvarying float vVisibility;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texture = texture2D( map, vUV );\n\t\t\ttexture.a *= vVisibility;\n\t\t\tgl_FragColor = texture;\n\t\t\tgl_FragColor.rgb *= color;\n\n\t\t}"},e.Geometry=function(){const e=new t.BufferGeometry,n=new Float32Array([-1,-1,0,0,0,1,-1,0,1,0,1,1,0,1,1,-1,1,0,0,1]),i=new t.InterleavedBuffer(n,5);return e.setIndex([0,1,2,0,2,3]),e.setAttribute("position",new t.InterleavedBufferAttribute(i,3,0,!1)),e.setAttribute("uv",new t.InterleavedBufferAttribute(i,2,3,!1)),e}(),exports.Lensflare=e,exports.LensflareElement=n;
|
package/objects/Lensflare.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Mesh, MeshBasicMaterial, Vector3,
|
1
|
+
import { Mesh, MeshBasicMaterial, Vector3, FramebufferTexture, RGBAFormat, RawShaderMaterial, Color, Vector2, AdditiveBlending, Box2, Vector4, BufferGeometry, InterleavedBuffer, InterleavedBufferAttribute } from 'three';
|
2
2
|
|
3
3
|
class Lensflare extends Mesh {
|
4
4
|
constructor() {
|
@@ -13,16 +13,8 @@ class Lensflare extends Mesh {
|
|
13
13
|
const positionScreen = new Vector3();
|
14
14
|
const positionView = new Vector3(); // textures
|
15
15
|
|
16
|
-
const tempMap = new
|
17
|
-
|
18
|
-
tempMap.magFilter = NearestFilter;
|
19
|
-
tempMap.wrapS = ClampToEdgeWrapping;
|
20
|
-
tempMap.wrapT = ClampToEdgeWrapping;
|
21
|
-
const occlusionMap = new DataTexture(new Uint8Array(16 * 16 * 3), 16, 16, RGBFormat);
|
22
|
-
occlusionMap.minFilter = NearestFilter;
|
23
|
-
occlusionMap.magFilter = NearestFilter;
|
24
|
-
occlusionMap.wrapS = ClampToEdgeWrapping;
|
25
|
-
occlusionMap.wrapT = ClampToEdgeWrapping; // material
|
16
|
+
const tempMap = new FramebufferTexture(16, 16, RGBAFormat);
|
17
|
+
const occlusionMap = new FramebufferTexture(16, 16, RGBAFormat); // material
|
26
18
|
|
27
19
|
const geometry = Lensflare.Geometry;
|
28
20
|
const material1a = new RawShaderMaterial({
|
package/objects/Reflector.cjs.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Mesh{constructor(r,n={}){super(r),this.type="Reflector";const a=this,o=void 0!==n.color?new e.Color(n.color):new e.Color(8355711),
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");class t extends e.Mesh{constructor(r,n={}){super(r),this.type="Reflector";const a=this,o=void 0!==n.color?new e.Color(n.color):new e.Color(8355711),l=n.textureWidth||512,i=n.textureHeight||512,s=n.clipBias||0,d=n.shader||t.ReflectorShader,c=new e.Plane,u=new e.Vector3,p=new e.Vector3,m=new e.Vector3,x=new e.Matrix4,v=new e.Vector3(0,0,-1),f=new e.Vector4,b=new e.Vector3,g=new e.Vector3,h=new e.Vector4,M=new e.Matrix4,y=new e.PerspectiveCamera,w=new e.WebGLRenderTarget(l,i),R=new e.ShaderMaterial({uniforms:e.UniformsUtils.clone(d.uniforms),fragmentShader:d.fragmentShader,vertexShader:d.vertexShader});R.uniforms.tDiffuse.value=w.texture,R.uniforms.color.value=o,R.uniforms.textureMatrix.value=M,this.material=R,this.onBeforeRender=function(e,t,r){if(p.setFromMatrixPosition(a.matrixWorld),m.setFromMatrixPosition(r.matrixWorld),x.extractRotation(a.matrixWorld),u.set(0,0,1),u.applyMatrix4(x),b.subVectors(p,m),b.dot(u)>0)return;b.reflect(u).negate(),b.add(p),x.extractRotation(r.matrixWorld),v.set(0,0,-1),v.applyMatrix4(x),v.add(m),g.subVectors(p,v),g.reflect(u).negate(),g.add(p),y.position.copy(b),y.up.set(0,1,0),y.up.applyMatrix4(x),y.up.reflect(u),y.lookAt(g),y.far=r.far,y.updateMatrixWorld(),y.projectionMatrix.copy(r.projectionMatrix),M.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),M.multiply(y.projectionMatrix),M.multiply(y.matrixWorldInverse),M.multiply(a.matrixWorld),c.setFromNormalAndCoplanarPoint(u,p),c.applyMatrix4(y.matrixWorldInverse),f.set(c.normal.x,c.normal.y,c.normal.z,c.constant);const n=y.projectionMatrix;h.x=(Math.sign(f.x)+n.elements[8])/n.elements[0],h.y=(Math.sign(f.y)+n.elements[9])/n.elements[5],h.z=-1,h.w=(1+n.elements[10])/n.elements[14],f.multiplyScalar(2/f.dot(h)),n.elements[2]=f.x,n.elements[6]=f.y,n.elements[10]=f.z+1-s,n.elements[14]=f.w,w.texture.encoding=e.outputEncoding,a.visible=!1;const o=e.getRenderTarget(),l=e.xr.enabled,i=e.shadowMap.autoUpdate;e.xr.enabled=!1,e.shadowMap.autoUpdate=!1,e.setRenderTarget(w),e.state.buffers.depth.setMask(!0),!1===e.autoClear&&e.clear(),e.render(t,y),e.xr.enabled=l,e.shadowMap.autoUpdate=i,e.setRenderTarget(o);const d=r.viewport;void 0!==d&&e.state.viewport(d),a.visible=!0},this.getRenderTarget=function(){return w},this.dispose=function(){w.dispose(),a.material.dispose()}}}t.prototype.isReflector=!0,t.ReflectorShader={uniforms:{color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null}},vertexShader:"\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\t#include <common>\n\t\t#include <logdepthbuf_pars_vertex>\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t#include <logdepthbuf_vertex>\n\n\t\t}",fragmentShader:"\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec4 vUv;\n\n\t\t#include <logdepthbuf_pars_fragment>\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t}"},exports.Reflector=t;
|