21144 lines
1.2 MiB
21144 lines
1.2 MiB
/*! @name videojs-errors @version 6.0.0 @license Apache-2.0 */ ! function(e, o) {
|
|
"object" == typeof exports && "undefined" != typeof module ? module.exports = o(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], o) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojsErrors = o(e.videojs)
|
|
}(this, (function(e) {
|
|
"use strict";
|
|
|
|
function o(e) {
|
|
return e && "object" == typeof e && "default" in e ? e : {
|
|
default: e
|
|
}
|
|
}
|
|
var t = o(e),
|
|
i = "6.0.0";
|
|
const n = t.default.getComponent("Flash"),
|
|
r = !t.default.browser.IS_IPHONE,
|
|
s = t.default.registerPlugin || t.default.plugin,
|
|
d = {
|
|
header: "",
|
|
code: "",
|
|
message: "",
|
|
timeout: 45e3,
|
|
backgroundTimeout: 3e5,
|
|
dismiss: r,
|
|
errors: {
|
|
1: {
|
|
type: "MEDIA_ERR_ABORTED",
|
|
headline: "The video download was cancelled"
|
|
},
|
|
2: {
|
|
type: "MEDIA_ERR_NETWORK",
|
|
headline: "The video connection was lost, please confirm you are connected to the internet"
|
|
},
|
|
3: {
|
|
type: "MEDIA_ERR_DECODE",
|
|
headline: "The video is bad or in a format that cannot be played on your browser"
|
|
},
|
|
4: {
|
|
type: "MEDIA_ERR_SRC_NOT_SUPPORTED",
|
|
headline: "This video is either unavailable or not supported in this browser"
|
|
},
|
|
5: {
|
|
type: "MEDIA_ERR_ENCRYPTED",
|
|
headline: "The video you are trying to watch is encrypted and we do not know how to decrypt it"
|
|
},
|
|
unknown: {
|
|
type: "MEDIA_ERR_UNKNOWN",
|
|
headline: "An unanticipated problem was encountered, check back soon and try again"
|
|
},
|
|
"-1": {
|
|
type: "PLAYER_ERR_NO_SRC",
|
|
headline: "No video has been loaded"
|
|
},
|
|
"-2": {
|
|
type: "PLAYER_ERR_TIMEOUT",
|
|
headline: "It looks like you're having playback issues. Reloading the video may help."
|
|
},
|
|
PLAYER_ERR_DOMAIN_RESTRICTED: {
|
|
headline: "This video is restricted from playing on your current domain"
|
|
},
|
|
PLAYER_ERR_IP_RESTRICTED: {
|
|
headline: "This video is restricted at your current IP address"
|
|
},
|
|
PLAYER_ERR_GEO_RESTRICTED: {
|
|
headline: "This video is restricted from playing in your current geographic region"
|
|
},
|
|
FLASHLS_ERR_CROSS_DOMAIN: {
|
|
headline: "The video could not be loaded: crossdomain access denied."
|
|
}
|
|
}
|
|
},
|
|
a = function(e, o) {
|
|
let r, s, l;
|
|
const c = [],
|
|
u = function(e) {
|
|
o.errors = t.default.mergeOptions(o.errors, e), Object.keys(o.errors).forEach((e => {
|
|
const t = o.errors[e];
|
|
t.type || (t.type = e)
|
|
}))
|
|
};
|
|
u();
|
|
const f = function() {
|
|
e.error() && -2 === e.error().code && e.error(null), e.clearTimeout(s), e.clearTimeout(r), l && (l = !1, e.removeClass("vjs-waiting"));
|
|
const t = [1 / 0, -1],
|
|
i = (e, o) => -1 !== e.indexOf(o);
|
|
"hidden" === document.visibilityState && (e.muted() || i(t, o.backgroundTimeout)) || "visible" === document.visibilityState && i(t, o.timeout) || (s = e.setTimeout((function() {
|
|
e.error() || e.paused() || e.ended() || (l = !0, e.addClass("vjs-waiting"))
|
|
}), 1e3), r = e.setTimeout((function() {
|
|
e.error() || e.paused() || e.ended() || e.error({
|
|
code: -2,
|
|
type: "PLAYER_ERR_TIMEOUT"
|
|
})
|
|
}), "hidden" === document.visibilityState ? o.backgroundTimeout : o.timeout))
|
|
},
|
|
h = function() {
|
|
let o;
|
|
for (; c.length;) o = c.shift(), e.off(o[0], o[1]);
|
|
e.clearTimeout(r), e.clearTimeout(s)
|
|
},
|
|
p = function() {
|
|
let o = 0;
|
|
h(), f(),
|
|
function(o, t) {
|
|
const i = function() {
|
|
if (!e.error()) {
|
|
const o = e.$(".vjs-tech");
|
|
if (o && "application/x-shockwave-flash" === o.type && !o.vjs_getProperty) return void e.error({
|
|
code: -2,
|
|
type: "PLAYER_ERR_TIMEOUT"
|
|
});
|
|
if (e.paused()) return f();
|
|
if (e.ended()) return f()
|
|
}
|
|
t.call(this)
|
|
};
|
|
e.on(o, i), c.push([o, i])
|
|
}(["timeupdate", "adtimeupdate"], (function() {
|
|
const t = e.currentTime();
|
|
t !== o && (o = t, f())
|
|
})), e.off(document, "visibilitychange", p), e.on(document, "visibilitychange", p)
|
|
},
|
|
m = function() {
|
|
e.currentSrc() || e.error({
|
|
code: -1,
|
|
type: "PLAYER_ERR_NO_SRC"
|
|
})
|
|
},
|
|
v = function() {
|
|
let i = "",
|
|
r = e.error();
|
|
const s = document.createElement("div");
|
|
let d = "";
|
|
if (!r) return;
|
|
if (e.off(document, "visibilitychange", p), r = t.default.mergeOptions(r, o.errors[r.code || r.type || 0]), r.message && (i = `<div class="vjs-errors-details">${e.localize("Technical details")}\n : <div class="vjs-errors-message">${e.localize(r.message)}</div>\n </div>`), 4 === r.code && n && !n.isSupported()) {
|
|
i += `<span class="vjs-errors-flashmessage">${e.localize("If you are using an older browser please try upgrading or installing Flash.")}</span>`
|
|
}
|
|
const a = e.getChild("errorDisplay");
|
|
s.className = "vjs-errors-dialog";
|
|
const l = `<div class="vjs-errors-code"><b>${this.localize("Error Code")}:</b> ${r.type||r.code}</div>`,
|
|
c = -2 === r.code;
|
|
d = `<div class="vjs-errors-content-container">\n <h2 class="vjs-errors-headline">${this.localize(r.headline)}</h2>\n ${c?"":l}\n ${c?"":i}\n </div>`;
|
|
const u = a.closeable(!("dismiss" in r) || r.dismiss);
|
|
if (c) {
|
|
d += `<div class="vjs-errors-timeout-button-container">\n <button>${this.localize("Reload Video")}</button>\n <button>${this.localize("Dismiss")}</button>\n </div>`, s.innerHTML = d, a.fillWith(s), a.getChild("closeButton").hide();
|
|
const o = a.el().querySelector(".vjs-errors-timeout-button-container > button:first-child"),
|
|
t = a.el().querySelector(".vjs-errors-timeout-button-container > button:last-child");
|
|
e.on(o, "click", (function() {
|
|
const o = e.currentSource();
|
|
e.reset(), e.src(o)
|
|
})), e.on(t, "click", (function() {
|
|
a.close()
|
|
})), a.one("modalclose", (() => {
|
|
e.off(o), e.off(t)
|
|
}))
|
|
} else if (u) {
|
|
d += `<div class="vjs-errors-ok-button-container">\n <button class="vjs-errors-ok-button">${this.localize("OK")}</button>\n </div>`, s.innerHTML = d, a.fillWith(s), a.contentEl().firstChild.appendChild(a.getChild("closeButton").el());
|
|
const o = a.el().querySelector(".vjs-errors-ok-button");
|
|
e.on(o, "click", (function() {
|
|
a.close()
|
|
}))
|
|
} else s.innerHTML = d, a.fillWith(s);
|
|
(e.currentWidth() <= 600 || e.currentHeight() <= 250) && a.addClass("vjs-xs"), a.one("modalclose", (() => e.error(null)))
|
|
},
|
|
y = function() {
|
|
h(), e.removeClass("vjs-errors"), e.off("play", p), e.off(document, "visibilitychange", p), e.off("play", m), e.off("dispose", y), e.off(["aderror", "error"], v)
|
|
},
|
|
R = function(o) {
|
|
y(), a(e, t.default.mergeOptions(d, o))
|
|
};
|
|
R.extend = e => u(e), R.getAll = () => t.default.mergeOptions(o.errors), R.timeout = function(t) {
|
|
if (void 0 === t) return o.timeout;
|
|
t !== o.timeout && (o.timeout = t, e.paused() || p())
|
|
}, R.backgroundTimeout = function(t) {
|
|
if (void 0 === t) return o.backgroundTimeout;
|
|
t !== o.backgroundTimeout && (o.backgroundTimeout = t, e.paused() || p())
|
|
}, R.disableProgress = () => {}, e.on("play", p), e.on("play", m), e.on("dispose", y), e.on(["aderror", "contenterror", "error"], v), e.ready((() => {
|
|
e.addClass("vjs-errors")
|
|
})), e.paused() || p(), R.VERSION = i, e.errors = R
|
|
},
|
|
l = function(e) {
|
|
a(this, t.default.mergeOptions(d, e))
|
|
};
|
|
return ["extend", "getAll"].forEach((e => {
|
|
l[e] = function() {
|
|
t.default.log.warn(`The errors.${e}() method is not available until the plugin has been initialized!`)
|
|
}
|
|
})), l.VERSION = i, s("errors", l), l
|
|
}));
|
|
/* videojs-hotkeys v0.2.28 - https://github.com/ctd1500/videojs-hotkeys */
|
|
! function(e, t) {
|
|
if ("undefined" != typeof window && window.videojs) t(window.videojs);
|
|
else if ("function" == typeof define && define.amd) define("videojs-hotkeys", ["video.js"], function(e) {
|
|
return t(e.default || e)
|
|
});
|
|
else if ("undefined" != typeof module && module.exports) {
|
|
var n = require("video.js");
|
|
module.exports = t(n.default || n)
|
|
}
|
|
}(0, function(x) {
|
|
"use strict";
|
|
"undefined" != typeof window && (window.videojs_hotkeys = {
|
|
version: "0.2.28"
|
|
});
|
|
(x.registerPlugin || x.plugin)("hotkeys", function(m) {
|
|
var f = this,
|
|
y = f.el(),
|
|
v = document,
|
|
e = {
|
|
volumeStep: .1,
|
|
seekStep: 5,
|
|
enableMute: !0,
|
|
enableVolumeScroll: !0,
|
|
enableHoverScroll: !1,
|
|
enableFullscreen: !0,
|
|
enableNumbers: !0,
|
|
enableJogStyle: !1,
|
|
alwaysCaptureHotkeys: !1,
|
|
captureDocumentHotkeys: !1,
|
|
documentHotkeysFocusElementFilter: function() {
|
|
return !1
|
|
},
|
|
enableModifiersForNumbers: !0,
|
|
enableInactiveFocus: !0,
|
|
skipInitialFocus: !1,
|
|
playPauseKey: function(e) {
|
|
return 32 === e.which || 179 === e.which
|
|
},
|
|
rewindKey: function(e) {
|
|
return 37 === e.which || 177 === e.which
|
|
},
|
|
forwardKey: function(e) {
|
|
return 39 === e.which || 176 === e.which
|
|
},
|
|
volumeUpKey: function(e) {
|
|
return 38 === e.which
|
|
},
|
|
volumeDownKey: function(e) {
|
|
return 40 === e.which
|
|
},
|
|
muteKey: function(e) {
|
|
return 77 === e.which
|
|
},
|
|
fullscreenKey: function(e) {
|
|
return 70 === e.which
|
|
},
|
|
customKeys: {}
|
|
},
|
|
t = x.mergeOptions || x.util.mergeOptions,
|
|
d = (m = t(e, m || {})).volumeStep,
|
|
n = m.seekStep,
|
|
p = m.enableMute,
|
|
o = m.enableVolumeScroll,
|
|
r = m.enableHoverScroll,
|
|
b = m.enableFullscreen,
|
|
h = m.enableNumbers,
|
|
w = m.enableJogStyle,
|
|
k = m.alwaysCaptureHotkeys,
|
|
S = m.captureDocumentHotkeys,
|
|
K = m.documentHotkeysFocusElementFilter,
|
|
F = m.enableModifiersForNumbers,
|
|
u = m.enableInactiveFocus,
|
|
l = m.skipInitialFocus,
|
|
i = x.VERSION;
|
|
y.hasAttribute("tabIndex") || y.setAttribute("tabIndex", "-1"), y.style.outline = "none", !k && f.autoplay() || l || f.one("play", function() {
|
|
y.focus()
|
|
}), u && f.on("userinactive", function() {
|
|
var n = function() {
|
|
clearTimeout(e)
|
|
},
|
|
e = setTimeout(function() {
|
|
f.off("useractive", n);
|
|
var e = v.activeElement,
|
|
t = y.querySelector(".vjs-control-bar");
|
|
e && e.parentElement == t && y.focus()
|
|
}, 10);
|
|
f.one("useractive", n)
|
|
}), f.on("play", function() {
|
|
var e = y.querySelector(".iframeblocker");
|
|
e && "" === e.style.display && (e.style.display = "block", e.style.bottom = "39px")
|
|
});
|
|
var c = function(e) {
|
|
var t, n, o = e.which,
|
|
r = e.preventDefault.bind(e),
|
|
u = f.duration();
|
|
if (f.controls()) {
|
|
var l = v.activeElement;
|
|
if (k || S && K(l) || l == y || l == y.querySelector(".vjs-tech") || l == y.querySelector(".vjs-control-bar") || l == y.querySelector(".iframeblocker")) switch (j(e, f)) {
|
|
case 1:
|
|
r(), (k || S) && e.stopPropagation(), f.paused() ? E(f.play()) : f.pause();
|
|
break;
|
|
case 2:
|
|
t = !f.paused(), r(), t && f.pause(), (n = f.currentTime() - T(e)) <= 0 && (n = 0), f.currentTime(n), t && E(f.play());
|
|
break;
|
|
case 3:
|
|
t = !f.paused(), r(), t && f.pause(), u <= (n = f.currentTime() + T(e)) && (n = t ? u - .001 : u), f.currentTime(n), t && E(f.play());
|
|
break;
|
|
case 5:
|
|
r(), w ? (n = f.currentTime() - 1, f.currentTime() <= 1 && (n = 0), f.currentTime(n)) : f.volume(f.volume() - d);
|
|
break;
|
|
case 4:
|
|
r(), w ? (u <= (n = f.currentTime() + 1) && (n = u), f.currentTime(n)) : f.volume(f.volume() + d);
|
|
break;
|
|
case 6:
|
|
p && f.muted(!f.muted());
|
|
break;
|
|
case 7:
|
|
b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen());
|
|
break;
|
|
default:
|
|
if ((47 < o && o < 59 || 95 < o && o < 106) && (F || !(e.metaKey || e.ctrlKey || e.altKey)) && h) {
|
|
var i = 48;
|
|
95 < o && (i = 96);
|
|
var c = o - i;
|
|
r(), f.currentTime(f.duration() * c * .1)
|
|
}
|
|
for (var a in m.customKeys) {
|
|
var s = m.customKeys[a];
|
|
s && s.key && s.handler && s.key(e) && (r(), s.handler(f, m, e))
|
|
}
|
|
}
|
|
}
|
|
},
|
|
a = !1,
|
|
s = y.querySelector(".vjs-volume-menu-button") || y.querySelector(".vjs-volume-panel");
|
|
null != s && (s.onmouseover = function() {
|
|
a = !0
|
|
}, s.onmouseout = function() {
|
|
a = !1
|
|
});
|
|
var q = function(e) {
|
|
if (r) var t = 0;
|
|
else t = v.activeElement;
|
|
if (f.controls() && (k || t == y || t == y.querySelector(".vjs-tech") || t == y.querySelector(".iframeblocker") || t == y.querySelector(".vjs-control-bar") || a) && o) {
|
|
e = window.event || e;
|
|
var n = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));
|
|
e.preventDefault(), 1 == n ? f.volume(f.volume() + d) : -1 == n && f.volume(f.volume() - d)
|
|
}
|
|
},
|
|
j = function(e, t) {
|
|
return m.playPauseKey(e, t) ? 1 : m.rewindKey(e, t) ? 2 : m.forwardKey(e, t) ? 3 : m.volumeUpKey(e, t) ? 4 : m.volumeDownKey(e, t) ? 5 : m.muteKey(e, t) ? 6 : m.fullscreenKey(e, t) ? 7 : void 0
|
|
};
|
|
|
|
function T(e) {
|
|
return "function" == typeof n ? n(e) : n
|
|
}
|
|
|
|
function E(e) {
|
|
null != e && "function" == typeof e.then && e.then(null, function(e) {})
|
|
}
|
|
if (S) {
|
|
var g = function(e) {
|
|
c(e)
|
|
};
|
|
document.addEventListener("keydown", g), this.dispose = function() {
|
|
document.removeEventListener("keydown", g)
|
|
}
|
|
} else f.on("keydown", c);
|
|
return f.on("dblclick", function(e) {
|
|
if (null != i && i <= "7.1.0" && f.controls()) {
|
|
var t = e.relatedTarget || e.toElement || v.activeElement;
|
|
t != y && t != y.querySelector(".vjs-tech") && t != y.querySelector(".iframeblocker") || b && (f.isFullscreen() ? f.exitFullscreen() : f.requestFullscreen())
|
|
}
|
|
}), f.on("mousewheel", q), f.on("DOMMouseScroll", q), this
|
|
})
|
|
});
|
|
/*! @name videojs-contrib-ads @version 6.9.0 @license Apache-2.0 */
|
|
! function(e, t) {
|
|
"object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("video.js"), require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["video.js", "global/window", "global/document"], t) : (e = e || self).videojsContribAds = t(e.videojs, e.window, e.document)
|
|
}(this, function(e, t, n) {
|
|
"use strict";
|
|
e = e && e.hasOwnProperty("default") ? e.default : e, t = t && t.hasOwnProperty("default") ? t.default : t, n = n && n.hasOwnProperty("default") ? n.default : n;
|
|
var a = "6.9.0";
|
|
var o = function(e, t) {
|
|
t.isImmediatePropagationStopped = function() {
|
|
return !0
|
|
}, t.cancelBubble = !0, t.isPropagationStopped = function() {
|
|
return !0
|
|
}
|
|
},
|
|
r = function(e, t, n) {
|
|
o(0, n), e.trigger({
|
|
type: t + n.type,
|
|
originalEvent: n
|
|
})
|
|
},
|
|
i = function(e, t) {
|
|
e.ads.isInAdMode() && (e.ads.isContentResuming() ? e.ads._contentEnding && r(e, "content", t) : r(e, "ad", t))
|
|
},
|
|
s = function(e, t) {
|
|
e.ads.isInAdMode() ? e.ads.isContentResuming() ? (o(0, t), e.trigger("resumeended")) : r(e, "ad", t) : e.ads._contentHasEnded || e.ads.stitchedAds() || (r(e, "content", t), e.trigger("readyforpostroll"))
|
|
},
|
|
d = function(e, t) {
|
|
if (!("loadstart" === t.type && !e.ads._hasThereBeenALoadStartDuringPlayerLife || "loadeddata" === t.type && !e.ads._hasThereBeenALoadedData || "loadedmetadata" === t.type && !e.ads._hasThereBeenALoadedMetaData))
|
|
if (e.ads.inAdBreak()) r(e, "ad", t);
|
|
else {
|
|
if (e.currentSrc() !== e.ads.contentSrc) return;
|
|
r(e, "content", t)
|
|
}
|
|
},
|
|
l = function(e, t) {
|
|
e.ads.inAdBreak() ? r(e, "ad", t) : e.ads.isContentResuming() && r(e, "content", t)
|
|
};
|
|
|
|
function u(e) {
|
|
"playing" === e.type ? i(this, e) : "ended" === e.type ? s(this, e) : "loadstart" === e.type || "loadeddata" === e.type || "loadedmetadata" === e.type ? d(this, e) : "play" === e.type ? l(this, e) : this.ads.isInAdMode() && (this.ads.isContentResuming() ? r(this, "content", e) : r(this, "ad", e))
|
|
}
|
|
var c = {},
|
|
f = function() {
|
|
! function(n) {
|
|
if (e.dom.isInFrame() && "function" != typeof t.__tcfapi) {
|
|
for (var a, o = t, r = {}; o;) {
|
|
try {
|
|
if (o.frames.__tcfapiLocator) {
|
|
a = o;
|
|
break
|
|
}
|
|
} catch (e) {}
|
|
if (o === t.top) break;
|
|
o = o.parent
|
|
}
|
|
if (!a) return;
|
|
t.__tcfapi = function(e, t, n, o) {
|
|
var i = Math.random() + "",
|
|
s = {
|
|
__tcfapiCall: {
|
|
command: e,
|
|
parameter: o,
|
|
version: t,
|
|
callId: i
|
|
}
|
|
};
|
|
r[i] = n, a.postMessage(s, "*")
|
|
}, t.addEventListener("message", function(e) {
|
|
var t = {};
|
|
try {
|
|
t = "string" == typeof e.data ? JSON.parse(e.data) : e.data
|
|
} catch (e) {}
|
|
var n = t.__tcfapiReturn;
|
|
n && "function" == typeof r[n.callId] && (r[n.callId](n.returnValue, n.success), r[n.callId] = null)
|
|
}, !1)
|
|
}
|
|
}(), "function" == typeof t.__tcfapi && t.__tcfapi("addEventListener", 2, function(e, t) {
|
|
t && (c = e)
|
|
})
|
|
},
|
|
h = function(e, t) {
|
|
return t ? encodeURIComponent(e) : e
|
|
},
|
|
p = function(e, t, n) {
|
|
if (e && e[n])
|
|
for (var a = e[n], o = Object.keys(a), r = 0; r < o.length; r++) {
|
|
t["{mediainfo." + n + "." + o[r] + "}"] = a[o[r]]
|
|
}
|
|
};
|
|
var g = {
|
|
processMetadataTracks: function(e, t) {
|
|
for (var n = e.textTracks(), a = function(n) {
|
|
"metadata" === n.kind && (e.ads.cueTextTracks.setMetadataTrackMode(n), t(e, n))
|
|
}, o = 0; o < n.length; o++) a(n[o]);
|
|
n.addEventListener("addtrack", function(e) {
|
|
a(e.track)
|
|
})
|
|
},
|
|
setMetadataTrackMode: function(e) {},
|
|
getSupportedAdCue: function(e, t) {
|
|
return t
|
|
},
|
|
isSupportedAdCue: function(e, t) {
|
|
return !0
|
|
},
|
|
getCueId: function(e, t) {
|
|
return t.id
|
|
}
|
|
},
|
|
y = function(e, t) {
|
|
return void 0 !== t && e.ads.includedCues[t]
|
|
},
|
|
v = function(e, t) {
|
|
void 0 !== t && "" !== t && (e.ads.includedCues[t] = !0)
|
|
};
|
|
|
|
function m() {
|
|
!1 !== this.ads._shouldBlockPlay && (this.paused() || (this.ads.debug("Playback was canceled by cancelContentPlay"), this.pause()), this.ads._cancelledPlay = !0)
|
|
}
|
|
g.processAdTrack = function(t, n, a, o) {
|
|
t.ads.includedCues = {};
|
|
for (var r = 0; r < n.length; r++) {
|
|
var i = n[r],
|
|
s = this.getSupportedAdCue(t, i);
|
|
if (!this.isSupportedAdCue(t, i)) return void e.log.warn("Skipping as this is not a supported ad cue.", i);
|
|
var d = this.getCueId(t, i),
|
|
l = i.startTime;
|
|
if (y(t, d)) return void e.log("Skipping ad already seen with ID " + d);
|
|
o && o(t, s, d, l), a(t, s, d, l), v(t, d)
|
|
}
|
|
};
|
|
var A = {},
|
|
S = e;
|
|
A.isMiddlewareMediatorSupported = function() {
|
|
return !S.browser.IS_IOS && !S.browser.IS_ANDROID && !!(S.use && S.middleware && S.middleware.TERMINATOR)
|
|
}, A.playMiddleware = function(t) {
|
|
return {
|
|
setSource: function(e, t) {
|
|
t(null, e)
|
|
},
|
|
callPlay: function() {
|
|
if (t.ads && !0 === t.ads._shouldBlockPlay) return t.ads.debug("Using playMiddleware to block content playback"), t.ads._playBlocked = !0, S.middleware.TERMINATOR
|
|
},
|
|
play: function(n, a) {
|
|
t.ads && t.ads._playBlocked && n ? (t.ads.debug("Play call to Tech was terminated."), t.trigger("play"), t.addClass("vjs-has-started"), t.ads._playBlocked = !1) : a && a.catch && a.catch(function(n) {
|
|
"NotAllowedError" !== n.name || e.browser.IS_SAFARI || t.trigger("pause")
|
|
})
|
|
}
|
|
}
|
|
}, A.testHook = function(e) {
|
|
S = e
|
|
};
|
|
var _ = A.playMiddleware,
|
|
P = A.isMiddlewareMediatorSupported,
|
|
b = function() {
|
|
if (e.getPlugin) return Boolean(e.getPlugin("ads"));
|
|
var t = e.getComponent("Player");
|
|
return Boolean(t && t.prototype.ads)
|
|
};
|
|
var k = function() {
|
|
function e() {}
|
|
return e.getState = function(t) {
|
|
if (t) return e.states_ && e.states_[t] ? e.states_[t] : void 0
|
|
}, e.registerState = function(t, n) {
|
|
if ("string" != typeof t || !t) throw new Error('Illegal state name, "' + t + '"; must be a non-empty string.');
|
|
return e.states_ || (e.states_ = {}), e.states_[t] = n, n
|
|
}, e
|
|
}(),
|
|
C = function() {
|
|
function t(e) {
|
|
this.player = e
|
|
}
|
|
t._getName = function() {
|
|
return "Anonymous State"
|
|
};
|
|
var n = t.prototype;
|
|
return n.transitionTo = function(e) {
|
|
var t = this.player;
|
|
this.cleanup(t);
|
|
var n = new e(t);
|
|
t.ads._state = n, t.ads.debug(this.constructor._getName() + " -> " + n.constructor._getName());
|
|
for (var a = arguments.length, o = new Array(a > 1 ? a - 1 : 0), r = 1; r < a; r++) o[r - 1] = arguments[r];
|
|
n.init.apply(n, [t].concat(o))
|
|
}, n.init = function() {}, n.cleanup = function() {}, n.onPlay = function() {}, n.onPlaying = function() {}, n.onEnded = function() {}, n.onAdEnded = function() {}, n.onAdsReady = function() {
|
|
e.log.warn("Unexpected adsready event")
|
|
}, n.onAdsError = function() {}, n.onAdsCanceled = function() {}, n.onAdTimeout = function() {}, n.onAdStarted = function() {}, n.onContentChanged = function() {}, n.onContentResumed = function() {}, n.onReadyForPostroll = function() {
|
|
e.log.warn("Unexpected readyforpostroll event")
|
|
}, n.onNoPreroll = function() {}, n.onNoPostroll = function() {}, n.startLinearAdMode = function() {
|
|
e.log.warn("Unexpected startLinearAdMode invocation (State via " + this.constructor._getName() + ")")
|
|
}, n.endLinearAdMode = function() {
|
|
e.log.warn("Unexpected endLinearAdMode invocation (State via " + this.constructor._getName() + ")")
|
|
}, n.skipLinearAdMode = function() {
|
|
e.log.warn("Unexpected skipLinearAdMode invocation (State via " + this.constructor._getName() + ")")
|
|
}, n.isAdState = function() {
|
|
throw new Error("isAdState unimplemented for " + this.constructor._getName())
|
|
}, n.isWaitingForAdBreak = function() {
|
|
return !1
|
|
}, n.isContentResuming = function() {
|
|
return !1
|
|
}, n.inAdBreak = function() {
|
|
return !1
|
|
}, n.handleEvent = function(e) {
|
|
var t = this.player;
|
|
"play" === e ? this.onPlay(t) : "adsready" === e ? this.onAdsReady(t) : "adserror" === e ? this.onAdsError(t) : "adscanceled" === e ? this.onAdsCanceled(t) : "adtimeout" === e ? this.onAdTimeout(t) : "ads-ad-started" === e ? this.onAdStarted(t) : "contentchanged" === e ? this.onContentChanged(t) : "contentresumed" === e ? this.onContentResumed(t) : "readyforpostroll" === e ? this.onReadyForPostroll(t) : "playing" === e ? this.onPlaying(t) : "ended" === e ? this.onEnded(t) : "nopreroll" === e ? this.onNoPreroll(t) : "nopostroll" === e ? this.onNoPostroll(t) : "adended" === e && this.onAdEnded(t)
|
|
}, t
|
|
}();
|
|
|
|
function T(e, t) {
|
|
e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e.__proto__ = t
|
|
}
|
|
k.registerState("State", C);
|
|
var w = function(e) {
|
|
function t(t) {
|
|
var n;
|
|
return (n = e.call(this, t) || this).contentResuming = !1, n.waitingForAdBreak = !1, n
|
|
}
|
|
T(t, e);
|
|
var n = t.prototype;
|
|
return n.isAdState = function() {
|
|
return !0
|
|
}, n.onPlaying = function() {
|
|
var e = k.getState("ContentPlayback");
|
|
this.contentResuming && this.transitionTo(e)
|
|
}, n.onContentResumed = function() {
|
|
var e = k.getState("ContentPlayback");
|
|
this.contentResuming && this.transitionTo(e)
|
|
}, n.isWaitingForAdBreak = function() {
|
|
return this.waitingForAdBreak
|
|
}, n.isContentResuming = function() {
|
|
return this.contentResuming
|
|
}, n.inAdBreak = function() {
|
|
return !0 === this.player.ads._inLinearAdMode
|
|
}, t
|
|
}(C);
|
|
k.registerState("AdState", w);
|
|
var R = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e);
|
|
var n = t.prototype;
|
|
return n.isAdState = function() {
|
|
return !1
|
|
}, n.onContentChanged = function(e) {
|
|
var t = k.getState("BeforePreroll"),
|
|
n = k.getState("Preroll");
|
|
e.ads.debug("Received contentchanged event (ContentState)"), e.paused() ? this.transitionTo(t) : (this.transitionTo(n, !1), e.pause(), e.ads._pausedOnContentupdate = !0)
|
|
}, t
|
|
}(C);
|
|
k.registerState("ContentState", R);
|
|
var L, B = function(t) {
|
|
function n() {
|
|
return t.apply(this, arguments) || this
|
|
}
|
|
T(n, t), n._getName = function() {
|
|
return "AdsDone"
|
|
};
|
|
var a = n.prototype;
|
|
return a.init = function(e) {
|
|
e.ads._contentHasEnded = !0, e.trigger("ended")
|
|
}, a.startLinearAdMode = function() {
|
|
e.log.warn("Unexpected startLinearAdMode invocation (AdsDone)")
|
|
}, n
|
|
}(k.getState("ContentState"));
|
|
k.registerState("AdsDone", B);
|
|
var M = {
|
|
start: function(t) {
|
|
t.ads.debug("Starting ad break"), t.ads._inLinearAdMode = !0, t.trigger("adstart"), t.ads.shouldTakeSnapshots() && (t.ads.snapshot = function(t) {
|
|
var n;
|
|
n = e.browser.IS_IOS && t.ads.isLive(t) && t.seekable().length > 0 ? t.currentTime() - t.seekable().end(0) : t.currentTime();
|
|
var a = t.$(".vjs-tech"),
|
|
o = t.textTracks ? t.textTracks() : [],
|
|
r = [],
|
|
i = {
|
|
ended: t.ended(),
|
|
currentSrc: t.currentSrc(),
|
|
sources: t.currentSources(),
|
|
src: t.tech_.src(),
|
|
currentTime: n,
|
|
type: t.currentType()
|
|
};
|
|
a && (i.style = a.getAttribute("style"));
|
|
for (var s = 0; s < o.length; s++) {
|
|
var d = o[s];
|
|
r.push({
|
|
track: d,
|
|
mode: d.mode
|
|
}), d.mode = "disabled"
|
|
}
|
|
return i.suppressedTracks = r, i
|
|
}(t)), t.ads.shouldPlayContentBehindAd(t) && (t.ads.preAdVolume_ = t.volume(), t.volume(0)), t.addClass("vjs-ad-playing"), t.hasClass("vjs-live") && t.removeClass("vjs-live"), t.ads.removeNativePoster()
|
|
},
|
|
end: function(t, n) {
|
|
t.ads.debug("Ending ad break"), void 0 === n && (n = function() {}), t.ads.adType = null, t.ads._inLinearAdMode = !1, t.trigger("adend"), t.removeClass("vjs-ad-playing"), t.ads.isLive(t) && t.addClass("vjs-live"), t.ads.shouldTakeSnapshots() ? function(t, n) {
|
|
var a = t.ads.snapshot;
|
|
if (void 0 === n && (n = function() {}), !0 === t.ads.disableNextSnapshotRestore) return t.ads.disableNextSnapshotRestore = !1, delete t.ads.snapshot, void n();
|
|
var o, r = t.$(".vjs-tech"),
|
|
i = 20,
|
|
s = a.suppressedTracks,
|
|
d = function() {
|
|
for (var e = 0; e < s.length; e++)(o = s[e]).track.mode = o.mode
|
|
},
|
|
l = function() {
|
|
var n;
|
|
if (e.browser.IS_IOS && t.ads.isLive(t)) {
|
|
if (a.currentTime < 0 && (n = t.seekable().length > 0 ? t.seekable().end(0) + a.currentTime : t.currentTime(), t.currentTime(n)), t.paused()) {
|
|
var o = t.play();
|
|
o && o.catch && o.catch(function(t) {
|
|
e.log.warn("Play promise rejected in IOS snapshot resume", t)
|
|
})
|
|
}
|
|
} else if (a.ended) t.currentTime(t.duration());
|
|
else {
|
|
t.currentTime(a.currentTime);
|
|
var r = t.play();
|
|
r && r.catch && r.catch(function(t) {
|
|
e.log.warn("Play promise rejected in snapshot resume", t)
|
|
})
|
|
}
|
|
t.ads.shouldRemoveAutoplay_ && (t.autoplay(!1), t.ads.shouldRemoveAutoplay_ = !1)
|
|
},
|
|
u = function n() {
|
|
if (t.off("contentcanplay", n), L && t.clearTimeout(L), (r = t.el().querySelector(".vjs-tech")).readyState > 1) return l();
|
|
if (void 0 === r.seekable) return l();
|
|
if (r.seekable.length > 0) return l();
|
|
if (i--) t.setTimeout(n, 50);
|
|
else try {
|
|
l()
|
|
} catch (t) {
|
|
e.log.warn("Failed to resume the content after an advertisement", t)
|
|
}
|
|
};
|
|
if ("style" in a && r.setAttribute("style", a.style || ""), t.ads.videoElementRecycled()) t.one("resumeended", function() {
|
|
delete t.ads.snapshot, n()
|
|
}), t.one("contentloadedmetadata", d), e.browser.IS_IOS && !t.autoplay() && (t.autoplay(!0), t.ads.shouldRemoveAutoplay_ = !0), t.src(a.sources), t.one("contentcanplay", u), L = t.setTimeout(u, 2e3);
|
|
else {
|
|
if (d(), !t.ended()) {
|
|
var c = t.play();
|
|
c && c.catch && c.catch(function(t) {
|
|
e.log.warn("Play promise rejected in snapshot restore", t)
|
|
})
|
|
}
|
|
delete t.ads.snapshot, n()
|
|
}
|
|
}(t, n) : (t.volume(t.ads.preAdVolume_), n())
|
|
}
|
|
},
|
|
j = function(t) {
|
|
function n() {
|
|
return t.apply(this, arguments) || this
|
|
}
|
|
T(n, t), n._getName = function() {
|
|
return "Preroll"
|
|
};
|
|
var a = n.prototype;
|
|
return a.init = function(e, t, n) {
|
|
if (this.waitingForAdBreak = !0, e.addClass("vjs-ad-loading"), n || e.ads.nopreroll_) return this.resumeAfterNoPreroll(e);
|
|
var a = e.ads.settings.timeout;
|
|
"number" == typeof e.ads.settings.prerollTimeout && (a = e.ads.settings.prerollTimeout), this._timeout = e.setTimeout(function() {
|
|
e.trigger("adtimeout")
|
|
}, a), t ? this.handleAdsReady() : this.adsReady = !1
|
|
}, a.onAdsReady = function(t) {
|
|
t.ads.inAdBreak() ? e.log.warn("Unexpected adsready event (Preroll)") : (t.ads.debug("Received adsready event (Preroll)"), this.handleAdsReady())
|
|
}, a.handleAdsReady = function() {
|
|
this.adsReady = !0, this.readyForPreroll()
|
|
}, a.afterLoadStart = function(e) {
|
|
var t = this.player;
|
|
t.ads._hasThereBeenALoadStartDuringPlayerLife ? e() : (t.ads.debug("Waiting for loadstart..."), t.one("loadstart", function() {
|
|
t.ads.debug("Received loadstart event"), e()
|
|
}))
|
|
}, a.noPreroll = function() {
|
|
var e = this;
|
|
this.afterLoadStart(function() {
|
|
e.player.ads.debug("Skipping prerolls due to nopreroll event (Preroll)"), e.resumeAfterNoPreroll(e.player)
|
|
})
|
|
}, a.readyForPreroll = function() {
|
|
var e = this.player;
|
|
this.afterLoadStart(function() {
|
|
e.ads.debug("Triggered readyforpreroll event (Preroll)"), e.trigger("readyforpreroll")
|
|
})
|
|
}, a.onAdsCanceled = function(e) {
|
|
var t = this;
|
|
e.ads.debug("adscanceled (Preroll)"), this.afterLoadStart(function() {
|
|
t.resumeAfterNoPreroll(e)
|
|
})
|
|
}, a.onAdsError = function(t) {
|
|
var n = this;
|
|
e.log("adserror (Preroll)"), this.inAdBreak() ? t.ads.endLinearAdMode() : this.afterLoadStart(function() {
|
|
n.resumeAfterNoPreroll(t)
|
|
})
|
|
}, a.startLinearAdMode = function() {
|
|
var t = this.player;
|
|
!this.adsReady || t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Preroll)") : (this.clearTimeout(t), t.ads.adType = "preroll", this.waitingForAdBreak = !1, M.start(t), t.ads._shouldBlockPlay = !1)
|
|
}, a.onAdStarted = function(e) {
|
|
e.removeClass("vjs-ad-loading")
|
|
}, a.endLinearAdMode = function() {
|
|
var e = this.player;
|
|
this.inAdBreak() && (e.removeClass("vjs-ad-loading"), e.addClass("vjs-ad-content-resuming"), this.contentResuming = !0, M.end(e))
|
|
}, a.skipLinearAdMode = function() {
|
|
var t = this,
|
|
n = this.player;
|
|
n.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : this.afterLoadStart(function() {
|
|
n.trigger("adskip"), n.ads.debug("skipLinearAdMode (Preroll)"), t.resumeAfterNoPreroll(n)
|
|
})
|
|
}, a.onAdTimeout = function(e) {
|
|
var t = this;
|
|
this.afterLoadStart(function() {
|
|
e.ads.debug("adtimeout (Preroll)"), t.resumeAfterNoPreroll(e)
|
|
})
|
|
}, a.onNoPreroll = function(t) {
|
|
t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected nopreroll event (Preroll)") : this.noPreroll()
|
|
}, a.resumeAfterNoPreroll = function(e) {
|
|
if (this.contentResuming = !0, e.ads._shouldBlockPlay = !1, this.cleanupPartial(e), e.ads._playRequested || e.ads._pausedOnContentupdate)
|
|
if (e.paused()) {
|
|
e.ads.debug("resumeAfterNoPreroll: attempting to resume playback (Preroll)");
|
|
var t = e.play();
|
|
t && t.then && t.then(null, function(e) {})
|
|
} else e.ads.debug("resumeAfterNoPreroll: already playing (Preroll)"), e.trigger("play"), e.trigger("playing")
|
|
}, a.cleanup = function(t) {
|
|
t.ads._hasThereBeenALoadStartDuringPlayerLife || e.log.warn("Leaving Preroll state before loadstart event can cause issues."), this.cleanupPartial(t)
|
|
}, a.cleanupPartial = function(e) {
|
|
e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming"), this.clearTimeout(e)
|
|
}, a.clearTimeout = function(e) {
|
|
e.clearTimeout(this._timeout), this._timeout = null
|
|
}, n
|
|
}(k.getState("AdState"));
|
|
k.registerState("Preroll", j);
|
|
var I = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e), t._getName = function() {
|
|
return "BeforePreroll"
|
|
};
|
|
var n = t.prototype;
|
|
return n.init = function(e) {
|
|
this.adsReady = !1, this.shouldResumeToContent = !1, e.ads._shouldBlockPlay = !e.ads.settings.allowVjsAutoplay || !e.autoplay()
|
|
}, n.onAdsReady = function(e) {
|
|
e.ads.debug("Received adsready event (BeforePreroll)"), this.adsReady = !0
|
|
}, n.onPlay = function(e) {
|
|
var t = k.getState("Preroll");
|
|
e.ads.debug("Received play event (BeforePreroll)"), this.transitionTo(t, this.adsReady, this.shouldResumeToContent)
|
|
}, n.onAdsCanceled = function(e) {
|
|
e.ads.debug("adscanceled (BeforePreroll)"), this.shouldResumeToContent = !0
|
|
}, n.onAdsError = function() {
|
|
this.player.ads.debug("adserror (BeforePreroll)"), this.shouldResumeToContent = !0
|
|
}, n.onNoPreroll = function() {
|
|
this.player.ads.debug("Skipping prerolls due to nopreroll event (BeforePreroll)"), this.shouldResumeToContent = !0
|
|
}, n.skipLinearAdMode = function() {
|
|
var e = this.player;
|
|
e.trigger("adskip"), e.ads.debug("skipLinearAdMode (BeforePreroll)"), this.shouldResumeToContent = !0
|
|
}, n.onContentChanged = function() {
|
|
this.init(this.player)
|
|
}, t
|
|
}(k.getState("ContentState"));
|
|
k.registerState("BeforePreroll", I);
|
|
var N = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e), t._getName = function() {
|
|
return "Midroll"
|
|
};
|
|
var n = t.prototype;
|
|
return n.init = function(e) {
|
|
e.ads.adType = "midroll", M.start(e), e.addClass("vjs-ad-loading")
|
|
}, n.onAdStarted = function(e) {
|
|
e.removeClass("vjs-ad-loading")
|
|
}, n.endLinearAdMode = function() {
|
|
var e = this.player;
|
|
this.inAdBreak() && (this.contentResuming = !0, e.addClass("vjs-ad-content-resuming"), e.removeClass("vjs-ad-loading"), M.end(e))
|
|
}, n.onAdsError = function(e) {
|
|
this.inAdBreak() && e.ads.endLinearAdMode()
|
|
}, n.cleanup = function(e) {
|
|
e.removeClass("vjs-ad-loading"), e.removeClass("vjs-ad-content-resuming")
|
|
}, t
|
|
}(k.getState("AdState"));
|
|
k.registerState("Midroll", N);
|
|
var E = function(t) {
|
|
function n() {
|
|
return t.apply(this, arguments) || this
|
|
}
|
|
T(n, t), n._getName = function() {
|
|
return "Postroll"
|
|
};
|
|
var a = n.prototype;
|
|
return a.init = function(e) {
|
|
if (this.waitingForAdBreak = !0, e.ads._contentEnding = !0, e.ads.nopostroll_) {
|
|
this.resumeContent(e);
|
|
var t = k.getState("AdsDone");
|
|
this.transitionTo(t)
|
|
} else {
|
|
e.addClass("vjs-ad-loading");
|
|
var n = e.ads.settings.timeout;
|
|
"number" == typeof e.ads.settings.postrollTimeout && (n = e.ads.settings.postrollTimeout), this._postrollTimeout = e.setTimeout(function() {
|
|
e.trigger("adtimeout")
|
|
}, n)
|
|
}
|
|
}, a.startLinearAdMode = function() {
|
|
var t = this.player;
|
|
t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected startLinearAdMode invocation (Postroll)") : (t.ads.adType = "postroll", t.clearTimeout(this._postrollTimeout), this.waitingForAdBreak = !1, M.start(t))
|
|
}, a.onAdStarted = function(e) {
|
|
e.removeClass("vjs-ad-loading")
|
|
}, a.endLinearAdMode = function() {
|
|
var e = this,
|
|
t = this.player,
|
|
n = k.getState("AdsDone");
|
|
this.inAdBreak() && (t.removeClass("vjs-ad-loading"), this.resumeContent(t), M.end(t, function() {
|
|
e.transitionTo(n)
|
|
}))
|
|
}, a.skipLinearAdMode = function() {
|
|
var t = this.player;
|
|
t.ads.inAdBreak() || this.isContentResuming() ? e.log.warn("Unexpected skipLinearAdMode invocation") : (t.ads.debug("Postroll abort (skipLinearAdMode)"), t.trigger("adskip"), this.abort(t))
|
|
}, a.onAdTimeout = function(e) {
|
|
e.ads.debug("Postroll abort (adtimeout)"), this.abort(e)
|
|
}, a.onAdsError = function(e) {
|
|
e.ads.debug("Postroll abort (adserror)"), e.ads.inAdBreak() ? e.ads.endLinearAdMode() : this.abort(e)
|
|
}, a.onContentChanged = function(e) {
|
|
if (this.isContentResuming()) {
|
|
var t = k.getState("BeforePreroll");
|
|
this.transitionTo(t)
|
|
} else if (!this.inAdBreak()) {
|
|
var n = k.getState("Preroll");
|
|
this.transitionTo(n)
|
|
}
|
|
}, a.onNoPostroll = function(t) {
|
|
this.isContentResuming() || this.inAdBreak() ? e.log.warn("Unexpected nopostroll event (Postroll)") : this.abort(t)
|
|
}, a.resumeContent = function(e) {
|
|
this.contentResuming = !0, e.addClass("vjs-ad-content-resuming")
|
|
}, a.abort = function(e) {
|
|
var t = k.getState("AdsDone");
|
|
this.resumeContent(e), e.removeClass("vjs-ad-loading"), this.transitionTo(t)
|
|
}, a.cleanup = function(e) {
|
|
e.removeClass("vjs-ad-content-resuming"), e.clearTimeout(this._postrollTimeout), e.ads._contentEnding = !1
|
|
}, n
|
|
}(k.getState("AdState"));
|
|
k.registerState("Postroll", E);
|
|
var x = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e), t._getName = function() {
|
|
return "ContentPlayback"
|
|
};
|
|
var n = t.prototype;
|
|
return n.init = function(e) {
|
|
e.ads._shouldBlockPlay = !1
|
|
}, n.onAdsReady = function(e) {
|
|
e.ads.debug("Received adsready event (ContentPlayback)"), e.ads.nopreroll_ || (e.ads.debug("Triggered readyforpreroll event (ContentPlayback)"), e.trigger("readyforpreroll"))
|
|
}, n.onReadyForPostroll = function(e) {
|
|
var t = k.getState("Postroll");
|
|
e.ads.debug("Received readyforpostroll event"), this.transitionTo(t)
|
|
}, n.startLinearAdMode = function() {
|
|
var e = k.getState("Midroll");
|
|
this.transitionTo(e)
|
|
}, t
|
|
}(k.getState("ContentState"));
|
|
k.registerState("ContentPlayback", x);
|
|
var D = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e), t._getName = function() {
|
|
return "StitchedContentPlayback"
|
|
};
|
|
var n = t.prototype;
|
|
return n.init = function() {
|
|
this.player.ads._shouldBlockPlay = !1
|
|
}, n.onContentChanged = function() {
|
|
this.player.ads.debug("Received contentchanged event (" + this.constructor._getName() + ")")
|
|
}, n.startLinearAdMode = function() {
|
|
var e = k.getState("StitchedAdRoll");
|
|
this.transitionTo(e)
|
|
}, t
|
|
}(k.getState("ContentState"));
|
|
k.registerState("StitchedContentPlayback", D);
|
|
var O = function(e) {
|
|
function t() {
|
|
return e.apply(this, arguments) || this
|
|
}
|
|
T(t, e), t._getName = function() {
|
|
return "StitchedAdRoll"
|
|
};
|
|
var n = t.prototype;
|
|
return n.init = function() {
|
|
this.waitingForAdBreak = !1, this.contentResuming = !1, this.player.ads.adType = "stitched", M.start(this.player)
|
|
}, n.onPlaying = function() {}, n.onContentResumed = function() {}, n.onAdEnded = function() {
|
|
this.endLinearAdMode(), this.player.trigger("ended")
|
|
}, n.endLinearAdMode = function() {
|
|
var e = k.getState("StitchedContentPlayback");
|
|
M.end(this.player), this.transitionTo(e)
|
|
}, t
|
|
}(k.getState("AdState"));
|
|
k.registerState("StitchedAdRoll", O);
|
|
var F = A.isMiddlewareMediatorSupported,
|
|
U = e.getTech("Html5").Events,
|
|
V = {
|
|
timeout: 5e3,
|
|
prerollTimeout: void 0,
|
|
postrollTimeout: void 0,
|
|
debug: !1,
|
|
stitchedAds: !1,
|
|
contentIsLive: void 0,
|
|
liveCuePoints: !0,
|
|
allowVjsAutoplay: e.options.normalizeAutoplay || !1
|
|
},
|
|
q = function(o) {
|
|
var r = this,
|
|
i = e.mergeOptions(V, o),
|
|
s = [];
|
|
U.concat(["firstplay", "loadedalldata"]).forEach(function(e) {
|
|
-1 === s.indexOf(e) && s.push(e)
|
|
}), r.on(s, u), F() || function(t, n) {
|
|
n && e.log("Using cancelContentPlay to block content playback"), t.on("play", m)
|
|
}(r, i.debug), r.setTimeout(function() {
|
|
r.ads._hasThereBeenALoadStartDuringPlayerLife || "" === r.src() || e.log.error("videojs-contrib-ads has not seen a loadstart event 5 seconds after being initialized, but a source is present. This indicates that videojs-contrib-ads was initialized too late. It must be initialized immediately after video.js in the same tick. As a result, some ads will not play and some media events will be incorrect. For more information, see http://videojs.github.io/videojs-contrib-ads/integrator/getting-started.html")
|
|
}, 5e3), r.on("ended", function() {
|
|
r.hasClass("vjs-has-started") || r.addClass("vjs-has-started")
|
|
}), r.on("contenttimeupdate", function() {
|
|
r.removeClass("vjs-waiting")
|
|
}), r.on(["addurationchange", "adcanplay"], function() {
|
|
if (!r.ads.settings.stitchedAds && !r.hasStarted() && (!r.ads.snapshot || r.currentSrc() !== r.ads.snapshot.currentSrc) && r.ads.inAdBreak()) {
|
|
var t = r.play();
|
|
t && t.catch && t.catch(function(t) {
|
|
e.log.warn("Play promise rejected when playing ad", t)
|
|
})
|
|
}
|
|
}), r.on("nopreroll", function() {
|
|
r.ads.debug("Received nopreroll event"), r.ads.nopreroll_ = !0
|
|
}), r.on("nopostroll", function() {
|
|
r.ads.debug("Received nopostroll event"), r.ads.nopostroll_ = !0
|
|
}), r.on("playing", function() {
|
|
r.ads._cancelledPlay = !1, r.ads._pausedOnContentupdate = !1
|
|
}), r.on("play", function() {
|
|
r.ads._playRequested = !0
|
|
}), r.one("loadstart", function() {
|
|
r.ads._hasThereBeenALoadStartDuringPlayerLife = !0
|
|
}), r.on("loadeddata", function() {
|
|
r.ads._hasThereBeenALoadedData = !0
|
|
}), r.on("loadedmetadata", function() {
|
|
r.ads._hasThereBeenALoadedMetaData = !0
|
|
}), r.ads = function(t) {
|
|
return {
|
|
disableNextSnapshotRestore: !1,
|
|
_contentEnding: !1,
|
|
_contentHasEnded: !1,
|
|
_hasThereBeenALoadStartDuringPlayerLife: !1,
|
|
_hasThereBeenALoadedData: !1,
|
|
_hasThereBeenALoadedMetaData: !1,
|
|
_inLinearAdMode: !1,
|
|
_shouldBlockPlay: !1,
|
|
_playBlocked: !1,
|
|
_playRequested: !1,
|
|
adType: null,
|
|
VERSION: a,
|
|
reset: function() {
|
|
t.ads.disableNextSnapshotRestore = !1, t.ads._contentEnding = !1, t.ads._contentHasEnded = !1, t.ads.snapshot = null, t.ads.adType = null, t.ads._hasThereBeenALoadedData = !1, t.ads._hasThereBeenALoadedMetaData = !1, t.ads._cancelledPlay = !1, t.ads._shouldBlockPlay = !1, t.ads._playBlocked = !1, t.ads.nopreroll_ = !1, t.ads.nopostroll_ = !1, t.ads._playRequested = !1
|
|
},
|
|
startLinearAdMode: function() {
|
|
t.ads._state.startLinearAdMode()
|
|
},
|
|
endLinearAdMode: function() {
|
|
t.ads._state.endLinearAdMode()
|
|
},
|
|
skipLinearAdMode: function() {
|
|
t.ads._state.skipLinearAdMode()
|
|
},
|
|
stitchedAds: function(t) {
|
|
return void 0 !== t && (e.log.warn("Using player.ads.stitchedAds() as a setter is deprecated, it should be set as an option upon initialization of contrib-ads."), this.settings.stitchedAds = !!t), this.settings.stitchedAds
|
|
},
|
|
videoElementRecycled: function() {
|
|
if (t.ads.shouldPlayContentBehindAd(t)) return !1;
|
|
if (!this.snapshot) throw new Error("You cannot use videoElementRecycled while there is no snapshot.");
|
|
var e = t.tech_.src() !== this.snapshot.src,
|
|
n = t.currentSrc() !== this.snapshot.currentSrc;
|
|
return e || n
|
|
},
|
|
isLive: function(n) {
|
|
return void 0 === n && (n = t), "boolean" == typeof n.ads.settings.contentIsLive ? n.ads.settings.contentIsLive : n.duration() === 1 / 0 || "8" === e.browser.IOS_VERSION && 0 === n.duration()
|
|
},
|
|
shouldPlayContentBehindAd: function(n) {
|
|
if (void 0 === n && (n = t), n) return !!n.ads.settings.liveCuePoints && !e.browser.IS_IOS && !e.browser.IS_ANDROID && n.duration() === 1 / 0;
|
|
throw new Error("shouldPlayContentBehindAd requires a player as a param")
|
|
},
|
|
shouldTakeSnapshots: function(e) {
|
|
return void 0 === e && (e = t), !this.shouldPlayContentBehindAd(e) && !this.stitchedAds()
|
|
},
|
|
isInAdMode: function() {
|
|
return this._state.isAdState()
|
|
},
|
|
isWaitingForAdBreak: function() {
|
|
return this._state.isWaitingForAdBreak()
|
|
},
|
|
isContentResuming: function() {
|
|
return this._state.isContentResuming()
|
|
},
|
|
isAdPlaying: function() {
|
|
return this._state.inAdBreak()
|
|
},
|
|
inAdBreak: function() {
|
|
return this._state.inAdBreak()
|
|
},
|
|
removeNativePoster: function() {
|
|
var e = t.$(".vjs-tech");
|
|
e && e.removeAttribute("poster")
|
|
},
|
|
debug: function() {
|
|
if (this.settings.debug) {
|
|
for (var t = arguments.length, n = new Array(t), a = 0; a < t; a++) n[a] = arguments[a];
|
|
1 === n.length && "string" == typeof n[0] ? e.log("ADS: " + n[0]) : e.log.apply(e, ["ADS:"].concat(n))
|
|
}
|
|
}
|
|
}
|
|
}(r), r.ads.settings = i, i.stitchedAds = !!i.stitchedAds, i.stitchedAds ? r.ads._state = new(k.getState("StitchedContentPlayback"))(r) : r.ads._state = new(k.getState("BeforePreroll"))(r), r.ads._state.init(r), r.ads.cueTextTracks = g, r.ads.adMacroReplacement = function(a, o, r) {
|
|
var i = this,
|
|
s = {};
|
|
a = a.replace(/{([^}=]+)=([^}]+)}/g, function(e, t, n) {
|
|
return s["{" + t + "}"] = n, "{" + t + "}"
|
|
}), void 0 === o && (o = !1);
|
|
var d = {};
|
|
for (var l in void 0 !== r && (d = r), d["{player.id}"] = this.options_["data-player"] || this.id_, d["{player.height}"] = this.currentHeight(), d["{player.width}"] = this.currentWidth(), d["{mediainfo.id}"] = this.mediainfo ? this.mediainfo.id : "", d["{mediainfo.name}"] = this.mediainfo ? this.mediainfo.name : "", d["{mediainfo.duration}"] = this.mediainfo ? this.mediainfo.duration : "", d["{player.duration}"] = this.duration(), d["{player.pageUrl}"] = e.dom.isInFrame() ? n.referrer : t.location.href, d["{playlistinfo.id}"] = this.playlistinfo ? this.playlistinfo.id : "", d["{playlistinfo.name}"] = this.playlistinfo ? this.playlistinfo.name : "", d["{timestamp}"] = (new Date).getTime(), d["{document.referrer}"] = n.referrer, d["{window.location.href}"] = t.location.href, d["{random}"] = Math.floor(1e12 * Math.random()), ["description", "tags", "reference_id", "ad_keys"].forEach(function(e) {
|
|
i.mediainfo && i.mediainfo[e] ? d["{mediainfo." + e + "}"] = i.mediainfo[e] : s["{mediainfo." + e + "}"] ? d["{mediainfo." + e + "}"] = s["{mediainfo." + e + "}"] : d["{mediainfo." + e + "}"] = ""
|
|
}), p(this.mediainfo, d, "custom_fields"), p(this.mediainfo, d, "customFields"), Object.keys(c).forEach(function(e) {
|
|
d["{tcf." + e + "}"] = c[e]
|
|
}), d["{tcf.gdprAppliesInt}"] = c.gdprApplies ? 1 : 0, d) a = a.split(l).join(h(d[l], o));
|
|
for (var u in a = a.replace(/{pageVariable\.([^}]+)}/g, function(n, a) {
|
|
for (var r, i = t, d = a.split("."), l = 0; l < d.length; l++) l === d.length - 1 ? r = i[d[l]] : i = i[d[l]];
|
|
var u = typeof r;
|
|
return null === r ? "null" : void 0 === r ? s["{pageVariable." + a + "}"] ? s["{pageVariable." + a + "}"] : (e.log.warn('Page variable "' + a + '" not found'), "") : "string" !== u && "number" !== u && "boolean" !== u ? (e.log.warn('Page variable "' + a + '" is not a supported type'), "") : h(String(r), o)
|
|
}), s) a = a.replace(u, s[u]);
|
|
return a
|
|
}.bind(r),
|
|
function(e) {
|
|
e.ads.contentSrc = e.currentSrc(), e.ads._seenInitialLoadstart = !1, e.on("loadstart", function() {
|
|
if (!e.ads.inAdBreak()) {
|
|
var t = e.currentSrc();
|
|
t !== e.ads.contentSrc && (e.ads._seenInitialLoadstart && e.trigger({
|
|
type: "contentchanged"
|
|
}), e.trigger({
|
|
type: "contentupdate",
|
|
oldValue: e.ads.contentSrc,
|
|
newValue: t
|
|
}), e.ads.contentSrc = t), e.ads._seenInitialLoadstart = !0
|
|
}
|
|
})
|
|
}(r), r.on("contentchanged", r.ads.reset);
|
|
var d = function() {
|
|
var t = r.textTracks();
|
|
if (!r.ads.shouldPlayContentBehindAd(r) && r.ads.inAdBreak() && r.tech_.featuresNativeTextTracks && e.browser.IS_IOS && !Array.isArray(r.textTracks()))
|
|
for (var n = 0; n < t.length; n++) {
|
|
var a = t[n];
|
|
"showing" === a.mode && (a.mode = "disabled")
|
|
}
|
|
};
|
|
r.ready(function() {
|
|
r.textTracks().addEventListener("change", d)
|
|
}), r.on(["play", "playing", "ended", "adsready", "adscanceled", "adskip", "adserror", "adtimeout", "adended", "ads-ad-started", "contentchanged", "dispose", "contentresumed", "readyforpostroll", "nopreroll", "nopostroll"], function(e) {
|
|
r.ads._state.handleEvent(e.type)
|
|
}), r.on("dispose", function() {
|
|
r.ads.reset(), r.textTracks().removeEventListener("change", d)
|
|
}), f(), r.ads.listenToTcf = f
|
|
};
|
|
return q.VERSION = a,
|
|
function(t) {
|
|
!b(e) && ((e.registerPlugin || e.plugin)("ads", t), P() && !e.usingContribAdsMiddleware_ && (e.use("*", _), e.usingContribAdsMiddleware_ = !0, e.log.debug("Play middleware has been registered with videojs")))
|
|
}(q), q
|
|
});
|
|
/*! @name @viostream/videojs-overlay @version v2.1.6-f.97-master @license Apache-2.0 */
|
|
! function(t, e) {
|
|
"object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).videojsOverlay = e(t.videojs)
|
|
}(this, (function(t) {
|
|
"use strict";
|
|
|
|
function e(t) {
|
|
return t && "object" == typeof t && "default" in t ? t : {
|
|
default: t
|
|
}
|
|
}
|
|
var n = e(t);
|
|
|
|
function i(t, e, n) {
|
|
return t(n = {
|
|
path: e,
|
|
exports: {},
|
|
require: function(t, e) {
|
|
return function() {
|
|
throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")
|
|
}(null == e && n.path)
|
|
}
|
|
}, n.exports), n.exports
|
|
}
|
|
var o = i((function(t) {
|
|
t.exports = function(t) {
|
|
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return t
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
})),
|
|
r = i((function(t) {
|
|
function e(n, i) {
|
|
return t.exports = e = Object.setPrototypeOf || function(t, e) {
|
|
return t.__proto__ = e, t
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i)
|
|
}
|
|
t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
})),
|
|
s = i((function(t) {
|
|
t.exports = function(t, e) {
|
|
t.prototype = Object.create(e.prototype), t.prototype.constructor = t, r(t, e)
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
})),
|
|
a = {
|
|
align: "top-left",
|
|
class: "",
|
|
content: "This overlay will show up while the video is playing",
|
|
debug: !1,
|
|
showBackground: !0,
|
|
attachToControlBar: !1,
|
|
overlays: [{
|
|
start: "playing",
|
|
end: "paused"
|
|
}]
|
|
},
|
|
h = n.default.getComponent("Component"),
|
|
d = n.default.dom || n.default,
|
|
l = n.default.registerPlugin || n.default.plugin,
|
|
u = function(t) {
|
|
return "number" == typeof t && t == t
|
|
},
|
|
p = function(t) {
|
|
return "string" == typeof t && /^\S+$/.test(t)
|
|
},
|
|
c = function(t) {
|
|
function e(n, i) {
|
|
var r;
|
|
return (r = t.call(this, n, i) || this).isVisible = !0, ["start", "end"].forEach((function(t) {
|
|
var e = r.options_[t];
|
|
if (u(e)) r[t + "Event_"] = "timeupdate";
|
|
else if (p(e)) r[t + "Event_"] = e;
|
|
else if ("start" === t) throw new Error('invalid "start" option; expected number or string')
|
|
})), ["endListener_", "rewindListener_", "startListener_"].forEach((function(t) {
|
|
r[t] = function(n) {
|
|
return e.prototype[t].call(o(r), n)
|
|
}
|
|
})), "timeupdate" === r.startEvent_ && r.on(n, "timeupdate", r.rewindListener_), r.debug('created, listening to "' + r.startEvent_ + '" for "start" and "' + (r.endEvent_ || "nothing") + '" for "end"'), r.hide(), r
|
|
}
|
|
s(e, t);
|
|
var i = e.prototype;
|
|
return i.createEl = function() {
|
|
var t = this.options_,
|
|
e = t.content,
|
|
n = t.showBackground ? "vjs-overlay-background" : "vjs-overlay-no-background",
|
|
i = d.createEl("div", {
|
|
className: "\n vjs-overlay\n vjs-overlay-" + t.align + "\n " + t.class + "\n " + n + "\n vjs-hidden\n "
|
|
});
|
|
return "string" == typeof e ? i.innerHTML = e : e instanceof window.DocumentFragment ? i.appendChild(e) : d.appendContent(i, e), i
|
|
}, i.debug = function() {
|
|
if (this.options_.debug) {
|
|
for (var t = n.default.log, e = t, i = arguments.length, o = new Array(i), r = 0; r < i; r++) o[r] = arguments[r];
|
|
t.hasOwnProperty(o[0]) && "function" == typeof t[o[0]] && (e = t[o.shift()]), e.apply(void 0, ["overlay#" + this.id() + ": "].concat(o))
|
|
}
|
|
}, i.hide = function() {
|
|
if (!1 !== this.isVisible) return t.prototype.hide.call(this), this.isVisible = !1, this.debug("hidden"), this.debug('bound `startListener_` to "' + this.startEvent_ + '"'), u(this.options_.end) && (this.player().paused() || this.player().trigger("hide-overlay", {
|
|
id: this.options_.cta_id,
|
|
align: this.options_.align
|
|
})), this.endEvent_ && (this.debug('unbound `endListener_` from "' + this.endEvent_ + '"'), this.off(this.player(), this.endEvent_, this.endListener_)), this.on(this.player(), this.startEvent_, this.startListener_), this
|
|
}, i.shouldHide_ = function(t, e) {
|
|
var n = this.options_.end;
|
|
return u(n) ? t >= n : n === e
|
|
}, i.show = function() {
|
|
return t.prototype.show.call(this), this.isVisible = !0, this.off(this.player(), this.startEvent_, this.startListener_), this.debug("shown"), this.debug('unbound `startListener_` from "' + this.startEvent_ + '"'), u(this.options_.start) && (this.player().paused() && 0 !== this.options_.start || this.player().trigger("show-overlay", {
|
|
id: this.options_.cta_id,
|
|
align: this.options_.align
|
|
})), this.endEvent_ && (this.debug('bound `endListener_` to "' + this.endEvent_ + '"'), this.on(this.player(), this.endEvent_, this.endListener_)), this
|
|
}, i.shouldShow_ = function(t, e) {
|
|
var n = this.options_.start,
|
|
i = this.options_.end;
|
|
return u(n) ? u(i) ? t >= n && t < i : this.hasShownSinceSeek_ ? Math.floor(t) === n : (this.hasShownSinceSeek_ = !0, t >= n) : n === e
|
|
}, i.startListener_ = function(t) {
|
|
var e = this.player().currentTime();
|
|
this.shouldShow_(e, t.type) && this.show()
|
|
}, i.endListener_ = function(t) {
|
|
var e = this.player().currentTime();
|
|
this.shouldHide_(e, t.type) && this.hide()
|
|
}, i.rewindListener_ = function(t) {
|
|
var e = this.player().currentTime(),
|
|
n = this.previousTime_,
|
|
i = this.options_.start,
|
|
o = this.options_.end;
|
|
e < n && (this.debug("rewind detected"), u(o) && !this.shouldShow_(e) ? (this.debug("hiding; " + o + " is an integer and overlay should not show at this time"), this.hasShownSinceSeek_ = !1, this.hide()) : p(o) && e < i && (this.debug("hiding; show point (" + i + ") is before now (" + e + ") and end point (" + o + ") is an event"), this.hasShownSinceSeek_ = !1, this.hide())), this.previousTime_ = e
|
|
}, e
|
|
}(h);
|
|
n.default.registerComponent("Overlay", c);
|
|
var f = function(t) {
|
|
var e = this,
|
|
i = n.default.mergeOptions(a, t);
|
|
Array.isArray(this.overlays_) && this.overlays_.forEach((function(t) {
|
|
e.removeChild(t), e.controlBar && e.controlBar.removeChild(t), t.dispose()
|
|
}));
|
|
var o = i.overlays;
|
|
delete i.overlays, this.overlays_ = o.map((function(t) {
|
|
var o = n.default.mergeOptions(i, t),
|
|
r = "string" == typeof o.attachToControlBar || !0 === o.attachToControlBar;
|
|
if (!e.controls() || !e.controlBar) return e.addChild("overlay", o);
|
|
if (r && -1 !== o.align.indexOf("bottom")) {
|
|
var s = e.controlBar.children()[0];
|
|
if (void 0 !== e.controlBar.getChild(o.attachToControlBar) && (s = e.controlBar.getChild(o.attachToControlBar)), s) {
|
|
var a = e.controlBar.children().indexOf(s);
|
|
return e.controlBar.addChild("overlay", o, a)
|
|
}
|
|
}
|
|
var h = e.addChild("overlay", o);
|
|
return e.el().insertBefore(h.el(), e.controlBar.el()), h
|
|
}))
|
|
};
|
|
return f.VERSION = "v2.1.6-f.97-master", l("overlay", f), f
|
|
}));
|
|
/**
|
|
* videojs-share
|
|
* @version 3.2.1
|
|
* @copyright 2019 Mikhail Khazov <mkhazov.work@gmail.com>
|
|
* @license MIT
|
|
*/
|
|
! function(t, e) {
|
|
"object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("video.js")) : "function" == typeof define && define.amd ? define(["video.js"], e) : t.videojsShare = e(t.videojs)
|
|
}(this, function(t) {
|
|
"use strict";
|
|
|
|
function e(t, e) {
|
|
return e = {
|
|
exports: {}
|
|
}, t(e, e.exports), e.exports
|
|
}
|
|
|
|
function n(t) {
|
|
var e;
|
|
if ("SELECT" === t.nodeName) t.focus(), e = t.value;
|
|
else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) {
|
|
var n = t.hasAttribute("readonly");
|
|
n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), e = t.value
|
|
} else {
|
|
t.hasAttribute("contenteditable") && t.focus();
|
|
var i = window.getSelection(),
|
|
o = document.createRange();
|
|
o.selectNodeContents(t), i.removeAllRanges(), i.addRange(o), e = i.toString()
|
|
}
|
|
return e
|
|
}
|
|
|
|
function i() {}
|
|
|
|
function o(t, e) {
|
|
for (; t && t.nodeType !== G;) {
|
|
if ("function" == typeof t.matches && t.matches(e)) return t;
|
|
t = t.parentNode
|
|
}
|
|
}
|
|
|
|
function r(t, e, n, i, o) {
|
|
var r = l.apply(this, arguments);
|
|
return t.addEventListener(n, r, o), {
|
|
destroy: function() {
|
|
t.removeEventListener(n, r, o)
|
|
}
|
|
}
|
|
}
|
|
|
|
function a(t, e, n, i, o) {
|
|
return "function" == typeof t.addEventListener ? r.apply(null, arguments) : "function" == typeof n ? r.bind(null, document).apply(null, arguments) : ("string" == typeof t && (t = document.querySelectorAll(t)), Array.prototype.map.call(t, function(t) {
|
|
return r(t, e, n, i, o)
|
|
}))
|
|
}
|
|
|
|
function l(t, e, n, i) {
|
|
return function(n) {
|
|
n.delegateTarget = K(n.target, e), n.delegateTarget && i.call(t, n)
|
|
}
|
|
}
|
|
|
|
function s(t, e, n) {
|
|
if (!t && !e && !n) throw new Error("Missing required arguments");
|
|
if (!X.string(e)) throw new TypeError("Second argument must be a String");
|
|
if (!X.fn(n)) throw new TypeError("Third argument must be a Function");
|
|
if (X.node(t)) return c(t, e, n);
|
|
if (X.nodeList(t)) return u(t, e, n);
|
|
if (X.string(t)) return h(t, e, n);
|
|
throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")
|
|
}
|
|
|
|
function c(t, e, n) {
|
|
return t.addEventListener(e, n), {
|
|
destroy: function() {
|
|
t.removeEventListener(e, n)
|
|
}
|
|
}
|
|
}
|
|
|
|
function u(t, e, n) {
|
|
return Array.prototype.forEach.call(t, function(t) {
|
|
t.addEventListener(e, n)
|
|
}), {
|
|
destroy: function() {
|
|
Array.prototype.forEach.call(t, function(t) {
|
|
t.removeEventListener(e, n)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
function h(t, e, n) {
|
|
return Q(document.body, t, e, n)
|
|
}
|
|
|
|
function d(t) {
|
|
return Object.keys(t).filter(function(e) {
|
|
return void 0 !== t[e] && "" !== t[e]
|
|
}).map(function(e) {
|
|
return encodeURIComponent(e) + "=" + encodeURIComponent(t[e])
|
|
}).join("&")
|
|
}
|
|
|
|
function f() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.fbAppId,
|
|
n = t.url,
|
|
i = t.redirectUri;
|
|
if (!e) throw new Error("fbAppId is not defined");
|
|
var o = d({
|
|
app_id: e,
|
|
display: "popup",
|
|
redirect_uri: i,
|
|
link: n
|
|
});
|
|
return window.open("https://www.facebook.com/dialog/feed?" + o, "_blank", tt)
|
|
}
|
|
|
|
function p() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.fbAppId,
|
|
n = t.url,
|
|
i = t.hashtag,
|
|
o = t.redirectUri;
|
|
if (!e) throw new Error("fbAppId is not defined");
|
|
var r = d({
|
|
app_id: e,
|
|
display: "popup",
|
|
redirect_uri: o,
|
|
href: n,
|
|
hashtag: i
|
|
});
|
|
return window.open("https://www.facebook.com/dialog/share?" + r, "_blank", tt)
|
|
}
|
|
|
|
function v() {
|
|
var t = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url;
|
|
if (!t) throw new Error("url is not defined");
|
|
var e = d({
|
|
kid_directed_site: "0",
|
|
sdk: "joey",
|
|
u: t,
|
|
display: "popup",
|
|
ref: "plugin",
|
|
src: "share_button"
|
|
});
|
|
return window.open("https://www.facebook.com/sharer/sharer.php?" + e, "_blank", tt)
|
|
}
|
|
|
|
function g() {
|
|
var t = d({
|
|
url: (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).url
|
|
});
|
|
return window.open("https://plus.google.com/share?" + t, "_blank", tt)
|
|
}
|
|
|
|
function w() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = d({
|
|
share_url: t.url,
|
|
title: t.title,
|
|
description: t.description,
|
|
imageurl: t.image
|
|
});
|
|
return window.open("http://connect.mail.ru/share?" + e, "_blank", tt)
|
|
}
|
|
|
|
function m() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.url,
|
|
n = t.title,
|
|
i = t.description,
|
|
o = (n || "") + "\r\n" + (i || "") + "\r\n" + (e || ""),
|
|
r = "mailto:?body=" + encodeURIComponent(o);
|
|
return window.location.assign(r)
|
|
}
|
|
|
|
function y() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = d({
|
|
"st.cmd": "addShare",
|
|
"st._surl": t.url,
|
|
title: t.title
|
|
});
|
|
return window.open("https://ok.ru/dk?" + e, "_blank", tt)
|
|
}
|
|
|
|
function b() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = d({
|
|
url: t.url,
|
|
text: t.title
|
|
});
|
|
return window.open("https://t.me/share/url?" + e, "_blank", tt)
|
|
}
|
|
|
|
function k() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.title,
|
|
n = t.url,
|
|
i = t.hashtags,
|
|
o = d({
|
|
text: e,
|
|
url: n,
|
|
hashtags: (void 0 === i ? [] : i).join(",")
|
|
});
|
|
return window.open("https://twitter.com/intent/tweet?" + o, "_blank", tt)
|
|
}
|
|
|
|
function _() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = d({
|
|
url: t.url,
|
|
title: t.title
|
|
});
|
|
return window.open("https://www.reddit.com/submit?" + e, "_blank", tt)
|
|
}
|
|
|
|
function C() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.description,
|
|
n = d({
|
|
url: t.url,
|
|
description: e,
|
|
media: t.media
|
|
});
|
|
return window.open("https://pinterest.com/pin/create/button/?" + n, "_blank", tt)
|
|
}
|
|
|
|
function x() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.url,
|
|
n = t.title,
|
|
i = t.caption,
|
|
o = t.tags,
|
|
r = void 0 === o ? [] : o,
|
|
a = t.posttype,
|
|
l = void 0 === a ? "link" : a,
|
|
s = d({
|
|
canonicalUrl: e,
|
|
title: n,
|
|
caption: i,
|
|
tags: r.join(","),
|
|
posttype: l
|
|
});
|
|
return window.open("https://www.tumblr.com/widgets/share/tool?" + s, "_blank", tt)
|
|
}
|
|
|
|
function E() {
|
|
return !!window.navigator.userAgent.match(/Version\/[\d.]+.*Safari/)
|
|
}
|
|
|
|
function S(t) {
|
|
return E() ? window.open(t) : window.location.assign(t)
|
|
}
|
|
|
|
function j() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.url,
|
|
n = t.title;
|
|
if (!e && !n) throw new Error("url and title not specified");
|
|
return S("viber://forward?" + d({
|
|
text: [n, e].filter(function(t) {
|
|
return t
|
|
}).join(" ")
|
|
}))
|
|
}
|
|
|
|
function F() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.url,
|
|
n = t.image,
|
|
i = t.isVkParse,
|
|
o = t.description,
|
|
r = t.title;
|
|
o && o.length > et && (o = o.substr(0, et) + "..."), r && r.length > et && (r = r.substr(0, et) + "...");
|
|
return "https://vk.com/share.php?" + d(i ? {
|
|
url: e
|
|
} : {
|
|
url: e,
|
|
title: r,
|
|
description: o,
|
|
image: n,
|
|
noparse: !0
|
|
})
|
|
}
|
|
|
|
function A() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
|
|
return window.open(F(t), "_blank", tt)
|
|
}
|
|
|
|
function T() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.phone,
|
|
n = d({
|
|
text: [t.title, t.url].filter(function(t) {
|
|
return t
|
|
}).join(" "),
|
|
phone: e
|
|
});
|
|
return window.open("https://api.whatsapp.com/send?" + n, "_blank", tt)
|
|
}
|
|
|
|
function z() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.title,
|
|
n = t.url,
|
|
i = d({
|
|
title: e,
|
|
summary: t.description,
|
|
url: n
|
|
});
|
|
return window.open("https://www.linkedin.com/shareArticle?mini=true&" + i, "_blank", tt)
|
|
}
|
|
|
|
function M() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.fbAppId,
|
|
n = t.url;
|
|
if (!e) throw new Error("fbAppId is not defined");
|
|
var i = d({
|
|
app_id: e,
|
|
link: n
|
|
});
|
|
return window.location.assign("fb-messenger://share?" + i)
|
|
}
|
|
|
|
function O() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
|
|
e = t.title,
|
|
n = t.url;
|
|
if (!n) throw new Error("url is not defined");
|
|
var i = encodeURIComponent("" + n);
|
|
return e && (i = "" + encodeURIComponent(e + " ") + i), window.open("https://line.me/R/msg/text/?" + i, "_blank", tt)
|
|
}
|
|
|
|
function L() {
|
|
return "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0
|
|
}
|
|
|
|
function V() {
|
|
return /Android/.test(window.navigator.userAgent) || /iP(hone|ad|od)/i.test(window.navigator.userAgent)
|
|
}
|
|
|
|
function H() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
|
|
return !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1] ? V() ? t : t.filter(function(t) {
|
|
return !it.includes(t)
|
|
}) : t
|
|
}
|
|
t = t && t.hasOwnProperty("default") ? t.default : t;
|
|
var I = function() {
|
|
return "undefined" == typeof window ? "" : window.location.href
|
|
}(),
|
|
P = {
|
|
mobileVerification: !0,
|
|
title: "Video",
|
|
url: I,
|
|
socials: ["fbFeed", "tw", "reddit", "gp", "messenger", "linkedin", "vk", "ok", "mail", "email", "telegram", "whatsapp", "viber"],
|
|
embedCode: function() {
|
|
return "<iframe src='" + I + "' width='560' height='315' frameborder='0' allowfullscreen></iframe>"
|
|
}(),
|
|
redirectUri: function() {
|
|
return I + "#close_window"
|
|
}()
|
|
},
|
|
R = function(t, e) {
|
|
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
|
|
},
|
|
U = function() {
|
|
function t(t, e) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i)
|
|
}
|
|
}
|
|
return function(e, n, i) {
|
|
return n && t(e.prototype, n), i && t(e, i), e
|
|
}
|
|
}(),
|
|
N = function(t, e) {
|
|
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
|
|
t.prototype = Object.create(e && e.prototype, {
|
|
constructor: {
|
|
value: t,
|
|
enumerable: !1,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
|
|
},
|
|
B = function(t, e) {
|
|
if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return !e || "object" != typeof e && "function" != typeof e ? t : e
|
|
},
|
|
q = function(t) {
|
|
function e(n, i) {
|
|
R(this, e);
|
|
var o = B(this, t.call(this, n, i));
|
|
return o.addClass("vjs-menu-button"), o.addClass("vjs-share-control"), o.addClass("vjs-icon-share"), o.controlText(n.localize("Share")), o
|
|
}
|
|
return N(e, t), e.prototype.handleClick = function() {
|
|
this.player().getChild("ShareOverlay").open()
|
|
}, e
|
|
}(t.getComponent("Button")),
|
|
D = ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self && self, n),
|
|
Y = e(function(t, e) {
|
|
! function(e, n) {
|
|
n(t, D)
|
|
}(0, function(t, e) {
|
|
function n(t, e) {
|
|
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
var i = function(t) {
|
|
return t && t.__esModule ? t : {
|
|
default: t
|
|
}
|
|
}(e),
|
|
o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
|
|
return typeof t
|
|
} : function(t) {
|
|
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
|
|
},
|
|
r = function() {
|
|
function t(t, e) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i)
|
|
}
|
|
}
|
|
return function(e, n, i) {
|
|
return n && t(e.prototype, n), i && t(e, i), e
|
|
}
|
|
}(),
|
|
a = function() {
|
|
function t(e) {
|
|
n(this, t), this.resolveOptions(e), this.initSelection()
|
|
}
|
|
return r(t, [{
|
|
key: "resolveOptions",
|
|
value: function() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
|
|
this.action = t.action, this.container = t.container, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = ""
|
|
}
|
|
}, {
|
|
key: "initSelection",
|
|
value: function() {
|
|
this.text ? this.selectFake() : this.target && this.selectTarget()
|
|
}
|
|
}, {
|
|
key: "selectFake",
|
|
value: function() {
|
|
var t = this,
|
|
e = "rtl" == document.documentElement.getAttribute("dir");
|
|
this.removeFake(), this.fakeHandlerCallback = function() {
|
|
return t.removeFake()
|
|
}, this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement("textarea"), this.fakeElem.style.fontSize = "12pt", this.fakeElem.style.border = "0", this.fakeElem.style.padding = "0", this.fakeElem.style.margin = "0", this.fakeElem.style.position = "absolute", this.fakeElem.style[e ? "right" : "left"] = "-9999px";
|
|
var n = window.pageYOffset || document.documentElement.scrollTop;
|
|
this.fakeElem.style.top = n + "px", this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, this.container.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText()
|
|
}
|
|
}, {
|
|
key: "removeFake",
|
|
value: function() {
|
|
this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (this.container.removeChild(this.fakeElem), this.fakeElem = null)
|
|
}
|
|
}, {
|
|
key: "selectTarget",
|
|
value: function() {
|
|
this.selectedText = (0, i.default)(this.target), this.copyText()
|
|
}
|
|
}, {
|
|
key: "copyText",
|
|
value: function() {
|
|
var t = void 0;
|
|
try {
|
|
t = document.execCommand(this.action)
|
|
} catch (e) {
|
|
t = !1
|
|
}
|
|
this.handleResult(t)
|
|
}
|
|
}, {
|
|
key: "handleResult",
|
|
value: function(t) {
|
|
this.emitter.emit(t ? "success" : "error", {
|
|
action: this.action,
|
|
text: this.selectedText,
|
|
trigger: this.trigger,
|
|
clearSelection: this.clearSelection.bind(this)
|
|
})
|
|
}
|
|
}, {
|
|
key: "clearSelection",
|
|
value: function() {
|
|
this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges()
|
|
}
|
|
}, {
|
|
key: "destroy",
|
|
value: function() {
|
|
this.removeFake()
|
|
}
|
|
}, {
|
|
key: "action",
|
|
set: function() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy";
|
|
if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"')
|
|
},
|
|
get: function() {
|
|
return this._action
|
|
}
|
|
}, {
|
|
key: "target",
|
|
set: function(t) {
|
|
if (void 0 !== t) {
|
|
if (!t || "object" !== (void 0 === t ? "undefined" : o(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element');
|
|
if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
|
|
if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
|
|
this._target = t
|
|
}
|
|
},
|
|
get: function() {
|
|
return this._target
|
|
}
|
|
}]), t
|
|
}();
|
|
t.exports = a
|
|
})
|
|
});
|
|
i.prototype = {
|
|
on: function(t, e, n) {
|
|
var i = this.e || (this.e = {});
|
|
return (i[t] || (i[t] = [])).push({
|
|
fn: e,
|
|
ctx: n
|
|
}), this
|
|
},
|
|
once: function(t, e, n) {
|
|
function i() {
|
|
o.off(t, i), e.apply(n, arguments)
|
|
}
|
|
var o = this;
|
|
return i._ = e, this.on(t, i, n)
|
|
},
|
|
emit: function(t) {
|
|
var e = [].slice.call(arguments, 1),
|
|
n = ((this.e || (this.e = {}))[t] || []).slice(),
|
|
i = 0,
|
|
o = n.length;
|
|
for (i; i < o; i++) n[i].fn.apply(n[i].ctx, e);
|
|
return this
|
|
},
|
|
off: function(t, e) {
|
|
var n = this.e || (this.e = {}),
|
|
i = n[t],
|
|
o = [];
|
|
if (i && e)
|
|
for (var r = 0, a = i.length; r < a; r++) i[r].fn !== e && i[r].fn._ !== e && o.push(i[r]);
|
|
return o.length ? n[t] = o : delete n[t], this
|
|
}
|
|
};
|
|
var W = i,
|
|
X = e(function(t, e) {
|
|
e.node = function(t) {
|
|
return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType
|
|
}, e.nodeList = function(t) {
|
|
var n = Object.prototype.toString.call(t);
|
|
return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0]))
|
|
}, e.string = function(t) {
|
|
return "string" == typeof t || t instanceof String
|
|
}, e.fn = function(t) {
|
|
return "[object Function]" === Object.prototype.toString.call(t)
|
|
}
|
|
}),
|
|
G = 9;
|
|
if ("undefined" != typeof Element && !Element.prototype.matches) {
|
|
var J = Element.prototype;
|
|
J.matches = J.matchesSelector || J.mozMatchesSelector || J.msMatchesSelector || J.oMatchesSelector || J.webkitMatchesSelector
|
|
}
|
|
var K = o,
|
|
Q = a,
|
|
Z = s,
|
|
$ = function(t) {
|
|
return t && t.__esModule ? t.default : t
|
|
}(e(function(t, e) {
|
|
! function(e, n) {
|
|
n(t, Y, W, Z)
|
|
}(0, function(t, e, n, i) {
|
|
function o(t) {
|
|
return t && t.__esModule ? t : {
|
|
default: t
|
|
}
|
|
}
|
|
|
|
function r(t, e) {
|
|
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
|
|
}
|
|
|
|
function a(t, e) {
|
|
if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return !e || "object" != typeof e && "function" != typeof e ? t : e
|
|
}
|
|
|
|
function l(t, e) {
|
|
if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
|
|
t.prototype = Object.create(e && e.prototype, {
|
|
constructor: {
|
|
value: t,
|
|
enumerable: !1,
|
|
writable: !0,
|
|
configurable: !0
|
|
}
|
|
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
|
|
}
|
|
|
|
function s(t, e) {
|
|
var n = "data-clipboard-" + t;
|
|
if (e.hasAttribute(n)) return e.getAttribute(n)
|
|
}
|
|
var c = o(e),
|
|
u = o(n),
|
|
h = o(i),
|
|
d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
|
|
return typeof t
|
|
} : function(t) {
|
|
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
|
|
},
|
|
f = function() {
|
|
function t(t, e) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i)
|
|
}
|
|
}
|
|
return function(e, n, i) {
|
|
return n && t(e.prototype, n), i && t(e, i), e
|
|
}
|
|
}(),
|
|
p = function(t) {
|
|
function e(t, n) {
|
|
r(this, e);
|
|
var i = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this));
|
|
return i.resolveOptions(n), i.listenClick(t), i
|
|
}
|
|
return l(e, t), f(e, [{
|
|
key: "resolveOptions",
|
|
value: function() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
|
|
this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === d(t.container) ? t.container : document.body
|
|
}
|
|
}, {
|
|
key: "listenClick",
|
|
value: function(t) {
|
|
var e = this;
|
|
this.listener = (0, h.default)(t, "click", function(t) {
|
|
return e.onClick(t)
|
|
})
|
|
}
|
|
}, {
|
|
key: "onClick",
|
|
value: function(t) {
|
|
var e = t.delegateTarget || t.currentTarget;
|
|
this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new c.default({
|
|
action: this.action(e),
|
|
target: this.target(e),
|
|
text: this.text(e),
|
|
container: this.container,
|
|
trigger: e,
|
|
emitter: this
|
|
})
|
|
}
|
|
}, {
|
|
key: "defaultAction",
|
|
value: function(t) {
|
|
return s("action", t)
|
|
}
|
|
}, {
|
|
key: "defaultTarget",
|
|
value: function(t) {
|
|
var e = s("target", t);
|
|
if (e) return document.querySelector(e)
|
|
}
|
|
}, {
|
|
key: "defaultText",
|
|
value: function(t) {
|
|
return s("text", t)
|
|
}
|
|
}, {
|
|
key: "destroy",
|
|
value: function() {
|
|
this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null)
|
|
}
|
|
}], [{
|
|
key: "isSupported",
|
|
value: function() {
|
|
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"],
|
|
e = "string" == typeof t ? [t] : t,
|
|
n = !!document.queryCommandSupported;
|
|
return e.forEach(function(t) {
|
|
n = n && !!document.queryCommandSupported(t)
|
|
}), n
|
|
}
|
|
}]), e
|
|
}(u.default);
|
|
t.exports = p
|
|
})
|
|
})),
|
|
tt = "scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=550, height=440, toolbar=0, status=0",
|
|
et = 80,
|
|
nt = (Object.freeze || Object)({
|
|
fbFeed: f,
|
|
fbShare: p,
|
|
fbButton: v,
|
|
gp: g,
|
|
mail: w,
|
|
email: m,
|
|
ok: y,
|
|
telegram: b,
|
|
tw: k,
|
|
reddit: _,
|
|
pinterest: C,
|
|
tumblr: x,
|
|
viber: j,
|
|
getVkUrl: F,
|
|
vk: A,
|
|
whatsapp: T,
|
|
linkedin: z,
|
|
messenger: M,
|
|
line: O
|
|
}),
|
|
it = ["whatsapp", "viber", "messenger"],
|
|
ot = {
|
|
fbFeed: '<svg width="8" height="16" viewbox="0 0 8 16" xmlns="http://www.w3.org/2000/svg">\n <path d="M5.937 2.752h1.891V.01L5.223 0c-2.893 0-3.55 2.047-3.55 3.353v1.829H0v2.824h1.673V16H5.19V8.006h2.375l.308-2.824H5.19v-1.66c0-.624.44-.77.747-.77" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
tw: '<svg width="18" height="15" viewbox="0 0 18 15" xmlns="http://www.w3.org/2000/svg">\n <path d="M0 12.616a10.657 10.657 0 0 0 5.661 1.615c6.793 0 10.507-5.476 10.507-10.223 0-.156-.003-.31-.01-.464A7.38 7.38 0 0 0 18 1.684a7.461 7.461 0 0 1-2.12.564A3.621 3.621 0 0 0 17.503.262c-.713.411-1.505.71-2.345.871A3.739 3.739 0 0 0 12.462 0C10.422 0 8.77 1.607 8.77 3.59c0 .283.033.556.096.82A10.578 10.578 0 0 1 1.254.656a3.506 3.506 0 0 0-.5 1.807c0 1.246.65 2.346 1.642 2.99a3.731 3.731 0 0 1-1.673-.45v.046c0 1.74 1.274 3.193 2.962 3.523a3.756 3.756 0 0 1-.972.126c-.239 0-.47-.022-.695-.064.469 1.428 1.833 2.467 3.449 2.494A7.531 7.531 0 0 1 .88 12.665c-.298 0-.591-.014-.881-.049" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
reddit: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewbox="0 0 24 24">\n <path d="M24 11.779a2.654 2.654 0 0 0-4.497-1.899c-1.81-1.191-4.259-1.949-6.971-2.046l1.483-4.669 4.016.941-.006.058a2.17 2.17 0 0 0 2.174 2.163c1.198 0 2.172-.97 2.172-2.163a2.171 2.171 0 0 0-4.193-.785l-4.329-1.015a.37.37 0 0 0-.44.249L11.755 7.82c-2.838.034-5.409.798-7.3 2.025a2.643 2.643 0 0 0-1.799-.712A2.654 2.654 0 0 0 0 11.779c0 .97.533 1.811 1.317 2.271a4.716 4.716 0 0 0-.086.857C1.231 18.818 6.039 22 11.95 22s10.72-3.182 10.72-7.093c0-.274-.029-.544-.075-.81A2.633 2.633 0 0 0 24 11.779zM6.776 13.595c0-.868.71-1.575 1.582-1.575.872 0 1.581.707 1.581 1.575s-.709 1.574-1.581 1.574-1.582-.706-1.582-1.574zm9.061 4.669c-.797.793-2.048 1.179-3.824 1.179L12 19.44l-.013.003c-1.777 0-3.028-.386-3.824-1.179a.369.369 0 0 1 0-.523.372.372 0 0 1 .526 0c.65.647 1.729.961 3.298.961l.013.003.013-.003c1.569 0 2.648-.315 3.298-.962a.373.373 0 0 1 .526 0 .37.37 0 0 1 0 .524zm-.189-3.095a1.58 1.58 0 0 1-1.581-1.574c0-.868.709-1.575 1.581-1.575s1.581.707 1.581 1.575-.709 1.574-1.581 1.574z" fill="#FFF" fill-rule="evenodd"/>\n</svg>\n',
|
|
gp: '<svg width="21" height="14" viewbox="0 0 21 14" xmlns="http://www.w3.org/2000/svg">\n <path d="M6.816.006C8.5-.071 10.08.646 11.37 1.655a24.11 24.11 0 0 1-1.728 1.754C8.091 2.36 5.89 2.06 4.34 3.272c-2.217 1.503-2.317 5.05-.186 6.668 2.073 1.843 5.991.928 6.564-1.895-1.298-.02-2.6 0-3.899-.042-.003-.76-.006-1.518-.003-2.278 2.17-.006 4.341-.01 6.516.007.13 1.786-.11 3.688-1.23 5.164-1.696 2.34-5.1 3.022-7.756 2.02C1.681 11.921-.207 9.161.018 6.348.077 2.905 3.305-.11 6.816.006zm10.375 3.812h1.893c.004.634.007 1.27.014 1.903.632.007 1.27.007 1.902.013v1.893l-1.902.016c-.007.636-.01 1.27-.014 1.902h-1.896c-.006-.632-.006-1.266-.013-1.899l-1.902-.02V5.735c.633-.006 1.266-.01 1.902-.013.004-.636.01-1.27.016-1.903z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
messenger: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 223 223" width="512" height="512">\n <path d="M111.5 0C50.5 0 0.8 47 0.8 104.7c0 31.1 14.5 60.3 39.7 80.3 3.3 2.6 8 2 10.5-1.2 2.6-3.2 2-8-1.2-10.5 -21.6-17.1-34-42.1-34-68.5C15.8 55.2 58.7 15 111.5 15c52.8 0 95.7 40.2 95.7 89.7 0 49.4-42.9 89.7-95.7 89.7 -9.2 0-18.3-1.2-27.1-3.6 -1.9-0.5-4-0.3-5.7 0.7l-31.1 17.6c-3.6 2-4.9 6.6-2.8 10.2 1.4 2.4 3.9 3.8 6.5 3.8 1.3 0 2.5-0.3 3.7-1l28.4-16.1c9.1 2.2 18.5 3.4 28 3.4 61.1 0 110.7-47 110.7-104.7C222.3 47 172.6 0 111.5 0z" fill="#FFF" fill-rule="evenodd"/>\n <path d="M114.7 71.9c-2.6-1.2-5.8-0.8-8 1.1l-57.9 49.1c-3.2 2.7-3.6 7.4-0.9 10.6 2.7 3.2 7.4 3.6 10.6 0.9l45.5-38.6v35.9c0 2.9 1.7 5.6 4.3 6.8 1 0.5 2.1 0.7 3.2 0.7 1.7 0 3.5-0.6 4.9-1.8l57.9-49.1c3.2-2.7 3.6-7.4 0.9-10.6 -2.7-3.2-7.4-3.6-10.6-0.9l-45.5 38.6V78.7C119 75.7 117.3 73.1 114.7 71.9z" fill="#FFF" fill-rule="evenodd"/>\n</svg>\n',
|
|
linkedin: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24">\n <path fill="#FFF" fill-rule="evenodd" d="M4.98 3.5C4.98 4.881 3.87 6 2.5 6S.02 4.881.02 3.5C.02 2.12 1.13 1 2.5 1s2.48 1.12 2.48 2.5zM5 8H0v16h5V8zm7.982 0H8.014v16h4.969v-8.399c0-4.67 6.029-5.052 6.029 0V24H24V13.869c0-7.88-8.922-7.593-11.018-3.714V8z"/>\n</svg>\n',
|
|
vk: '<svg width="22" height="12" viewbox="0 0 22 12" xmlns="http://www.w3.org/2000/svg">\n <path d="M10.764 11.94h1.315s.397-.042.6-.251c.187-.192.18-.552.18-.552s-.025-1.685.794-1.934c.807-.245 1.844 1.629 2.942 2.35.832.545 1.463.425 1.463.425l2.938-.039s1.537-.09.808-1.244c-.06-.095-.425-.855-2.184-2.415-1.843-1.633-1.596-1.37.623-4.195 1.351-1.72 1.892-2.771 1.722-3.22-.16-.43-1.154-.316-1.154-.316l-3.308.02s-.246-.033-.427.071c-.178.102-.292.34-.292.34s-.524 1.33-1.222 2.463C14.09 5.833 13.5 5.96 13.26 5.81c-.56-.346-.42-1.388-.42-2.13 0-2.315.368-3.28-.716-3.531-.36-.082-.624-.137-1.544-.146C9.4-.01 8.4.006 7.835.27c-.377.176-.668.568-.49.59.218.029.713.128.976.47.339.44.327 1.43.327 1.43s.195 2.725-.455 3.064c-.446.232-1.057-.242-2.371-2.41-.673-1.11-1.18-2.338-1.18-2.338S4.542.848 4.368.725C4.157.576 3.86.529 3.86.529L.717.549S.245.562.072.757c-.155.175-.012.536-.012.536s2.46 5.5 5.247 8.271c2.556 2.542 5.457 2.375 5.457 2.375" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
ok: '<svg width="12" height="18" viewbox="0 0 12 18" xmlns="http://www.w3.org/2000/svg">\n <path d="M6.843 8.83c2.17-.468 4.162-2.626 3.521-5.3C9.863 1.442 7.561-.599 4.742.161c-6.148 1.662-3.661 9.912 2.1 8.668zm-1.6-6.458c1.39-.375 2.504.554 2.788 1.57.363 1.305-.592 2.394-1.618 2.657-2.913.747-4.16-3.43-1.17-4.227zM9.05 9.536c.41-.23.748-.608 1.367-.577.832.044 2.514 1.404-.445 2.824-1.624.778-1.699.558-2.972.926.22.411 2.55 2.453 3.214 3.082 1.103 1.046.164 2.234-.967 2.115-.718-.077-2.971-2.352-3.38-2.82-.92.438-2.541 2.674-3.431 2.81-1.175.182-2.155-1.091-.96-2.19L4.65 12.73c-.287-.145-1.171-.261-1.59-.389C-1.57 10.93.08 8.838 1.405 8.963c.478.046.907.42 1.274.621 1.931 1.05 4.463 1.029 6.37-.048z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
mail: '<svg width="17" height="16" viewbox="0 0 17 16" xmlns="http://www.w3.org/2000/svg">\n <path d="M8.205 3.322c1.3 0 2.521.563 3.418 1.445v.003c0-.423.29-.742.694-.742l.101-.001c.631 0 .76.586.76.771l.004 6.584c-.045.431.454.653.73.377 1.077-1.086 2.366-5.585-.67-8.192-2.831-2.43-6.629-2.03-8.649-.664-2.146 1.453-3.52 4.668-2.185 7.688 1.455 3.294 5.617 4.276 8.091 3.296 1.253-.496 1.832 1.165.53 1.708-1.965.822-7.438.74-9.994-3.605C-.692 9.057-.6 3.896 3.98 1.222c3.505-2.046 8.125-1.48 10.91 1.374 2.913 2.985 2.743 8.572-.097 10.745-1.288.986-3.199.025-3.187-1.413l-.013-.47a4.827 4.827 0 0 1-3.388 1.381c-2.566 0-4.825-2.215-4.825-4.733 0-2.543 2.259-4.784 4.825-4.784zm3.231 4.602C11.34 6.08 9.944 4.97 8.26 4.97h-.063c-1.945 0-3.023 1.5-3.023 3.204 0 1.908 1.305 3.113 3.015 3.113 1.907 0 3.162-1.37 3.252-2.992l-.004-.372z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
email: '<svg width="17" height="16" viewbox="0 0 17 16" xmlns="http://www.w3.org/2000/svg">\n <path d="M8.205 3.322c1.3 0 2.521.563 3.418 1.445v.003c0-.423.29-.742.694-.742l.101-.001c.631 0 .76.586.76.771l.004 6.584c-.045.431.454.653.73.377 1.077-1.086 2.366-5.585-.67-8.192-2.831-2.43-6.629-2.03-8.649-.664-2.146 1.453-3.52 4.668-2.185 7.688 1.455 3.294 5.617 4.276 8.091 3.296 1.253-.496 1.832 1.165.53 1.708-1.965.822-7.438.74-9.994-3.605C-.692 9.057-.6 3.896 3.98 1.222c3.505-2.046 8.125-1.48 10.91 1.374 2.913 2.985 2.743 8.572-.097 10.745-1.288.986-3.199.025-3.187-1.413l-.013-.47a4.827 4.827 0 0 1-3.388 1.381c-2.566 0-4.825-2.215-4.825-4.733 0-2.543 2.259-4.784 4.825-4.784zm3.231 4.602C11.34 6.08 9.944 4.97 8.26 4.97h-.063c-1.945 0-3.023 1.5-3.023 3.204 0 1.908 1.305 3.113 3.015 3.113 1.907 0 3.162-1.37 3.252-2.992l-.004-.372z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
telegram: '<svg width="21" height="17" viewbox="0 0 21 17" xmlns="http://www.w3.org/2000/svg">\n <path d="M10.873 13.323c-.784.757-1.56 1.501-2.329 2.252-.268.262-.57.407-.956.387-.263-.014-.41-.13-.49-.378-.589-1.814-1.187-3.626-1.773-5.44a.425.425 0 0 0-.322-.317A417.257 417.257 0 0 1 .85 8.541a2.37 2.37 0 0 1-.59-.265c-.309-.203-.353-.527-.07-.762.26-.216.57-.397.886-.522C2.828 6.304 4.59 5.638 6.35 4.964L19.039.101c.812-.311 1.442.12 1.366.988-.05.572-.2 1.137-.32 1.702-.938 4.398-1.88 8.794-2.82 13.191l-.003.026c-.23 1.006-.966 1.28-1.806.668-1.457-1.065-2.91-2.134-4.366-3.201-.068-.05-.14-.098-.217-.152zm-3.22 1.385c.023-.103.038-.151.043-.2.092-.989.189-1.977.27-2.967a.732.732 0 0 1 .256-.534c2.208-1.968 4.41-3.943 6.613-5.917.626-.561 1.256-1.12 1.876-1.688.065-.06.08-.174.117-.263-.095-.027-.203-.095-.285-.072-.189.052-.38.127-.545.23C12.722 5.343 9.45 7.395 6.175 9.44c-.167.104-.214.19-.147.389.518 1.547 1.022 3.098 1.531 4.648.02.061.048.12.094.23z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
whatsapp: '<svg width="22" height="22" viewbox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">\n <path d="M7.926 5.587c-.213-.51-.375-.53-.698-.543a6.234 6.234 0 0 0-.369-.013c-.42 0-.86.123-1.125.395-.323.33-1.125 1.1-1.125 2.677 0 1.578 1.15 3.104 1.306 3.318.162.213 2.244 3.498 5.476 4.837 2.528 1.048 3.278.95 3.853.828.84-.181 1.894-.802 2.16-1.552.265-.75.265-1.39.187-1.527-.078-.135-.291-.213-.614-.375-.323-.161-1.894-.937-2.192-1.04-.29-.11-.569-.072-.788.239-.31.433-.614.873-.86 1.138-.194.207-.511.233-.776.123-.356-.149-1.351-.498-2.58-1.591-.95-.847-1.596-1.901-1.784-2.218-.187-.323-.02-.511.13-.685.161-.201.316-.343.478-.53.161-.188.252-.285.355-.505.11-.214.033-.434-.045-.595-.078-.162-.724-1.74-.99-2.38zM10.996 0C4.934 0 0 4.934 0 11c0 2.405.776 4.636 2.095 6.447L.724 21.534l4.228-1.351A10.913 10.913 0 0 0 11.003 22C17.067 22 22 17.066 22 11S17.067 0 11.003 0h-.006z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n',
|
|
viber: '<svg width="21" height="21" viewbox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">\n <path d="M18.639 14.904c-.628-.506-1.3-.96-1.96-1.423-1.318-.926-2.523-.997-3.506.491-.552.836-1.325.873-2.133.506-2.228-1.01-3.949-2.567-4.956-4.831-.446-1.002-.44-1.9.603-2.609.552-.375 1.108-.818 1.064-1.637C7.693 4.334 5.1.765 4.077.39 3.653.233 3.23.243 2.8.388.4 1.195-.594 3.169.358 5.507c2.84 6.974 7.84 11.829 14.721 14.792.392.169.828.236 1.049.297 1.567.015 3.402-1.494 3.932-2.992.51-1.441-.568-2.013-1.421-2.7zm-7.716-13.8c-.417-.064-1.052.026-1.02-.525.046-.817.8-.513 1.165-.565 4.833.163 8.994 4.587 8.935 9.359-.006.468.162 1.162-.536 1.149-.668-.013-.493-.717-.553-1.185-.64-5.067-2.96-7.46-7.991-8.233zm.984 1.39c3.104.372 5.64 3.065 5.615 6.024-.047.35.157.95-.409 1.036-.764.116-.615-.583-.69-1.033-.511-3.082-1.593-4.213-4.7-4.907-.458-.102-1.17-.03-1.052-.736.113-.671.752-.443 1.236-.385zm.285 2.419c1.377-.034 2.992 1.616 2.969 3.044.014.39-.028.802-.49.857-.333.04-.552-.24-.586-.585-.128-1.272-.798-2.023-2.073-2.228-.382-.061-.757-.184-.579-.7.12-.345.436-.38.76-.388z" fill="#FFF" fill-rule="evenodd"></path>\n</svg>\n'
|
|
},
|
|
rt = function() {
|
|
function t(e, n) {
|
|
R(this, t), this.player = e, this.options = n, this.socials = H(n.socials, n.mobileVerification), this.copyBtnTextClass = "vjs-share__btn-text", this.socialBtnClass = "vjs-share__social", this._createContent(), this._initToggle(), this._initClipboard(), this._initSharing()
|
|
}
|
|
return t.prototype.getContent = function() {
|
|
return this.content
|
|
}, t.prototype._createContent = function() {
|
|
var t = '\n <svg xmlns="http://www.w3.org/2000/svg" width="18" height="20">\n <path fill="#FFF" fill-rule="evenodd" d="M10.07 20H1.318A1.325 1.325 0 0 1 0 18.67V6.025c0-.712.542-1.21 1.318-1.21h7.294l2.776 2.656v11.2c0 .734-.59 1.33-1.318 1.33zm6.46-15.926v9.63h-3.673v1.48h3.825c.727 0 1.318-.595 1.318-1.328v-11.2L15.225 0H7.93c-.776 0-1.318.497-1.318 1.21v2.123h1.47V1.48h5.877v2.594h2.57zm-.73-1.48l-.37-.357v.356h.37zM9.918 8.888v9.63H1.47V6.295h5.878V8.89h2.57zm-.73-1.483l-.372-.355v.355h.37z"></path>\n </svg>\n <span class="' + this.copyBtnTextClass + '">' + this.player.localize("Copy") + "</span>\n ",
|
|
e = document.createElement("div"),
|
|
n = "";
|
|
this.options.embedCode && (n = '\n <div class="vjs-share__subtitle hidden-xs">' + this.player.localize("Embed Code") + ':</div>\n <div class="vjs-share__short-link-wrapper hidden-xs">\n <input class="vjs-share__short-link" type="text" readonly="true" value="' + this.options.embedCode + '">\n <div class="vjs-share__btn">\n ' + t + "\n </div>\n </div>"), e.innerHTML = '<div class="vjs-share">\n <div class="vjs-share__top hidden-sm">\n <div class="vjs-share__title">' + this.player.localize("Share") + '</div>\n </div>\n\n <div class="vjs-share__middle">\n <div class="vjs-share__subtitle hidden-xs">' + this.player.localize("Direct Link") + ':</div>\n <div class="vjs-share__short-link-wrapper">\n <input class="vjs-share__short-link" type="text" readonly="true" value="' + this.options.url + '">\n <div class="vjs-share__btn">\n ' + t + "\n </div>\n </div>\n\n " + n + '\n </div>\n\n <div class="vjs-share__bottom">\n <div class="vjs-share__socials">\n ' + this._getSocialItems().join("") + "\n </div>\n </div>\n </div>", this.content = e.firstChild
|
|
}, t.prototype._initClipboard = function() {
|
|
var t = this;
|
|
new $(".vjs-share__btn", {
|
|
target: function(t) {
|
|
return t.previousElementSibling
|
|
}
|
|
}).on("success", function(e) {
|
|
var n = e.trigger.querySelector("." + t.copyBtnTextClass),
|
|
i = function() {
|
|
n.innerText = t.player.localize("Copy"), e.clearSelection()
|
|
};
|
|
n.innerText = t.player.localize("Copied"), L() ? setTimeout(i, 1e3) : n.parentElement.addEventListener("mouseleave", function() {
|
|
setTimeout(i, 300)
|
|
})
|
|
})
|
|
}, t.prototype._initSharing = function() {
|
|
var t = this,
|
|
e = this.content.querySelectorAll("." + this.socialBtnClass);
|
|
Array.from(e).forEach(function(e) {
|
|
e.addEventListener("click", function(e) {
|
|
var n = e.currentTarget.getAttribute("data-social"),
|
|
i = nt[n];
|
|
"function" == typeof i && i(t.socialOptions)
|
|
})
|
|
})
|
|
}, t.prototype._initToggle = function() {
|
|
var t = this.content.querySelector(".vjs-share__socials");
|
|
this.socials.length > 10 || window.innerWidth <= 180 && this.socials.length > 6 ? t.style.height = "calc((2em + 5px) * 2)" : t.classList.add("horizontal")
|
|
}, t.prototype._getSocialItems = function() {
|
|
var t = [];
|
|
return this.socials.forEach(function(e) {
|
|
ot[e] && t.push('\n <button class="vjs-share__social vjs-share__social_' + e + '" data-social="' + e + '">\n ' + ot[e] + "\n </button>\n ")
|
|
}), t
|
|
}, U(t, [{
|
|
key: "socialOptions",
|
|
get: function() {
|
|
var t = this.options;
|
|
return {
|
|
url: t.url,
|
|
title: t.title,
|
|
description: t.description,
|
|
image: t.image,
|
|
fbAppId: t.fbAppId,
|
|
isVkParse: t.isVkParse,
|
|
redirectUri: t.redirectUri
|
|
}
|
|
}
|
|
}]), t
|
|
}(),
|
|
at = function(t) {
|
|
function e(n, i) {
|
|
R(this, e);
|
|
var o = B(this, t.call(this, n, i));
|
|
return o.playerClassName = "vjs-videojs-share_open", o
|
|
}
|
|
return N(e, t), e.prototype.open = function() {
|
|
var e = this.player();
|
|
e.addClass(this.playerClassName), t.prototype.open.call(this), e.trigger("sharing:opened")
|
|
}, e.prototype.close = function() {
|
|
var e = this.player();
|
|
e.removeClass(this.playerClassName), t.prototype.close.call(this), e.trigger("sharing:closed")
|
|
}, e
|
|
}(t.getComponent("ModalDialog")),
|
|
lt = function(t) {
|
|
function e(n, i) {
|
|
R(this, e);
|
|
var o = B(this, t.call(this, n, i));
|
|
return o.player = n, o.options = i, o
|
|
}
|
|
return N(e, t), e.prototype._createModal = function() {
|
|
var t = new rt(this.player, this.options).getContent();
|
|
this.modal = new at(this.player, {
|
|
content: t,
|
|
temporary: !0
|
|
}), this.el = this.modal.contentEl(), this.player.addChild(this.modal)
|
|
}, e.prototype.open = function() {
|
|
this._createModal(), this.modal.open()
|
|
}, e
|
|
}(t.getComponent("Component")),
|
|
st = function(e) {
|
|
function n(i, o) {
|
|
R(this, n);
|
|
var r = B(this, e.call(this, i));
|
|
return r.options = t.mergeOptions(P, o), r.player.ready(function() {
|
|
r.player.addClass("vjs-share"), i.addClass("vjs-videojs-share"), i.getChild("controlBar").addChild("ShareButton", o), i.addChild("ShareOverlay", o)
|
|
}), r
|
|
}
|
|
return N(n, e), n
|
|
}(t.getPlugin("plugin"));
|
|
return st.defaultState = {}, st.VERSION = "3.2.1", t.registerComponent("ShareButton", q), t.registerComponent("ShareOverlay", lt), t.registerPlugin("share", st), st
|
|
});
|
|
/**
|
|
* videojs-watermark
|
|
* @version 2.0.0
|
|
* @copyright 2017 Brooks Lyrette <brooks@dotsub.com>
|
|
* @license Apache-2.0
|
|
*/
|
|
! function(e) {
|
|
if ("object" == typeof exports && "undefined" != typeof module) module.exports = e();
|
|
else if ("function" == typeof define && define.amd) define([], e);
|
|
else {
|
|
var n;
|
|
n = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, n.videojsWatermark = e()
|
|
}
|
|
}(function() {
|
|
return function e(n, t, i) {
|
|
function o(d, a) {
|
|
if (!t[d]) {
|
|
if (!n[d]) {
|
|
var f = "function" == typeof require && require;
|
|
if (!a && f) return f(d, !0);
|
|
if (r) return r(d, !0);
|
|
var u = new Error("Cannot find module '" + d + "'");
|
|
throw u.code = "MODULE_NOT_FOUND", u
|
|
}
|
|
var l = t[d] = {
|
|
exports: {}
|
|
};
|
|
n[d][0].call(l.exports, function(e) {
|
|
var t = n[d][1][e];
|
|
return o(t || e)
|
|
}, l, l.exports, e, n, t, i)
|
|
}
|
|
return t[d].exports
|
|
}
|
|
for (var r = "function" == typeof require && require, d = 0; d < i.length; d++) o(i[d]);
|
|
return o
|
|
}({
|
|
1: [function(e, n, t) {
|
|
(function(e) {
|
|
"use strict";
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: !0
|
|
});
|
|
var i = "undefined" != typeof window ? window.videojs : void 0 !== e ? e.videojs : null,
|
|
o = function(e) {
|
|
return e && e.__esModule ? e : {
|
|
default: e
|
|
}
|
|
}(i),
|
|
r = {
|
|
position: "top-right",
|
|
fadeTime: 3e3,
|
|
url: void 0,
|
|
image: void 0
|
|
},
|
|
d = function(e, n) {
|
|
var t = e.el(),
|
|
i = document.createElement("div"),
|
|
o = document.createElement("img");
|
|
if (i.classList.add("vjs-watermark-content"), i.classList.add("vjs-watermark-" + n.position), o.src = n.image, n.url) {
|
|
var r = document.createElement("a");
|
|
r.href = n.url, r.onclick = function(t) {
|
|
t.preventDefault(), e.pause(), window.open(n.url)
|
|
}, r.appendChild(o), i.appendChild(r)
|
|
} else i.appendChild(o);
|
|
t.appendChild(i)
|
|
},
|
|
a = function(e) {
|
|
setTimeout(function() {
|
|
return document.getElementsByClassName("vjs-watermark-content")[0].classList.add("vjs-watermark-fade")
|
|
}, e.fadeTime)
|
|
},
|
|
f = function(e, n) {
|
|
e.addClass("vjs-watermark"), n.image && (d(e, n), null !== n.fadeTime && e.on("play", function() {
|
|
return a(n)
|
|
}))
|
|
},
|
|
u = function(e) {
|
|
var n = this;
|
|
this.ready(function() {
|
|
f(n, o.default.mergeOptions(r, e))
|
|
})
|
|
};
|
|
o.default.registerPlugin("watermark", u), u.VERSION = "2.0.0", t.default = u, n.exports = t.default
|
|
}).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
|
|
}, {}]
|
|
}, {}, [1])(1)
|
|
});
|
|
/*! @name videojs-vr @version 1.10.1 @license MIT */
|
|
! function(t, e) {
|
|
"object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("global/window"), require("global/document"), require("video.js")) : "function" == typeof define && define.amd ? define(["global/window", "global/document", "video.js"], e) : (t = t || self).videojsVr = e(t.window, t.document, t.videojs)
|
|
}(this, (function(t, e, n) {
|
|
"use strict";
|
|
t = t && t.hasOwnProperty("default") ? t.default : t, e = e && e.hasOwnProperty("default") ? e.default : e, n = n && n.hasOwnProperty("default") ? n.default : n;
|
|
var i = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};
|
|
|
|
function r(t) {
|
|
return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t
|
|
}
|
|
|
|
function o(t, e) {
|
|
return t(e = {
|
|
exports: {}
|
|
}, e.exports), e.exports
|
|
}
|
|
var s = r(o((function(t) {
|
|
t.exports = function(t) {
|
|
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
return t
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
}))),
|
|
a = o((function(t) {
|
|
function e(n, i) {
|
|
return t.exports = e = Object.setPrototypeOf || function(t, e) {
|
|
return t.__proto__ = e, t
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0, e(n, i)
|
|
}
|
|
t.exports = e, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
}));
|
|
r(a);
|
|
var l = r(o((function(t) {
|
|
t.exports = function(t, e) {
|
|
t.prototype = Object.create(e.prototype), t.prototype.constructor = t, a(t, e)
|
|
}, t.exports.default = t.exports, t.exports.__esModule = !0
|
|
}))),
|
|
c = r(o((function(t, e) {
|
|
/**
|
|
* @license
|
|
* webvr-polyfill
|
|
* Copyright (c) 2015-2017 Google
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @license
|
|
* cardboard-vr-display
|
|
* Copyright (c) 2015-2017 Google
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @license
|
|
* webvr-polyfill-dpdb
|
|
* Copyright (c) 2017 Google
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @license
|
|
* wglu-preserve-state
|
|
* Copyright (c) 2016, Brandon Jones.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
/**
|
|
* @license
|
|
* nosleep.js
|
|
* Copyright (c) 2017, Rich Tibbett
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
t.exports = function() {
|
|
var t, e = "undefined" != typeof window ? window : void 0 !== i ? i : "undefined" != typeof self ? self : {},
|
|
n = function() {
|
|
return /Android/i.test(navigator.userAgent) || /iPhone|iPad|iPod/i.test(navigator.userAgent)
|
|
},
|
|
r = function(t, e) {
|
|
for (var n = 0, i = t.length; n < i; n++) e[n] = t[n]
|
|
},
|
|
o = function(t, e) {
|
|
for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
|
|
return t
|
|
},
|
|
s = (t = function(t, e) {
|
|
return t(e = {
|
|
exports: {}
|
|
}, e.exports), e.exports
|
|
}((function(t, n) {
|
|
/**
|
|
* @license
|
|
* cardboard-vr-display
|
|
* Copyright (c) 2015-2017 Google
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @license
|
|
* gl-preserve-state
|
|
* Copyright (c) 2016, Brandon Jones.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
/**
|
|
* @license
|
|
* webvr-polyfill-dpdb
|
|
* Copyright (c) 2015-2017 Google
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @license
|
|
* nosleep.js
|
|
* Copyright (c) 2017, Rich Tibbett
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
t.exports = function() {
|
|
var t, n, i, r = function() {
|
|
function t(t, e) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i)
|
|
}
|
|
}
|
|
return function(e, n, i) {
|
|
return n && t(e.prototype, n), i && t(e, i), e
|
|
}
|
|
}(),
|
|
o = function(t, e) {
|
|
if (Array.isArray(t)) return t;
|
|
if (Symbol.iterator in Object(t)) return function(t, e) {
|
|
var n = [],
|
|
i = !0,
|
|
r = !1,
|
|
o = void 0;
|
|
try {
|
|
for (var s, a = t[Symbol.iterator](); !(i = (s = a.next()).done) && (n.push(s.value), !e || n.length !== e); i = !0);
|
|
} catch (t) {
|
|
r = !0, o = t
|
|
} finally {
|
|
try {
|
|
!i && a.return && a.return()
|
|
} finally {
|
|
if (r) throw o
|
|
}
|
|
}
|
|
return n
|
|
}(t, e);
|
|
throw new TypeError("Invalid attempt to destructure non-iterable instance")
|
|
},
|
|
s = function(t, e, n) {
|
|
return t + (e - t) * n
|
|
},
|
|
a = function() {
|
|
var t = /iPad|iPhone|iPod/.test(navigator.platform);
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
l = function() {
|
|
var t = -1 !== navigator.userAgent.indexOf("Version") && -1 !== navigator.userAgent.indexOf("Android") && -1 !== navigator.userAgent.indexOf("Chrome");
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
c = function() {
|
|
var t = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
h = function() {
|
|
var t = -1 !== navigator.userAgent.indexOf("Firefox") && -1 !== navigator.userAgent.indexOf("Android");
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
u = (n = navigator.userAgent.match(/.*Chrome\/([0-9]+)/), i = n ? parseInt(n[1], 10) : null, function() {
|
|
return i
|
|
}),
|
|
d = function() {
|
|
var t;
|
|
return t = a() && c() && -1 !== navigator.userAgent.indexOf("13_4"),
|
|
function() {
|
|
return t
|
|
}
|
|
}(),
|
|
p = function() {
|
|
var t = !1;
|
|
if (65 === u()) {
|
|
var e = navigator.userAgent.match(/.*Chrome\/([0-9\.]*)/);
|
|
if (e) {
|
|
var n = e[1].split("."),
|
|
i = o(n, 4),
|
|
r = (i[0], i[1], i[2]),
|
|
s = i[3];
|
|
t = 3325 === parseInt(r, 10) && parseInt(s, 10) < 148
|
|
}
|
|
}
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
f = function() {
|
|
var t = -1 !== navigator.userAgent.indexOf("R7 Build");
|
|
return function() {
|
|
return t
|
|
}
|
|
}(),
|
|
m = function() {
|
|
var t = 90 == window.orientation || -90 == window.orientation;
|
|
return f() ? !t : t
|
|
},
|
|
g = function() {
|
|
return Math.max(window.screen.width, window.screen.height) * window.devicePixelRatio
|
|
},
|
|
v = function() {
|
|
return Math.min(window.screen.width, window.screen.height) * window.devicePixelRatio
|
|
},
|
|
y = function() {
|
|
if (document.exitFullscreen) document.exitFullscreen();
|
|
else if (document.webkitExitFullscreen) document.webkitExitFullscreen();
|
|
else if (document.mozCancelFullScreen) document.mozCancelFullScreen();
|
|
else {
|
|
if (!document.msExitFullscreen) return !1;
|
|
document.msExitFullscreen()
|
|
}
|
|
return !0
|
|
},
|
|
A = function(t, e, n, i) {
|
|
var r = t.createShader(t.VERTEX_SHADER);
|
|
t.shaderSource(r, e), t.compileShader(r);
|
|
var o = t.createShader(t.FRAGMENT_SHADER);
|
|
t.shaderSource(o, n), t.compileShader(o);
|
|
var s = t.createProgram();
|
|
for (var a in t.attachShader(s, r), t.attachShader(s, o), i) t.bindAttribLocation(s, i[a], a);
|
|
return t.linkProgram(s), t.deleteShader(r), t.deleteShader(o), s
|
|
},
|
|
x = function(t, e) {
|
|
for (var n = {}, i = t.getProgramParameter(e, t.ACTIVE_UNIFORMS), r = "", o = 0; o < i; o++) n[r = t.getActiveUniform(e, o).name.replace("[0]", "")] = t.getUniformLocation(e, r);
|
|
return n
|
|
},
|
|
_ = function() {
|
|
var t, e = !1;
|
|
return t = navigator.userAgent || navigator.vendor || window.opera, (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0, 4))) && (e = !0), e
|
|
},
|
|
b = function(t, e) {
|
|
for (var n in e) e.hasOwnProperty(n) && (t[n] = e[n]);
|
|
return t
|
|
},
|
|
w = function(t) {
|
|
if (a()) {
|
|
var e = t.style.width,
|
|
n = t.style.height;
|
|
t.style.width = parseInt(e) + 1 + "px", t.style.height = parseInt(n) + "px", setTimeout((function() {
|
|
t.style.width = e, t.style.height = n
|
|
}), 100)
|
|
}
|
|
window.canvas = t
|
|
},
|
|
M = function() {
|
|
var t = Math.PI / 180,
|
|
e = .25 * Math.PI,
|
|
n = new Float32Array([0, 0, 0, 1]),
|
|
i = new Float32Array([0, 0, 0]);
|
|
|
|
function r(r, o, s, a, l, c) {
|
|
! function(n, i, r, o) {
|
|
var s = Math.tan(i ? i.upDegrees * t : e),
|
|
a = Math.tan(i ? i.downDegrees * t : e),
|
|
l = Math.tan(i ? i.leftDegrees * t : e),
|
|
c = Math.tan(i ? i.rightDegrees * t : e),
|
|
h = 2 / (l + c),
|
|
u = 2 / (s + a);
|
|
n[0] = h, n[1] = 0, n[2] = 0, n[3] = 0, n[4] = 0, n[5] = u, n[6] = 0, n[7] = 0, n[8] = -(l - c) * h * .5, n[9] = (s - a) * u * .5, n[10] = o / (r - o), n[11] = -1, n[12] = 0, n[13] = 0, n[14] = o * r / (r - o), n[15] = 0
|
|
}(r, a || null, c.depthNear, c.depthFar);
|
|
var h, u, d, p, f, m, g, v, y, A, x, _, b, w, M, E, S, T, L, R = s.orientation || n,
|
|
C = s.position || i;
|
|
h = o, d = C, p = (u = R)[0], f = u[1], m = u[2], g = u[3], x = p * (v = p + p), _ = p * (y = f + f), b = p * (A = m + m), w = f * y, M = f * A, E = m * A, S = g * v, T = g * y, L = g * A, h[0] = 1 - (w + E), h[1] = _ + L, h[2] = b - T, h[3] = 0, h[4] = _ - L, h[5] = 1 - (x + E), h[6] = M + S, h[7] = 0, h[8] = b + T, h[9] = M - S, h[10] = 1 - (x + w), h[11] = 0, h[12] = d[0], h[13] = d[1], h[14] = d[2], h[15] = 1, l && function(t, e, n) {
|
|
var i, r, o, s, a, l, c, h, u, d, p, f, m = n[0],
|
|
g = n[1],
|
|
v = n[2];
|
|
e === t ? (t[12] = e[0] * m + e[4] * g + e[8] * v + e[12], t[13] = e[1] * m + e[5] * g + e[9] * v + e[13], t[14] = e[2] * m + e[6] * g + e[10] * v + e[14], t[15] = e[3] * m + e[7] * g + e[11] * v + e[15]) : (i = e[0], r = e[1], o = e[2], s = e[3], a = e[4], l = e[5], c = e[6], h = e[7], u = e[8], d = e[9], p = e[10], f = e[11], t[0] = i, t[1] = r, t[2] = o, t[3] = s, t[4] = a, t[5] = l, t[6] = c, t[7] = h, t[8] = u, t[9] = d, t[10] = p, t[11] = f, t[12] = i * m + a * g + u * v + e[12], t[13] = r * m + l * g + d * v + e[13], t[14] = o * m + c * g + p * v + e[14], t[15] = s * m + h * g + f * v + e[15])
|
|
}(o, o, l),
|
|
function(t, e) {
|
|
var n = e[0],
|
|
i = e[1],
|
|
r = e[2],
|
|
o = e[3],
|
|
s = e[4],
|
|
a = e[5],
|
|
l = e[6],
|
|
c = e[7],
|
|
h = e[8],
|
|
u = e[9],
|
|
d = e[10],
|
|
p = e[11],
|
|
f = e[12],
|
|
m = e[13],
|
|
g = e[14],
|
|
v = e[15],
|
|
y = n * a - i * s,
|
|
A = n * l - r * s,
|
|
x = n * c - o * s,
|
|
_ = i * l - r * a,
|
|
b = i * c - o * a,
|
|
w = r * c - o * l,
|
|
M = h * m - u * f,
|
|
E = h * g - d * f,
|
|
S = h * v - p * f,
|
|
T = u * g - d * m,
|
|
L = u * v - p * m,
|
|
R = d * v - p * g,
|
|
C = y * R - A * L + x * T + _ * S - b * E + w * M;
|
|
C && (C = 1 / C, t[0] = (a * R - l * L + c * T) * C, t[1] = (r * L - i * R - o * T) * C, t[2] = (m * w - g * b + v * _) * C, t[3] = (d * b - u * w - p * _) * C, t[4] = (l * S - s * R - c * E) * C, t[5] = (n * R - r * S + o * E) * C, t[6] = (g * x - f * w - v * A) * C, t[7] = (h * w - d * x + p * A) * C, t[8] = (s * L - a * S + c * M) * C, t[9] = (i * S - n * L - o * M) * C, t[10] = (f * b - m * x + v * y) * C, t[11] = (u * x - h * b - p * y) * C, t[12] = (a * E - s * T - l * M) * C, t[13] = (n * T - i * E + r * M) * C, t[14] = (m * A - f * _ - g * y) * C, t[15] = (h * _ - u * A + d * y) * C)
|
|
}(o, o)
|
|
}
|
|
return function(t, e, n) {
|
|
return !(!t || !e || (t.pose = e, t.timestamp = e.timestamp, r(t.leftProjectionMatrix, t.leftViewMatrix, e, n._getFieldOfView("left"), n._getEyeOffset("left"), n), r(t.rightProjectionMatrix, t.rightViewMatrix, e, n._getFieldOfView("right"), n._getEyeOffset("right"), n), 0))
|
|
}
|
|
}(),
|
|
E = function(t) {
|
|
var e, n = t.indexOf("://");
|
|
e = -1 !== n ? n + 3 : 0;
|
|
var i = t.indexOf("/", e);
|
|
return -1 === i && (i = t.length), t.substring(0, i)
|
|
},
|
|
S = (t = {}, function(e, n) {
|
|
void 0 === t[e] && (console.warn("webvr-polyfill: " + n), t[e] = !0)
|
|
}),
|
|
T = function(t, e) {
|
|
S(t, t + " has been deprecated. This may not work on native WebVR displays. " + (e ? "Please use " + e + " instead." : ""))
|
|
},
|
|
L = function(t, e, n) {
|
|
if (e) {
|
|
for (var i = [], r = null, o = 0; o < e.length; ++o) switch (s = e[o]) {
|
|
case t.TEXTURE_BINDING_2D:
|
|
case t.TEXTURE_BINDING_CUBE_MAP:
|
|
if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) {
|
|
console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"), i.push(null, null);
|
|
break
|
|
}
|
|
r || (r = t.getParameter(t.ACTIVE_TEXTURE)), t.activeTexture(l), i.push(t.getParameter(s), null);
|
|
break;
|
|
case t.ACTIVE_TEXTURE:
|
|
r = t.getParameter(t.ACTIVE_TEXTURE), i.push(null);
|
|
break;
|
|
default:
|
|
i.push(t.getParameter(s))
|
|
}
|
|
for (n(t), o = 0; o < e.length; ++o) {
|
|
var s = e[o],
|
|
a = i[o];
|
|
switch (s) {
|
|
case t.ACTIVE_TEXTURE:
|
|
break;
|
|
case t.ARRAY_BUFFER_BINDING:
|
|
t.bindBuffer(t.ARRAY_BUFFER, a);
|
|
break;
|
|
case t.COLOR_CLEAR_VALUE:
|
|
t.clearColor(a[0], a[1], a[2], a[3]);
|
|
break;
|
|
case t.COLOR_WRITEMASK:
|
|
t.colorMask(a[0], a[1], a[2], a[3]);
|
|
break;
|
|
case t.CURRENT_PROGRAM:
|
|
t.useProgram(a);
|
|
break;
|
|
case t.ELEMENT_ARRAY_BUFFER_BINDING:
|
|
t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, a);
|
|
break;
|
|
case t.FRAMEBUFFER_BINDING:
|
|
t.bindFramebuffer(t.FRAMEBUFFER, a);
|
|
break;
|
|
case t.RENDERBUFFER_BINDING:
|
|
t.bindRenderbuffer(t.RENDERBUFFER, a);
|
|
break;
|
|
case t.TEXTURE_BINDING_2D:
|
|
if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break;
|
|
t.activeTexture(l), t.bindTexture(t.TEXTURE_2D, a);
|
|
break;
|
|
case t.TEXTURE_BINDING_CUBE_MAP:
|
|
var l;
|
|
if ((l = e[++o]) < t.TEXTURE0 || l > t.TEXTURE31) break;
|
|
t.activeTexture(l), t.bindTexture(t.TEXTURE_CUBE_MAP, a);
|
|
break;
|
|
case t.VIEWPORT:
|
|
t.viewport(a[0], a[1], a[2], a[3]);
|
|
break;
|
|
case t.BLEND:
|
|
case t.CULL_FACE:
|
|
case t.DEPTH_TEST:
|
|
case t.SCISSOR_TEST:
|
|
case t.STENCIL_TEST:
|
|
a ? t.enable(s) : t.disable(s);
|
|
break;
|
|
default:
|
|
console.log("No GL restore behavior for 0x" + s.toString(16))
|
|
}
|
|
r && t.activeTexture(r)
|
|
}
|
|
} else n(t)
|
|
},
|
|
R = ["attribute vec2 position;", "attribute vec3 texCoord;", "varying vec2 vTexCoord;", "uniform vec4 viewportOffsetScale[2];", "void main() {", " vec4 viewport = viewportOffsetScale[int(texCoord.z)];", " vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;", " gl_Position = vec4( position, 1.0, 1.0 );", "}"].join("\n"),
|
|
C = ["precision mediump float;", "uniform sampler2D diffuse;", "varying vec2 vTexCoord;", "void main() {", " gl_FragColor = texture2D(diffuse, vTexCoord);", "}"].join("\n");
|
|
|
|
function P(t, e, n, i) {
|
|
this.gl = t, this.cardboardUI = e, this.bufferScale = n, this.dirtySubmitFrameBindings = i, this.ctxAttribs = t.getContextAttributes(), this.instanceExt = t.getExtension("ANGLE_instanced_arrays"), this.meshWidth = 20, this.meshHeight = 20, this.bufferWidth = t.drawingBufferWidth, this.bufferHeight = t.drawingBufferHeight, this.realBindFramebuffer = t.bindFramebuffer, this.realEnable = t.enable, this.realDisable = t.disable, this.realColorMask = t.colorMask, this.realClearColor = t.clearColor, this.realViewport = t.viewport, a() || (this.realCanvasWidth = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "width"), this.realCanvasHeight = Object.getOwnPropertyDescriptor(t.canvas.__proto__, "height")), this.isPatched = !1, this.lastBoundFramebuffer = null, this.cullFace = !1, this.depthTest = !1, this.blend = !1, this.scissorTest = !1, this.stencilTest = !1, this.viewport = [0, 0, 0, 0], this.colorMask = [!0, !0, !0, !0], this.clearColor = [0, 0, 0, 0], this.attribs = {
|
|
position: 0,
|
|
texCoord: 1
|
|
}, this.program = A(t, R, C, this.attribs), this.uniforms = x(t, this.program), this.viewportOffsetScale = new Float32Array(8), this.setTextureBounds(), this.vertexBuffer = t.createBuffer(), this.indexBuffer = t.createBuffer(), this.indexCount = 0, this.renderTarget = t.createTexture(), this.framebuffer = t.createFramebuffer(), this.depthStencilBuffer = null, this.depthBuffer = null, this.stencilBuffer = null, this.ctxAttribs.depth && this.ctxAttribs.stencil ? this.depthStencilBuffer = t.createRenderbuffer() : this.ctxAttribs.depth ? this.depthBuffer = t.createRenderbuffer() : this.ctxAttribs.stencil && (this.stencilBuffer = t.createRenderbuffer()), this.patch(), this.onResize()
|
|
}
|
|
P.prototype.destroy = function() {
|
|
var t = this.gl;
|
|
this.unpatch(), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer), t.deleteBuffer(this.indexBuffer), t.deleteTexture(this.renderTarget), t.deleteFramebuffer(this.framebuffer), this.depthStencilBuffer && t.deleteRenderbuffer(this.depthStencilBuffer), this.depthBuffer && t.deleteRenderbuffer(this.depthBuffer), this.stencilBuffer && t.deleteRenderbuffer(this.stencilBuffer), this.cardboardUI && this.cardboardUI.destroy()
|
|
}, P.prototype.onResize = function() {
|
|
var t = this.gl,
|
|
e = this,
|
|
n = [t.RENDERBUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0];
|
|
L(t, n, (function(t) {
|
|
e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.framebuffer), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.texImage2D(t.TEXTURE_2D, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, e.bufferWidth, e.bufferHeight, 0, e.ctxAttribs.alpha ? t.RGBA : t.RGB, t.UNSIGNED_BYTE, null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, e.renderTarget, 0), e.ctxAttribs.depth && e.ctxAttribs.stencil ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthStencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_STENCIL, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, e.depthStencilBuffer)) : e.ctxAttribs.depth ? (t.bindRenderbuffer(t.RENDERBUFFER, e.depthBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.DEPTH_COMPONENT16, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, e.depthBuffer)) : e.ctxAttribs.stencil && (t.bindRenderbuffer(t.RENDERBUFFER, e.stencilBuffer), t.renderbufferStorage(t.RENDERBUFFER, t.STENCIL_INDEX8, e.bufferWidth, e.bufferHeight), t.framebufferRenderbuffer(t.FRAMEBUFFER, t.STENCIL_ATTACHMENT, t.RENDERBUFFER, e.stencilBuffer)), !t.checkFramebufferStatus(t.FRAMEBUFFER) === t.FRAMEBUFFER_COMPLETE && console.error("Framebuffer incomplete!"), e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), e.realClearColor.apply(t, e.clearColor)
|
|
})), this.cardboardUI && this.cardboardUI.onResize()
|
|
}, P.prototype.patch = function() {
|
|
if (!this.isPatched) {
|
|
var t = this,
|
|
e = this.gl.canvas,
|
|
n = this.gl;
|
|
a() || (e.width = g() * this.bufferScale, e.height = v() * this.bufferScale, Object.defineProperty(e, "width", {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
get: function() {
|
|
return t.bufferWidth
|
|
},
|
|
set: function(n) {
|
|
t.bufferWidth = n, t.realCanvasWidth.set.call(e, n), t.onResize()
|
|
}
|
|
}), Object.defineProperty(e, "height", {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
get: function() {
|
|
return t.bufferHeight
|
|
},
|
|
set: function(n) {
|
|
t.bufferHeight = n, t.realCanvasHeight.set.call(e, n), t.onResize()
|
|
}
|
|
})), this.lastBoundFramebuffer = n.getParameter(n.FRAMEBUFFER_BINDING), null == this.lastBoundFramebuffer && (this.lastBoundFramebuffer = this.framebuffer, this.gl.bindFramebuffer(n.FRAMEBUFFER, this.framebuffer)), this.gl.bindFramebuffer = function(e, i) {
|
|
t.lastBoundFramebuffer = i || t.framebuffer, t.realBindFramebuffer.call(n, e, t.lastBoundFramebuffer)
|
|
}, this.cullFace = n.getParameter(n.CULL_FACE), this.depthTest = n.getParameter(n.DEPTH_TEST), this.blend = n.getParameter(n.BLEND), this.scissorTest = n.getParameter(n.SCISSOR_TEST), this.stencilTest = n.getParameter(n.STENCIL_TEST), n.enable = function(e) {
|
|
switch (e) {
|
|
case n.CULL_FACE:
|
|
t.cullFace = !0;
|
|
break;
|
|
case n.DEPTH_TEST:
|
|
t.depthTest = !0;
|
|
break;
|
|
case n.BLEND:
|
|
t.blend = !0;
|
|
break;
|
|
case n.SCISSOR_TEST:
|
|
t.scissorTest = !0;
|
|
break;
|
|
case n.STENCIL_TEST:
|
|
t.stencilTest = !0
|
|
}
|
|
t.realEnable.call(n, e)
|
|
}, n.disable = function(e) {
|
|
switch (e) {
|
|
case n.CULL_FACE:
|
|
t.cullFace = !1;
|
|
break;
|
|
case n.DEPTH_TEST:
|
|
t.depthTest = !1;
|
|
break;
|
|
case n.BLEND:
|
|
t.blend = !1;
|
|
break;
|
|
case n.SCISSOR_TEST:
|
|
t.scissorTest = !1;
|
|
break;
|
|
case n.STENCIL_TEST:
|
|
t.stencilTest = !1
|
|
}
|
|
t.realDisable.call(n, e)
|
|
}, this.colorMask = n.getParameter(n.COLOR_WRITEMASK), n.colorMask = function(e, i, r, o) {
|
|
t.colorMask[0] = e, t.colorMask[1] = i, t.colorMask[2] = r, t.colorMask[3] = o, t.realColorMask.call(n, e, i, r, o)
|
|
}, this.clearColor = n.getParameter(n.COLOR_CLEAR_VALUE), n.clearColor = function(e, i, r, o) {
|
|
t.clearColor[0] = e, t.clearColor[1] = i, t.clearColor[2] = r, t.clearColor[3] = o, t.realClearColor.call(n, e, i, r, o)
|
|
}, this.viewport = n.getParameter(n.VIEWPORT), n.viewport = function(e, i, r, o) {
|
|
t.viewport[0] = e, t.viewport[1] = i, t.viewport[2] = r, t.viewport[3] = o, t.realViewport.call(n, e, i, r, o)
|
|
}, this.isPatched = !0, w(e)
|
|
}
|
|
}, P.prototype.unpatch = function() {
|
|
if (this.isPatched) {
|
|
var t = this.gl,
|
|
e = this.gl.canvas;
|
|
a() || (Object.defineProperty(e, "width", this.realCanvasWidth), Object.defineProperty(e, "height", this.realCanvasHeight)), e.width = this.bufferWidth, e.height = this.bufferHeight, t.bindFramebuffer = this.realBindFramebuffer, t.enable = this.realEnable, t.disable = this.realDisable, t.colorMask = this.realColorMask, t.clearColor = this.realClearColor, t.viewport = this.realViewport, this.lastBoundFramebuffer == this.framebuffer && t.bindFramebuffer(t.FRAMEBUFFER, null), this.isPatched = !1, setTimeout((function() {
|
|
w(e)
|
|
}), 1)
|
|
}
|
|
}, P.prototype.setTextureBounds = function(t, e) {
|
|
t || (t = [0, 0, .5, 1]), e || (e = [.5, 0, .5, 1]), this.viewportOffsetScale[0] = t[0], this.viewportOffsetScale[1] = t[1], this.viewportOffsetScale[2] = t[2], this.viewportOffsetScale[3] = t[3], this.viewportOffsetScale[4] = e[0], this.viewportOffsetScale[5] = e[1], this.viewportOffsetScale[6] = e[2], this.viewportOffsetScale[7] = e[3]
|
|
}, P.prototype.submitFrame = function() {
|
|
var t = this.gl,
|
|
e = this,
|
|
n = [];
|
|
if (this.dirtySubmitFrameBindings || n.push(t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING, t.ELEMENT_ARRAY_BUFFER_BINDING, t.TEXTURE_BINDING_2D, t.TEXTURE0), L(t, n, (function(t) {
|
|
e.realBindFramebuffer.call(t, t.FRAMEBUFFER, null);
|
|
var n = 0,
|
|
i = 0;
|
|
e.instanceExt && (n = t.getVertexAttrib(e.attribs.position, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE), i = t.getVertexAttrib(e.attribs.texCoord, e.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)), e.cullFace && e.realDisable.call(t, t.CULL_FACE), e.depthTest && e.realDisable.call(t, t.DEPTH_TEST), e.blend && e.realDisable.call(t, t.BLEND), e.scissorTest && e.realDisable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realDisable.call(t, t.STENCIL_TEST), e.realColorMask.call(t, !0, !0, !0, !0), e.realViewport.call(t, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight), (e.ctxAttribs.alpha || a()) && (e.realClearColor.call(t, 0, 0, 0, 1), t.clear(t.COLOR_BUFFER_BIT)), t.useProgram(e.program), t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e.indexBuffer), t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.enableVertexAttribArray(e.attribs.position), t.enableVertexAttribArray(e.attribs.texCoord), t.vertexAttribPointer(e.attribs.position, 2, t.FLOAT, !1, 20, 0), t.vertexAttribPointer(e.attribs.texCoord, 3, t.FLOAT, !1, 20, 8), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, 0), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, 0)), t.activeTexture(t.TEXTURE0), t.uniform1i(e.uniforms.diffuse, 0), t.bindTexture(t.TEXTURE_2D, e.renderTarget), t.uniform4fv(e.uniforms.viewportOffsetScale, e.viewportOffsetScale), t.drawElements(t.TRIANGLES, e.indexCount, t.UNSIGNED_SHORT, 0), e.cardboardUI && e.cardboardUI.renderNoState(), e.realBindFramebuffer.call(e.gl, t.FRAMEBUFFER, e.framebuffer), e.ctxAttribs.preserveDrawingBuffer || (e.realClearColor.call(t, 0, 0, 0, 0), t.clear(t.COLOR_BUFFER_BIT)), e.dirtySubmitFrameBindings || e.realBindFramebuffer.call(t, t.FRAMEBUFFER, e.lastBoundFramebuffer), e.cullFace && e.realEnable.call(t, t.CULL_FACE), e.depthTest && e.realEnable.call(t, t.DEPTH_TEST), e.blend && e.realEnable.call(t, t.BLEND), e.scissorTest && e.realEnable.call(t, t.SCISSOR_TEST), e.stencilTest && e.realEnable.call(t, t.STENCIL_TEST), e.realColorMask.apply(t, e.colorMask), e.realViewport.apply(t, e.viewport), !e.ctxAttribs.alpha && e.ctxAttribs.preserveDrawingBuffer || e.realClearColor.apply(t, e.clearColor), e.instanceExt && (0 != n && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.position, n), 0 != i && e.instanceExt.vertexAttribDivisorANGLE(e.attribs.texCoord, i))
|
|
})), a()) {
|
|
var i = t.canvas;
|
|
i.width == e.bufferWidth && i.height == e.bufferHeight || (e.bufferWidth = i.width, e.bufferHeight = i.height, e.onResize())
|
|
}
|
|
}, P.prototype.updateDeviceInfo = function(t) {
|
|
var e = this.gl,
|
|
n = this,
|
|
i = [e.ARRAY_BUFFER_BINDING, e.ELEMENT_ARRAY_BUFFER_BINDING];
|
|
L(e, i, (function(e) {
|
|
var i = n.computeMeshVertices_(n.meshWidth, n.meshHeight, t);
|
|
if (e.bindBuffer(e.ARRAY_BUFFER, n.vertexBuffer), e.bufferData(e.ARRAY_BUFFER, i, e.STATIC_DRAW), !n.indexCount) {
|
|
var r = n.computeMeshIndices_(n.meshWidth, n.meshHeight);
|
|
e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, n.indexBuffer), e.bufferData(e.ELEMENT_ARRAY_BUFFER, r, e.STATIC_DRAW), n.indexCount = r.length
|
|
}
|
|
}))
|
|
}, P.prototype.computeMeshVertices_ = function(t, e, n) {
|
|
for (var i = new Float32Array(2 * t * e * 5), r = n.getLeftEyeVisibleTanAngles(), o = n.getLeftEyeNoLensTanAngles(), a = n.getLeftEyeVisibleScreenRect(o), l = 0, c = 0; c < 2; c++) {
|
|
for (var h = 0; h < e; h++)
|
|
for (var u = 0; u < t; u++, l++) {
|
|
var d = u / (t - 1),
|
|
p = h / (e - 1),
|
|
f = d,
|
|
m = p,
|
|
g = s(r[0], r[2], d),
|
|
v = s(r[3], r[1], p),
|
|
y = Math.sqrt(g * g + v * v),
|
|
A = n.distortion.distortInverse(y),
|
|
x = v * A / y;
|
|
d = (g * A / y - o[0]) / (o[2] - o[0]), p = (x - o[3]) / (o[1] - o[3]), d = 2 * (a.x + d * a.width - .5), p = 2 * (a.y + p * a.height - .5), i[5 * l + 0] = d, i[5 * l + 1] = p, i[5 * l + 2] = f, i[5 * l + 3] = m, i[5 * l + 4] = c
|
|
}
|
|
var _ = r[2] - r[0];
|
|
r[0] = -(_ + r[0]), r[2] = _ - r[2], _ = o[2] - o[0], o[0] = -(_ + o[0]), o[2] = _ - o[2], a.x = 1 - (a.x + a.width)
|
|
}
|
|
return i
|
|
}, P.prototype.computeMeshIndices_ = function(t, e) {
|
|
for (var n = new Uint16Array(2 * (t - 1) * (e - 1) * 6), i = t / 2, r = e / 2, o = 0, s = 0, a = 0; a < 2; a++)
|
|
for (var l = 0; l < e; l++)
|
|
for (var c = 0; c < t; c++, o++) 0 != c && 0 != l && (c <= i == l <= r ? (n[s++] = o, n[s++] = o - t - 1, n[s++] = o - t, n[s++] = o - t - 1, n[s++] = o, n[s++] = o - 1) : (n[s++] = o - 1, n[s++] = o - t, n[s++] = o, n[s++] = o - t, n[s++] = o - 1, n[s++] = o - t - 1));
|
|
return n
|
|
}, P.prototype.getOwnPropertyDescriptor_ = function(t, e) {
|
|
var n = Object.getOwnPropertyDescriptor(t, e);
|
|
return void 0 !== n.get && void 0 !== n.set || (n.configurable = !0, n.enumerable = !0, n.get = function() {
|
|
return this.getAttribute(e)
|
|
}, n.set = function(t) {
|
|
this.setAttribute(e, t)
|
|
}), n
|
|
};
|
|
var D = ["attribute vec2 position;", "uniform mat4 projectionMat;", "void main() {", " gl_Position = projectionMat * vec4( position, -1.0, 1.0 );", "}"].join("\n"),
|
|
I = ["precision mediump float;", "uniform vec4 color;", "void main() {", " gl_FragColor = color;", "}"].join("\n"),
|
|
O = Math.PI / 180;
|
|
|
|
function N(t) {
|
|
this.gl = t, this.attribs = {
|
|
position: 0
|
|
}, this.program = A(t, D, I, this.attribs), this.uniforms = x(t, this.program), this.vertexBuffer = t.createBuffer(), this.gearOffset = 0, this.gearVertexCount = 0, this.arrowOffset = 0, this.arrowVertexCount = 0, this.projMat = new Float32Array(16), this.listener = null, this.onResize()
|
|
}
|
|
|
|
function B(t) {
|
|
this.coefficients = t
|
|
}
|
|
N.prototype.destroy = function() {
|
|
var t = this.gl;
|
|
this.listener && t.canvas.removeEventListener("click", this.listener, !1), t.deleteProgram(this.program), t.deleteBuffer(this.vertexBuffer)
|
|
}, N.prototype.listen = function(t, e) {
|
|
var n = this.gl.canvas;
|
|
this.listener = function(i) {
|
|
var r = n.clientWidth / 2;
|
|
i.clientX > r - 42 && i.clientX < r + 42 && i.clientY > n.clientHeight - 42 ? t(i) : i.clientX < 42 && i.clientY < 42 && e(i)
|
|
}, n.addEventListener("click", this.listener, !1)
|
|
}, N.prototype.onResize = function() {
|
|
var t = this.gl,
|
|
e = this,
|
|
n = [t.ARRAY_BUFFER_BINDING];
|
|
L(t, n, (function(t) {
|
|
var n = [],
|
|
i = t.drawingBufferWidth / 2,
|
|
r = Math.max(screen.width, screen.height) * window.devicePixelRatio,
|
|
o = t.drawingBufferWidth / r * window.devicePixelRatio,
|
|
s = 4 * o / 2,
|
|
a = 42 * o,
|
|
l = 28 * o / 2,
|
|
c = 14 * o;
|
|
|
|
function h(t, e) {
|
|
var r = (90 - t) * O,
|
|
o = Math.cos(r),
|
|
s = Math.sin(r);
|
|
n.push(.3125 * o * l + i, .3125 * s * l + l), n.push(e * o * l + i, e * s * l + l)
|
|
}
|
|
n.push(i - s, a), n.push(i - s, t.drawingBufferHeight), n.push(i + s, a), n.push(i + s, t.drawingBufferHeight), e.gearOffset = n.length / 2;
|
|
for (var u = 0; u <= 6; u++) {
|
|
var d = 60 * u;
|
|
h(d, 1), h(d + 12, 1), h(d + 20, .75), h(d + 40, .75), h(d + 48, 1)
|
|
}
|
|
|
|
function p(e, i) {
|
|
n.push(c + e, t.drawingBufferHeight - c - i)
|
|
}
|
|
e.gearVertexCount = n.length / 2 - e.gearOffset, e.arrowOffset = n.length / 2;
|
|
var f = s / Math.sin(45 * O);
|
|
p(0, l), p(l, 0), p(l + f, f), p(f, l + f), p(f, l - f), p(0, l), p(l, 2 * l), p(l + f, 2 * l - f), p(f, l - f), p(0, l), p(f, l - s), p(28 * o, l - s), p(f, l + s), p(28 * o, l + s), e.arrowVertexCount = n.length / 2 - e.arrowOffset, t.bindBuffer(t.ARRAY_BUFFER, e.vertexBuffer), t.bufferData(t.ARRAY_BUFFER, new Float32Array(n), t.STATIC_DRAW)
|
|
}))
|
|
}, N.prototype.render = function() {
|
|
var t = this.gl,
|
|
e = this,
|
|
n = [t.CULL_FACE, t.DEPTH_TEST, t.BLEND, t.SCISSOR_TEST, t.STENCIL_TEST, t.COLOR_WRITEMASK, t.VIEWPORT, t.CURRENT_PROGRAM, t.ARRAY_BUFFER_BINDING];
|
|
L(t, n, (function(t) {
|
|
t.disable(t.CULL_FACE), t.disable(t.DEPTH_TEST), t.disable(t.BLEND), t.disable(t.SCISSOR_TEST), t.disable(t.STENCIL_TEST), t.colorMask(!0, !0, !0, !0), t.viewport(0, 0, t.drawingBufferWidth, t.drawingBufferHeight), e.renderNoState()
|
|
}))
|
|
}, N.prototype.renderNoState = function() {
|
|
var t, e, n, i, r, o, s, a, l, c, h = this.gl;
|
|
h.useProgram(this.program), h.bindBuffer(h.ARRAY_BUFFER, this.vertexBuffer), h.enableVertexAttribArray(this.attribs.position), h.vertexAttribPointer(this.attribs.position, 2, h.FLOAT, !1, 8, 0), h.uniform4f(this.uniforms.color, 1, 1, 1, 1), t = this.projMat, e = 0, n = h.drawingBufferWidth, i = 0, r = h.drawingBufferHeight, a = 1 / (e - n), l = 1 / (i - r), c = 1 / ((o = .1) - (s = 1024)), t[0] = -2 * a, t[1] = 0, t[2] = 0, t[3] = 0, t[4] = 0, t[5] = -2 * l, t[6] = 0, t[7] = 0, t[8] = 0, t[9] = 0, t[10] = 2 * c, t[11] = 0, t[12] = (e + n) * a, t[13] = (r + i) * l, t[14] = (s + o) * c, t[15] = 1, h.uniformMatrix4fv(this.uniforms.projectionMat, !1, this.projMat), h.drawArrays(h.TRIANGLE_STRIP, 0, 4), h.drawArrays(h.TRIANGLE_STRIP, this.gearOffset, this.gearVertexCount), h.drawArrays(h.TRIANGLE_STRIP, this.arrowOffset, this.arrowVertexCount)
|
|
}, B.prototype.distortInverse = function(t) {
|
|
for (var e = 0, n = 1, i = t - this.distort(e); Math.abs(n - e) > 1e-4;) {
|
|
var r = t - this.distort(n),
|
|
o = n - r * ((n - e) / (r - i));
|
|
e = n, n = o, i = r
|
|
}
|
|
return n
|
|
}, B.prototype.distort = function(t) {
|
|
for (var e = t * t, n = 0, i = 0; i < this.coefficients.length; i++) n = e * (n + this.coefficients[i]);
|
|
return (n + 1) * t
|
|
};
|
|
var F = Math.PI / 180,
|
|
z = 180 / Math.PI,
|
|
U = function(t, e, n) {
|
|
this.x = t || 0, this.y = e || 0, this.z = n || 0
|
|
};
|
|
U.prototype = {
|
|
constructor: U,
|
|
set: function(t, e, n) {
|
|
return this.x = t, this.y = e, this.z = n, this
|
|
},
|
|
copy: function(t) {
|
|
return this.x = t.x, this.y = t.y, this.z = t.z, this
|
|
},
|
|
length: function() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
|
|
},
|
|
normalize: function() {
|
|
var t = this.length();
|
|
if (0 !== t) {
|
|
var e = 1 / t;
|
|
this.multiplyScalar(e)
|
|
} else this.x = 0, this.y = 0, this.z = 0;
|
|
return this
|
|
},
|
|
multiplyScalar: function(t) {
|
|
this.x *= t, this.y *= t, this.z *= t
|
|
},
|
|
applyQuaternion: function(t) {
|
|
var e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = t.x,
|
|
o = t.y,
|
|
s = t.z,
|
|
a = t.w,
|
|
l = a * e + o * i - s * n,
|
|
c = a * n + s * e - r * i,
|
|
h = a * i + r * n - o * e,
|
|
u = -r * e - o * n - s * i;
|
|
return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this
|
|
},
|
|
dot: function(t) {
|
|
return this.x * t.x + this.y * t.y + this.z * t.z
|
|
},
|
|
crossVectors: function(t, e) {
|
|
var n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = e.x,
|
|
s = e.y,
|
|
a = e.z;
|
|
return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this
|
|
}
|
|
};
|
|
var H, G, V = function(t, e, n, i) {
|
|
this.x = t || 0, this.y = e || 0, this.z = n || 0, this.w = void 0 !== i ? i : 1
|
|
};
|
|
|
|
function k(t) {
|
|
this.width = t.width || g(), this.height = t.height || v(), this.widthMeters = t.widthMeters, this.heightMeters = t.heightMeters, this.bevelMeters = t.bevelMeters
|
|
}
|
|
V.prototype = {
|
|
constructor: V,
|
|
set: function(t, e, n, i) {
|
|
return this.x = t, this.y = e, this.z = n, this.w = i, this
|
|
},
|
|
copy: function(t) {
|
|
return this.x = t.x, this.y = t.y, this.z = t.z, this.w = t.w, this
|
|
},
|
|
setFromEulerXYZ: function(t, e, n) {
|
|
var i = Math.cos(t / 2),
|
|
r = Math.cos(e / 2),
|
|
o = Math.cos(n / 2),
|
|
s = Math.sin(t / 2),
|
|
a = Math.sin(e / 2),
|
|
l = Math.sin(n / 2);
|
|
return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l + s * a * o, this.w = i * r * o - s * a * l, this
|
|
},
|
|
setFromEulerYXZ: function(t, e, n) {
|
|
var i = Math.cos(t / 2),
|
|
r = Math.cos(e / 2),
|
|
o = Math.cos(n / 2),
|
|
s = Math.sin(t / 2),
|
|
a = Math.sin(e / 2),
|
|
l = Math.sin(n / 2);
|
|
return this.x = s * r * o + i * a * l, this.y = i * a * o - s * r * l, this.z = i * r * l - s * a * o, this.w = i * r * o + s * a * l, this
|
|
},
|
|
setFromAxisAngle: function(t, e) {
|
|
var n = e / 2,
|
|
i = Math.sin(n);
|
|
return this.x = t.x * i, this.y = t.y * i, this.z = t.z * i, this.w = Math.cos(n), this
|
|
},
|
|
multiply: function(t) {
|
|
return this.multiplyQuaternions(this, t)
|
|
},
|
|
multiplyQuaternions: function(t, e) {
|
|
var n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = t.w,
|
|
s = e.x,
|
|
a = e.y,
|
|
l = e.z,
|
|
c = e.w;
|
|
return this.x = n * c + o * s + i * l - r * a, this.y = i * c + o * a + r * s - n * l, this.z = r * c + o * l + n * a - i * s, this.w = o * c - n * s - i * a - r * l, this
|
|
},
|
|
inverse: function() {
|
|
return this.x *= -1, this.y *= -1, this.z *= -1, this.normalize(), this
|
|
},
|
|
normalize: function() {
|
|
var t = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);
|
|
return 0 === t ? (this.x = 0, this.y = 0, this.z = 0, this.w = 1) : (t = 1 / t, this.x = this.x * t, this.y = this.y * t, this.z = this.z * t, this.w = this.w * t), this
|
|
},
|
|
slerp: function(t, e) {
|
|
if (0 === e) return this;
|
|
if (1 === e) return this.copy(t);
|
|
var n = this.x,
|
|
i = this.y,
|
|
r = this.z,
|
|
o = this.w,
|
|
s = o * t.w + n * t.x + i * t.y + r * t.z;
|
|
if (s < 0 ? (this.w = -t.w, this.x = -t.x, this.y = -t.y, this.z = -t.z, s = -s) : this.copy(t), s >= 1) return this.w = o, this.x = n, this.y = i, this.z = r, this;
|
|
var a = Math.acos(s),
|
|
l = Math.sqrt(1 - s * s);
|
|
if (Math.abs(l) < .001) return this.w = .5 * (o + this.w), this.x = .5 * (n + this.x), this.y = .5 * (i + this.y), this.z = .5 * (r + this.z), this;
|
|
var c = Math.sin((1 - e) * a) / l,
|
|
h = Math.sin(e * a) / l;
|
|
return this.w = o * c + this.w * h, this.x = n * c + this.x * h, this.y = i * c + this.y * h, this.z = r * c + this.z * h, this
|
|
},
|
|
setFromUnitVectors: function(t, e) {
|
|
return void 0 === H && (H = new U), (G = t.dot(e) + 1) < 1e-6 ? (G = 0, Math.abs(t.x) > Math.abs(t.z) ? H.set(-t.y, t.x, 0) : H.set(0, -t.z, t.y)) : H.crossVectors(t, e), this.x = H.x, this.y = H.y, this.z = H.z, this.w = G, this.normalize(), this
|
|
}
|
|
};
|
|
var W = new k({
|
|
widthMeters: .11,
|
|
heightMeters: .062,
|
|
bevelMeters: .004
|
|
}),
|
|
j = new k({
|
|
widthMeters: .1038,
|
|
heightMeters: .0584,
|
|
bevelMeters: .004
|
|
}),
|
|
X = {
|
|
CardboardV1: new Y({
|
|
id: "CardboardV1",
|
|
label: "Cardboard I/O 2014",
|
|
fov: 40,
|
|
interLensDistance: .06,
|
|
baselineLensDistance: .035,
|
|
screenLensDistance: .042,
|
|
distortionCoefficients: [.441, .156],
|
|
inverseCoefficients: [-.4410035, .42756155, -.4804439, .5460139, -.58821183, .5733938, -.48303202, .33299083, -.17573841, .0651772, -.01488963, .001559834]
|
|
}),
|
|
CardboardV2: new Y({
|
|
id: "CardboardV2",
|
|
label: "Cardboard I/O 2015",
|
|
fov: 60,
|
|
interLensDistance: .064,
|
|
baselineLensDistance: .035,
|
|
screenLensDistance: .039,
|
|
distortionCoefficients: [.34, .55],
|
|
inverseCoefficients: [-.33836704, -.18162185, .862655, -1.2462051, 1.0560602, -.58208317, .21609078, -.05444823, .009177956, -.0009904169, 6183535e-11, -16981803e-13]
|
|
})
|
|
};
|
|
|
|
function q(t, e) {
|
|
this.viewer = X.CardboardV2, this.updateDeviceParams(t), this.distortion = new B(this.viewer.distortionCoefficients);
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
X[i.id] = new Y(i)
|
|
}
|
|
}
|
|
|
|
function Y(t) {
|
|
this.id = t.id, this.label = t.label, this.fov = t.fov, this.interLensDistance = t.interLensDistance, this.baselineLensDistance = t.baselineLensDistance, this.screenLensDistance = t.screenLensDistance, this.distortionCoefficients = t.distortionCoefficients, this.inverseCoefficients = t.inverseCoefficients
|
|
}
|
|
q.prototype.updateDeviceParams = function(t) {
|
|
this.device = this.determineDevice_(t) || this.device
|
|
}, q.prototype.getDevice = function() {
|
|
return this.device
|
|
}, q.prototype.setViewer = function(t) {
|
|
this.viewer = t, this.distortion = new B(this.viewer.distortionCoefficients)
|
|
}, q.prototype.determineDevice_ = function(t) {
|
|
if (!t) return a() ? (console.warn("Using fallback iOS device measurements."), j) : (console.warn("Using fallback Android device measurements."), W);
|
|
var e = .0254 / t.xdpi,
|
|
n = .0254 / t.ydpi;
|
|
return new k({
|
|
widthMeters: e * g(),
|
|
heightMeters: n * v(),
|
|
bevelMeters: .001 * t.bevelMm
|
|
})
|
|
}, q.prototype.getDistortedFieldOfViewLeftEye = function() {
|
|
var t = this.viewer,
|
|
e = this.device,
|
|
n = this.distortion,
|
|
i = t.screenLensDistance,
|
|
r = (e.widthMeters - t.interLensDistance) / 2,
|
|
o = t.interLensDistance / 2,
|
|
s = t.baselineLensDistance - e.bevelMeters,
|
|
a = e.heightMeters - s,
|
|
l = z * Math.atan(n.distort(r / i)),
|
|
c = z * Math.atan(n.distort(o / i)),
|
|
h = z * Math.atan(n.distort(s / i)),
|
|
u = z * Math.atan(n.distort(a / i));
|
|
return {
|
|
leftDegrees: Math.min(l, t.fov),
|
|
rightDegrees: Math.min(c, t.fov),
|
|
downDegrees: Math.min(h, t.fov),
|
|
upDegrees: Math.min(u, t.fov)
|
|
}
|
|
}, q.prototype.getLeftEyeVisibleTanAngles = function() {
|
|
var t = this.viewer,
|
|
e = this.device,
|
|
n = this.distortion,
|
|
i = Math.tan(-F * t.fov),
|
|
r = Math.tan(F * t.fov),
|
|
o = Math.tan(F * t.fov),
|
|
s = Math.tan(-F * t.fov),
|
|
a = e.widthMeters / 4,
|
|
l = e.heightMeters / 2,
|
|
c = t.baselineLensDistance - e.bevelMeters - l,
|
|
h = t.interLensDistance / 2 - a,
|
|
u = -c,
|
|
d = t.screenLensDistance,
|
|
p = n.distort((h - a) / d),
|
|
f = n.distort((u + l) / d),
|
|
m = n.distort((h + a) / d),
|
|
g = n.distort((u - l) / d),
|
|
v = new Float32Array(4);
|
|
return v[0] = Math.max(i, p), v[1] = Math.min(r, f), v[2] = Math.min(o, m), v[3] = Math.max(s, g), v
|
|
}, q.prototype.getLeftEyeNoLensTanAngles = function() {
|
|
var t = this.viewer,
|
|
e = this.device,
|
|
n = this.distortion,
|
|
i = new Float32Array(4),
|
|
r = n.distortInverse(Math.tan(-F * t.fov)),
|
|
o = n.distortInverse(Math.tan(F * t.fov)),
|
|
s = n.distortInverse(Math.tan(F * t.fov)),
|
|
a = n.distortInverse(Math.tan(-F * t.fov)),
|
|
l = e.widthMeters / 4,
|
|
c = e.heightMeters / 2,
|
|
h = t.baselineLensDistance - e.bevelMeters - c,
|
|
u = t.interLensDistance / 2 - l,
|
|
d = -h,
|
|
p = t.screenLensDistance,
|
|
f = (u - l) / p,
|
|
m = (d + c) / p,
|
|
g = (u + l) / p,
|
|
v = (d - c) / p;
|
|
return i[0] = Math.max(r, f), i[1] = Math.min(o, m), i[2] = Math.min(s, g), i[3] = Math.max(a, v), i
|
|
}, q.prototype.getLeftEyeVisibleScreenRect = function(t) {
|
|
var e = this.viewer,
|
|
n = this.device,
|
|
i = e.screenLensDistance,
|
|
r = (n.widthMeters - e.interLensDistance) / 2,
|
|
o = e.baselineLensDistance - n.bevelMeters,
|
|
s = (t[0] * i + r) / n.widthMeters,
|
|
a = (t[1] * i + o) / n.heightMeters,
|
|
l = (t[2] * i + r) / n.widthMeters,
|
|
c = (t[3] * i + o) / n.heightMeters;
|
|
return {
|
|
x: s,
|
|
y: c,
|
|
width: l - s,
|
|
height: a - c
|
|
}
|
|
}, q.prototype.getFieldOfViewLeftEye = function(t) {
|
|
return t ? this.getUndistortedFieldOfViewLeftEye() : this.getDistortedFieldOfViewLeftEye()
|
|
}, q.prototype.getFieldOfViewRightEye = function(t) {
|
|
var e = this.getFieldOfViewLeftEye(t);
|
|
return {
|
|
leftDegrees: e.rightDegrees,
|
|
rightDegrees: e.leftDegrees,
|
|
upDegrees: e.upDegrees,
|
|
downDegrees: e.downDegrees
|
|
}
|
|
}, q.prototype.getUndistortedFieldOfViewLeftEye = function() {
|
|
var t = this.getUndistortedParams_();
|
|
return {
|
|
leftDegrees: z * Math.atan(t.outerDist),
|
|
rightDegrees: z * Math.atan(t.innerDist),
|
|
downDegrees: z * Math.atan(t.bottomDist),
|
|
upDegrees: z * Math.atan(t.topDist)
|
|
}
|
|
}, q.prototype.getUndistortedViewportLeftEye = function() {
|
|
var t = this.getUndistortedParams_(),
|
|
e = this.viewer,
|
|
n = this.device,
|
|
i = e.screenLensDistance,
|
|
r = n.widthMeters / i,
|
|
o = n.heightMeters / i,
|
|
s = n.width / r,
|
|
a = n.height / o,
|
|
l = Math.round((t.eyePosX - t.outerDist) * s),
|
|
c = Math.round((t.eyePosY - t.bottomDist) * a);
|
|
return {
|
|
x: l,
|
|
y: c,
|
|
width: Math.round((t.eyePosX + t.innerDist) * s) - l,
|
|
height: Math.round((t.eyePosY + t.topDist) * a) - c
|
|
}
|
|
}, q.prototype.getUndistortedParams_ = function() {
|
|
var t = this.viewer,
|
|
e = this.device,
|
|
n = this.distortion,
|
|
i = t.screenLensDistance,
|
|
r = t.interLensDistance / 2 / i,
|
|
o = e.widthMeters / i,
|
|
s = e.heightMeters / i,
|
|
a = o / 2 - r,
|
|
l = (t.baselineLensDistance - e.bevelMeters) / i,
|
|
c = t.fov,
|
|
h = n.distortInverse(Math.tan(F * c)),
|
|
u = Math.min(a, h),
|
|
d = Math.min(r, h),
|
|
p = Math.min(l, h);
|
|
return {
|
|
outerDist: u,
|
|
innerDist: d,
|
|
topDist: Math.min(s - l, h),
|
|
bottomDist: p,
|
|
eyePosX: a,
|
|
eyePosY: l
|
|
}
|
|
}, q.Viewers = X;
|
|
var Q = {
|
|
format: 1,
|
|
last_updated: "2019-11-09T17:36:14Z",
|
|
devices: [{
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "asus/*/Nexus 7/*"
|
|
}, {
|
|
ua: "Nexus 7"
|
|
}],
|
|
dpi: [320.8, 323],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "asus/*/ASUS_X00PD/*"
|
|
}, {
|
|
ua: "ASUS_X00PD"
|
|
}],
|
|
dpi: 245,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "asus/*/ASUS_X008D/*"
|
|
}, {
|
|
ua: "ASUS_X008D"
|
|
}],
|
|
dpi: 282,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "asus/*/ASUS_Z00AD/*"
|
|
}, {
|
|
ua: "ASUS_Z00AD"
|
|
}],
|
|
dpi: [403, 404.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel 2 XL/*"
|
|
}, {
|
|
ua: "Pixel 2 XL"
|
|
}],
|
|
dpi: 537.9,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel 3 XL/*"
|
|
}, {
|
|
ua: "Pixel 3 XL"
|
|
}],
|
|
dpi: [558.5, 553.8],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel XL/*"
|
|
}, {
|
|
ua: "Pixel XL"
|
|
}],
|
|
dpi: [537.9, 533],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel 3/*"
|
|
}, {
|
|
ua: "Pixel 3"
|
|
}],
|
|
dpi: 442.4,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel 2/*"
|
|
}, {
|
|
ua: "Pixel 2"
|
|
}],
|
|
dpi: 441,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Google/*/Pixel/*"
|
|
}, {
|
|
ua: "Pixel"
|
|
}],
|
|
dpi: [432.6, 436.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "HTC/*/HTC6435LVW/*"
|
|
}, {
|
|
ua: "HTC6435LVW"
|
|
}],
|
|
dpi: [449.7, 443.3],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "HTC/*/HTC One XL/*"
|
|
}, {
|
|
ua: "HTC One XL"
|
|
}],
|
|
dpi: [315.3, 314.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "htc/*/Nexus 9/*"
|
|
}, {
|
|
ua: "Nexus 9"
|
|
}],
|
|
dpi: 289,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "HTC/*/HTC One M9/*"
|
|
}, {
|
|
ua: "HTC One M9"
|
|
}],
|
|
dpi: [442.5, 443.3],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "HTC/*/HTC One_M8/*"
|
|
}, {
|
|
ua: "HTC One_M8"
|
|
}],
|
|
dpi: [449.7, 447.4],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "HTC/*/HTC One/*"
|
|
}, {
|
|
ua: "HTC One"
|
|
}],
|
|
dpi: 472.8,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Huawei/*/Nexus 6P/*"
|
|
}, {
|
|
ua: "Nexus 6P"
|
|
}],
|
|
dpi: [515.1, 518],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Huawei/*/BLN-L24/*"
|
|
}, {
|
|
ua: "HONORBLN-L24"
|
|
}],
|
|
dpi: 480,
|
|
bw: 4,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Huawei/*/BKL-L09/*"
|
|
}, {
|
|
ua: "BKL-L09"
|
|
}],
|
|
dpi: 403,
|
|
bw: 3.47,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LENOVO/*/Lenovo PB2-690Y/*"
|
|
}, {
|
|
ua: "Lenovo PB2-690Y"
|
|
}],
|
|
dpi: [457.2, 454.713],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/Nexus 5X/*"
|
|
}, {
|
|
ua: "Nexus 5X"
|
|
}],
|
|
dpi: [422, 419.9],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LGMS345/*"
|
|
}, {
|
|
ua: "LGMS345"
|
|
}],
|
|
dpi: [221.7, 219.1],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LG-D800/*"
|
|
}, {
|
|
ua: "LG-D800"
|
|
}],
|
|
dpi: [422, 424.1],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LG-D850/*"
|
|
}, {
|
|
ua: "LG-D850"
|
|
}],
|
|
dpi: [537.9, 541.9],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/VS985 4G/*"
|
|
}, {
|
|
ua: "VS985 4G"
|
|
}],
|
|
dpi: [537.9, 535.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/Nexus 5/*"
|
|
}, {
|
|
ua: "Nexus 5 B"
|
|
}],
|
|
dpi: [442.4, 444.8],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/Nexus 4/*"
|
|
}, {
|
|
ua: "Nexus 4"
|
|
}],
|
|
dpi: [319.8, 318.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LG-P769/*"
|
|
}, {
|
|
ua: "LG-P769"
|
|
}],
|
|
dpi: [240.6, 247.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LGMS323/*"
|
|
}, {
|
|
ua: "LGMS323"
|
|
}],
|
|
dpi: [206.6, 204.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "LGE/*/LGLS996/*"
|
|
}, {
|
|
ua: "LGLS996"
|
|
}],
|
|
dpi: [403.4, 401.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Micromax/*/4560MMX/*"
|
|
}, {
|
|
ua: "4560MMX"
|
|
}],
|
|
dpi: [240, 219.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Micromax/*/A250/*"
|
|
}, {
|
|
ua: "Micromax A250"
|
|
}],
|
|
dpi: [480, 446.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Micromax/*/Micromax AQ4501/*"
|
|
}, {
|
|
ua: "Micromax AQ4501"
|
|
}],
|
|
dpi: 240,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/G5/*"
|
|
}, {
|
|
ua: "Moto G (5) Plus"
|
|
}],
|
|
dpi: [403.4, 403],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/DROID RAZR/*"
|
|
}, {
|
|
ua: "DROID RAZR"
|
|
}],
|
|
dpi: [368.1, 256.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT830C/*"
|
|
}, {
|
|
ua: "XT830C"
|
|
}],
|
|
dpi: [254, 255.9],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1021/*"
|
|
}, {
|
|
ua: "XT1021"
|
|
}],
|
|
dpi: [254, 256.7],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1023/*"
|
|
}, {
|
|
ua: "XT1023"
|
|
}],
|
|
dpi: [254, 256.7],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1028/*"
|
|
}, {
|
|
ua: "XT1028"
|
|
}],
|
|
dpi: [326.6, 327.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1034/*"
|
|
}, {
|
|
ua: "XT1034"
|
|
}],
|
|
dpi: [326.6, 328.4],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1053/*"
|
|
}, {
|
|
ua: "XT1053"
|
|
}],
|
|
dpi: [315.3, 316.1],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1562/*"
|
|
}, {
|
|
ua: "XT1562"
|
|
}],
|
|
dpi: [403.4, 402.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/Nexus 6/*"
|
|
}, {
|
|
ua: "Nexus 6 B"
|
|
}],
|
|
dpi: [494.3, 489.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1063/*"
|
|
}, {
|
|
ua: "XT1063"
|
|
}],
|
|
dpi: [295, 296.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1064/*"
|
|
}, {
|
|
ua: "XT1064"
|
|
}],
|
|
dpi: [295, 295.6],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1092/*"
|
|
}, {
|
|
ua: "XT1092"
|
|
}],
|
|
dpi: [422, 424.1],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/XT1095/*"
|
|
}, {
|
|
ua: "XT1095"
|
|
}],
|
|
dpi: [422, 423.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "motorola/*/G4/*"
|
|
}, {
|
|
ua: "Moto G (4)"
|
|
}],
|
|
dpi: 401,
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/A0001/*"
|
|
}, {
|
|
ua: "A0001"
|
|
}],
|
|
dpi: [403.4, 401],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE E1001/*"
|
|
}, {
|
|
ua: "ONE E1001"
|
|
}],
|
|
dpi: [442.4, 441.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE E1003/*"
|
|
}, {
|
|
ua: "ONE E1003"
|
|
}],
|
|
dpi: [442.4, 441.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE E1005/*"
|
|
}, {
|
|
ua: "ONE E1005"
|
|
}],
|
|
dpi: [442.4, 441.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE A2001/*"
|
|
}, {
|
|
ua: "ONE A2001"
|
|
}],
|
|
dpi: [391.9, 405.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE A2003/*"
|
|
}, {
|
|
ua: "ONE A2003"
|
|
}],
|
|
dpi: [391.9, 405.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE A2005/*"
|
|
}, {
|
|
ua: "ONE A2005"
|
|
}],
|
|
dpi: [391.9, 405.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A3000/*"
|
|
}, {
|
|
ua: "ONEPLUS A3000"
|
|
}],
|
|
dpi: 401,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A3003/*"
|
|
}, {
|
|
ua: "ONEPLUS A3003"
|
|
}],
|
|
dpi: 401,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A3010/*"
|
|
}, {
|
|
ua: "ONEPLUS A3010"
|
|
}],
|
|
dpi: 401,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A5000/*"
|
|
}, {
|
|
ua: "ONEPLUS A5000 "
|
|
}],
|
|
dpi: [403.411, 399.737],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONE A5010/*"
|
|
}, {
|
|
ua: "ONEPLUS A5010"
|
|
}],
|
|
dpi: [403, 400],
|
|
bw: 2,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A6000/*"
|
|
}, {
|
|
ua: "ONEPLUS A6000"
|
|
}],
|
|
dpi: 401,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A6003/*"
|
|
}, {
|
|
ua: "ONEPLUS A6003"
|
|
}],
|
|
dpi: 401,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A6010/*"
|
|
}, {
|
|
ua: "ONEPLUS A6010"
|
|
}],
|
|
dpi: 401,
|
|
bw: 2,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OnePlus/*/ONEPLUS A6013/*"
|
|
}, {
|
|
ua: "ONEPLUS A6013"
|
|
}],
|
|
dpi: 401,
|
|
bw: 2,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "OPPO/*/X909/*"
|
|
}, {
|
|
ua: "X909"
|
|
}],
|
|
dpi: [442.4, 444.1],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9082/*"
|
|
}, {
|
|
ua: "GT-I9082"
|
|
}],
|
|
dpi: [184.7, 185.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G360P/*"
|
|
}, {
|
|
ua: "SM-G360P"
|
|
}],
|
|
dpi: [196.7, 205.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/Nexus S/*"
|
|
}, {
|
|
ua: "Nexus S"
|
|
}],
|
|
dpi: [234.5, 229.8],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9300/*"
|
|
}, {
|
|
ua: "GT-I9300"
|
|
}],
|
|
dpi: [304.8, 303.9],
|
|
bw: 5,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-T230NU/*"
|
|
}, {
|
|
ua: "SM-T230NU"
|
|
}],
|
|
dpi: 216,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SGH-T399/*"
|
|
}, {
|
|
ua: "SGH-T399"
|
|
}],
|
|
dpi: [217.7, 231.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SGH-M919/*"
|
|
}, {
|
|
ua: "SGH-M919"
|
|
}],
|
|
dpi: [440.8, 437.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N9005/*"
|
|
}, {
|
|
ua: "SM-N9005"
|
|
}],
|
|
dpi: [386.4, 387],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SAMSUNG-SM-N900A/*"
|
|
}, {
|
|
ua: "SAMSUNG-SM-N900A"
|
|
}],
|
|
dpi: [386.4, 387.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9500/*"
|
|
}, {
|
|
ua: "GT-I9500"
|
|
}],
|
|
dpi: [442.5, 443.3],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9505/*"
|
|
}, {
|
|
ua: "GT-I9505"
|
|
}],
|
|
dpi: 439.4,
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G900F/*"
|
|
}, {
|
|
ua: "SM-G900F"
|
|
}],
|
|
dpi: [415.6, 431.6],
|
|
bw: 5,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G900M/*"
|
|
}, {
|
|
ua: "SM-G900M"
|
|
}],
|
|
dpi: [415.6, 431.6],
|
|
bw: 5,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G800F/*"
|
|
}, {
|
|
ua: "SM-G800F"
|
|
}],
|
|
dpi: 326.8,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G906S/*"
|
|
}, {
|
|
ua: "SM-G906S"
|
|
}],
|
|
dpi: [562.7, 572.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9300/*"
|
|
}, {
|
|
ua: "GT-I9300"
|
|
}],
|
|
dpi: [306.7, 304.8],
|
|
bw: 5,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-T535/*"
|
|
}, {
|
|
ua: "SM-T535"
|
|
}],
|
|
dpi: [142.6, 136.4],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N920C/*"
|
|
}, {
|
|
ua: "SM-N920C"
|
|
}],
|
|
dpi: [515.1, 518.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N920P/*"
|
|
}, {
|
|
ua: "SM-N920P"
|
|
}],
|
|
dpi: [386.3655, 390.144],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N920W8/*"
|
|
}, {
|
|
ua: "SM-N920W8"
|
|
}],
|
|
dpi: [515.1, 518.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9300I/*"
|
|
}, {
|
|
ua: "GT-I9300I"
|
|
}],
|
|
dpi: [304.8, 305.8],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-I9195/*"
|
|
}, {
|
|
ua: "GT-I9195"
|
|
}],
|
|
dpi: [249.4, 256.7],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SPH-L520/*"
|
|
}, {
|
|
ua: "SPH-L520"
|
|
}],
|
|
dpi: [249.4, 255.9],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SAMSUNG-SGH-I717/*"
|
|
}, {
|
|
ua: "SAMSUNG-SGH-I717"
|
|
}],
|
|
dpi: 285.8,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SPH-D710/*"
|
|
}, {
|
|
ua: "SPH-D710"
|
|
}],
|
|
dpi: [217.7, 204.2],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/GT-N7100/*"
|
|
}, {
|
|
ua: "GT-N7100"
|
|
}],
|
|
dpi: 265.1,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SCH-I605/*"
|
|
}, {
|
|
ua: "SCH-I605"
|
|
}],
|
|
dpi: 265.1,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/Galaxy Nexus/*"
|
|
}, {
|
|
ua: "Galaxy Nexus"
|
|
}],
|
|
dpi: [315.3, 314.2],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N910H/*"
|
|
}, {
|
|
ua: "SM-N910H"
|
|
}],
|
|
dpi: [515.1, 518],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-N910C/*"
|
|
}, {
|
|
ua: "SM-N910C"
|
|
}],
|
|
dpi: [515.2, 520.2],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G130M/*"
|
|
}, {
|
|
ua: "SM-G130M"
|
|
}],
|
|
dpi: [165.9, 164.8],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G928I/*"
|
|
}, {
|
|
ua: "SM-G928I"
|
|
}],
|
|
dpi: [515.1, 518.4],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G920F/*"
|
|
}, {
|
|
ua: "SM-G920F"
|
|
}],
|
|
dpi: 580.6,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G920P/*"
|
|
}, {
|
|
ua: "SM-G920P"
|
|
}],
|
|
dpi: [522.5, 577],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G925F/*"
|
|
}, {
|
|
ua: "SM-G925F"
|
|
}],
|
|
dpi: 580.6,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G925V/*"
|
|
}, {
|
|
ua: "SM-G925V"
|
|
}],
|
|
dpi: [522.5, 576.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G930F/*"
|
|
}, {
|
|
ua: "SM-G930F"
|
|
}],
|
|
dpi: 576.6,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G935F/*"
|
|
}, {
|
|
ua: "SM-G935F"
|
|
}],
|
|
dpi: 533,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G950F/*"
|
|
}, {
|
|
ua: "SM-G950F"
|
|
}],
|
|
dpi: [562.707, 565.293],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G955U/*"
|
|
}, {
|
|
ua: "SM-G955U"
|
|
}],
|
|
dpi: [522.514, 525.762],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G955F/*"
|
|
}, {
|
|
ua: "SM-G955F"
|
|
}],
|
|
dpi: [522.514, 525.762],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960F/*"
|
|
}, {
|
|
ua: "SM-G960F"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G9600/*"
|
|
}, {
|
|
ua: "SM-G9600"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960T/*"
|
|
}, {
|
|
ua: "SM-G960T"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960N/*"
|
|
}, {
|
|
ua: "SM-G960N"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960U/*"
|
|
}, {
|
|
ua: "SM-G960U"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G9608/*"
|
|
}, {
|
|
ua: "SM-G9608"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960FD/*"
|
|
}, {
|
|
ua: "SM-G960FD"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G960W/*"
|
|
}, {
|
|
ua: "SM-G960W"
|
|
}],
|
|
dpi: [569.575, 571.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G965F/*"
|
|
}, {
|
|
ua: "SM-G965F"
|
|
}],
|
|
dpi: 529,
|
|
bw: 2,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Sony/*/C6903/*"
|
|
}, {
|
|
ua: "C6903"
|
|
}],
|
|
dpi: [442.5, 443.3],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Sony/*/D6653/*"
|
|
}, {
|
|
ua: "D6653"
|
|
}],
|
|
dpi: [428.6, 427.6],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Sony/*/E6653/*"
|
|
}, {
|
|
ua: "E6653"
|
|
}],
|
|
dpi: [428.6, 425.7],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Sony/*/E6853/*"
|
|
}, {
|
|
ua: "E6853"
|
|
}],
|
|
dpi: [403.4, 401.9],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Sony/*/SGP321/*"
|
|
}, {
|
|
ua: "SGP321"
|
|
}],
|
|
dpi: [224.7, 224.1],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "TCT/*/ALCATEL ONE TOUCH Fierce/*"
|
|
}, {
|
|
ua: "ALCATEL ONE TOUCH Fierce"
|
|
}],
|
|
dpi: [240, 247.5],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "THL/*/thl 5000/*"
|
|
}, {
|
|
ua: "thl 5000"
|
|
}],
|
|
dpi: [480, 443.3],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Fly/*/IQ4412/*"
|
|
}, {
|
|
ua: "IQ4412"
|
|
}],
|
|
dpi: 307.9,
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "ZTE/*/ZTE Blade L2/*"
|
|
}, {
|
|
ua: "ZTE Blade L2"
|
|
}],
|
|
dpi: 240,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "BENEVE/*/VR518/*"
|
|
}, {
|
|
ua: "VR518"
|
|
}],
|
|
dpi: 480,
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [640, 960]
|
|
}],
|
|
dpi: [325.1, 328.4],
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [640, 1136]
|
|
}],
|
|
dpi: [317.1, 320.2],
|
|
bw: 3,
|
|
ac: 1e3
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [750, 1334]
|
|
}],
|
|
dpi: 326.4,
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [1242, 2208]
|
|
}],
|
|
dpi: [453.6, 458.4],
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [1125, 2001]
|
|
}],
|
|
dpi: [410.9, 415.4],
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [1125, 2436]
|
|
}],
|
|
dpi: 458,
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Huawei/*/EML-L29/*"
|
|
}, {
|
|
ua: "EML-L29"
|
|
}],
|
|
dpi: 428,
|
|
bw: 3.45,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "Nokia/*/Nokia 7.1/*"
|
|
}, {
|
|
ua: "Nokia 7.1"
|
|
}],
|
|
dpi: [432, 431.9],
|
|
bw: 3,
|
|
ac: 500
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [1242, 2688]
|
|
}],
|
|
dpi: 458,
|
|
bw: 4,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G570M/*"
|
|
}, {
|
|
ua: "SM-G570M"
|
|
}],
|
|
dpi: 320,
|
|
bw: 3.684,
|
|
ac: 1e3
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G970F/*"
|
|
}, {
|
|
ua: "SM-G970F"
|
|
}],
|
|
dpi: 438,
|
|
bw: 2.281,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G973F/*"
|
|
}, {
|
|
ua: "SM-G973F"
|
|
}],
|
|
dpi: 550,
|
|
bw: 2.002,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G975F/*"
|
|
}, {
|
|
ua: "SM-G975F"
|
|
}],
|
|
dpi: 522,
|
|
bw: 2.054,
|
|
ac: 500
|
|
}, {
|
|
type: "android",
|
|
rules: [{
|
|
mdmh: "samsung/*/SM-G977F/*"
|
|
}, {
|
|
ua: "SM-G977F"
|
|
}],
|
|
dpi: 505,
|
|
bw: 2.334,
|
|
ac: 500
|
|
}, {
|
|
type: "ios",
|
|
rules: [{
|
|
res: [828, 1792]
|
|
}],
|
|
dpi: 326,
|
|
bw: 5,
|
|
ac: 500
|
|
}]
|
|
};
|
|
|
|
function Z(t, e) {
|
|
if (this.dpdb = Q, this.recalculateDeviceParams_(), t) {
|
|
this.onDeviceParamsUpdated = e;
|
|
var n = new XMLHttpRequest,
|
|
i = this;
|
|
n.open("GET", t, !0), n.addEventListener("load", (function() {
|
|
i.loading = !1, n.status >= 200 && n.status <= 299 ? (i.dpdb = JSON.parse(n.response), i.recalculateDeviceParams_()) : console.error("Error loading online DPDB!")
|
|
})), n.send()
|
|
}
|
|
}
|
|
|
|
function J(t) {
|
|
this.xdpi = t.xdpi, this.ydpi = t.ydpi, this.bevelMm = t.bevelMm
|
|
}
|
|
|
|
function K(t, e) {
|
|
this.set(t, e)
|
|
}
|
|
|
|
function $(t, e) {
|
|
this.kFilter = t, this.isDebug = e, this.currentAccelMeasurement = new K, this.currentGyroMeasurement = new K, this.previousGyroMeasurement = new K, a() ? this.filterQ = new V(-1, 0, 0, 1) : this.filterQ = new V(1, 0, 0, 1), this.previousFilterQ = new V, this.previousFilterQ.copy(this.filterQ), this.accelQ = new V, this.isOrientationInitialized = !1, this.estimatedGravity = new U, this.measuredGravity = new U, this.gyroIntegralQ = new V
|
|
}
|
|
|
|
function tt(t, e) {
|
|
this.predictionTimeS = t, this.isDebug = e, this.previousQ = new V, this.previousTimestampS = null, this.deltaQ = new V, this.outQ = new V
|
|
}
|
|
|
|
function et(t, e, n, i) {
|
|
this.yawOnly = n, this.accelerometer = new U, this.gyroscope = new U, this.filter = new $(t, i), this.posePredictor = new tt(e, i), this.isFirefoxAndroid = h(), this.isIOS = a();
|
|
var r = u();
|
|
this.isDeviceMotionInRadians = !this.isIOS && r && r < 66, this.isWithoutDeviceMotion = p() || d(), this.filterToWorldQ = new V, a() ? this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), Math.PI / 2) : this.filterToWorldQ.setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), this.inverseWorldToScreenQ = new V, this.worldToScreenQ = new V, this.originalPoseAdjustQ = new V, this.originalPoseAdjustQ.setFromAxisAngle(new U(0, 0, 1), -window.orientation * Math.PI / 180), this.setScreenTransform_(), m() && this.filterToWorldQ.multiply(this.inverseWorldToScreenQ), this.resetQ = new V, this.orientationOut_ = new Float32Array(4), this.start()
|
|
}
|
|
Z.prototype.getDeviceParams = function() {
|
|
return this.deviceParams
|
|
}, Z.prototype.recalculateDeviceParams_ = function() {
|
|
var t = this.calcDeviceParams_();
|
|
t ? (this.deviceParams = t, this.onDeviceParamsUpdated && this.onDeviceParamsUpdated(this.deviceParams)) : console.error("Failed to recalculate device parameters.")
|
|
}, Z.prototype.calcDeviceParams_ = function() {
|
|
var t = this.dpdb;
|
|
if (!t) return console.error("DPDB not available."), null;
|
|
if (1 != t.format) return console.error("DPDB has unexpected format version."), null;
|
|
if (!t.devices || !t.devices.length) return console.error("DPDB does not have a devices section."), null;
|
|
var e = navigator.userAgent || navigator.vendor || window.opera,
|
|
n = g(),
|
|
i = v();
|
|
if (!t.devices) return console.error("DPDB has no devices section."), null;
|
|
for (var r = 0; r < t.devices.length; r++) {
|
|
var o = t.devices[r];
|
|
if (o.rules)
|
|
if ("ios" == o.type || "android" == o.type) {
|
|
if (a() == ("ios" == o.type)) {
|
|
for (var s = !1, l = 0; l < o.rules.length; l++) {
|
|
var c = o.rules[l];
|
|
if (this.ruleMatches_(c, e, n, i)) {
|
|
s = !0;
|
|
break
|
|
}
|
|
}
|
|
if (s) return new J({
|
|
xdpi: o.dpi[0] || o.dpi,
|
|
ydpi: o.dpi[1] || o.dpi,
|
|
bevelMm: o.bw
|
|
})
|
|
}
|
|
} else console.warn("Device[" + r + "] has invalid type.");
|
|
else console.warn("Device[" + r + "] has no rules section.")
|
|
}
|
|
return console.warn("No DPDB device match."), null
|
|
}, Z.prototype.ruleMatches_ = function(t, e, n, i) {
|
|
if (!t.ua && !t.res) return !1;
|
|
if (t.ua && "SM" === t.ua.substring(0, 2) && (t.ua = t.ua.substring(0, 7)), t.ua && e.indexOf(t.ua) < 0) return !1;
|
|
if (t.res) {
|
|
if (!t.res[0] || !t.res[1]) return !1;
|
|
var r = t.res[0],
|
|
o = t.res[1];
|
|
if (Math.min(n, i) != Math.min(r, o) || Math.max(n, i) != Math.max(r, o)) return !1
|
|
}
|
|
return !0
|
|
}, K.prototype.set = function(t, e) {
|
|
this.sample = t, this.timestampS = e
|
|
}, K.prototype.copy = function(t) {
|
|
this.set(t.sample, t.timestampS)
|
|
}, $.prototype.addAccelMeasurement = function(t, e) {
|
|
this.currentAccelMeasurement.set(t, e)
|
|
}, $.prototype.addGyroMeasurement = function(t, e) {
|
|
this.currentGyroMeasurement.set(t, e);
|
|
var n, i = e - this.previousGyroMeasurement.timestampS;
|
|
n = i, isNaN(n) || n <= .001 || n > 1 || this.run_(), this.previousGyroMeasurement.copy(this.currentGyroMeasurement)
|
|
}, $.prototype.run_ = function() {
|
|
if (!this.isOrientationInitialized) return this.accelQ = this.accelToQuaternion_(this.currentAccelMeasurement.sample), this.previousFilterQ.copy(this.accelQ), void(this.isOrientationInitialized = !0);
|
|
var t = this.currentGyroMeasurement.timestampS - this.previousGyroMeasurement.timestampS,
|
|
e = this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample, t);
|
|
this.gyroIntegralQ.multiply(e), this.filterQ.copy(this.previousFilterQ), this.filterQ.multiply(e);
|
|
var n = new V;
|
|
n.copy(this.filterQ), n.inverse(), this.estimatedGravity.set(0, 0, -1), this.estimatedGravity.applyQuaternion(n), this.estimatedGravity.normalize(), this.measuredGravity.copy(this.currentAccelMeasurement.sample), this.measuredGravity.normalize();
|
|
var i, r = new V;
|
|
r.setFromUnitVectors(this.estimatedGravity, this.measuredGravity), r.inverse(), this.isDebug && console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)", z * ((i = r).w > 1 ? (console.warn("getQuaternionAngle: w > 1"), 0) : 2 * Math.acos(i.w)), this.estimatedGravity.x.toFixed(1), this.estimatedGravity.y.toFixed(1), this.estimatedGravity.z.toFixed(1), this.measuredGravity.x.toFixed(1), this.measuredGravity.y.toFixed(1), this.measuredGravity.z.toFixed(1));
|
|
var o = new V;
|
|
o.copy(this.filterQ), o.multiply(r), this.filterQ.slerp(o, 1 - this.kFilter), this.previousFilterQ.copy(this.filterQ)
|
|
}, $.prototype.getOrientation = function() {
|
|
return this.filterQ
|
|
}, $.prototype.accelToQuaternion_ = function(t) {
|
|
var e = new U;
|
|
e.copy(t), e.normalize();
|
|
var n = new V;
|
|
return n.setFromUnitVectors(new U(0, 0, -1), e), n.inverse(), n
|
|
}, $.prototype.gyroToQuaternionDelta_ = function(t, e) {
|
|
var n = new V,
|
|
i = new U;
|
|
return i.copy(t), i.normalize(), n.setFromAxisAngle(i, t.length() * e), n
|
|
}, tt.prototype.getPrediction = function(t, e, n) {
|
|
if (!this.previousTimestampS) return this.previousQ.copy(t), this.previousTimestampS = n, t;
|
|
var i = new U;
|
|
i.copy(e), i.normalize();
|
|
var r = e.length();
|
|
if (r < 20 * F) return this.isDebug && console.log("Moving slowly, at %s deg/s: no prediction", (z * r).toFixed(1)), this.outQ.copy(t), this.previousQ.copy(t), this.outQ;
|
|
var o = r * this.predictionTimeS;
|
|
return this.deltaQ.setFromAxisAngle(i, o), this.outQ.copy(this.previousQ), this.outQ.multiply(this.deltaQ), this.previousQ.copy(t), this.previousTimestampS = n, this.outQ
|
|
}, et.prototype.getPosition = function() {
|
|
return null
|
|
}, et.prototype.getOrientation = function() {
|
|
var t = void 0;
|
|
if (this.isWithoutDeviceMotion && this._deviceOrientationQ) return this.deviceOrientationFixQ = this.deviceOrientationFixQ || (n = (new V).setFromAxisAngle(new U(0, 0, -1), 0), i = new V, -90 === window.orientation ? i.setFromAxisAngle(new U(0, 1, 0), Math.PI / -2) : i.setFromAxisAngle(new U(0, 1, 0), Math.PI / 2), n.multiply(i)), this.deviceOrientationFilterToWorldQ = this.deviceOrientationFilterToWorldQ || ((e = new V).setFromAxisAngle(new U(1, 0, 0), -Math.PI / 2), e), t = this._deviceOrientationQ, (r = new V).copy(t), r.multiply(this.deviceOrientationFilterToWorldQ), r.multiply(this.resetQ), r.multiply(this.worldToScreenQ), r.multiplyQuaternions(this.deviceOrientationFixQ, r), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_;
|
|
var e, n, i, r, o = this.filter.getOrientation();
|
|
return t = this.posePredictor.getPrediction(o, this.gyroscope, this.previousTimestampS), (r = new V).copy(this.filterToWorldQ), r.multiply(this.resetQ), r.multiply(t), r.multiply(this.worldToScreenQ), this.yawOnly && (r.x = 0, r.z = 0, r.normalize()), this.orientationOut_[0] = r.x, this.orientationOut_[1] = r.y, this.orientationOut_[2] = r.z, this.orientationOut_[3] = r.w, this.orientationOut_
|
|
}, et.prototype.resetPose = function() {
|
|
this.resetQ.copy(this.filter.getOrientation()), this.resetQ.x = 0, this.resetQ.y = 0, this.resetQ.z *= -1, this.resetQ.normalize(), m() && this.resetQ.multiply(this.inverseWorldToScreenQ), this.resetQ.multiply(this.originalPoseAdjustQ)
|
|
}, et.prototype.onDeviceOrientation_ = function(t) {
|
|
this._deviceOrientationQ = this._deviceOrientationQ || new V;
|
|
var e = t.alpha,
|
|
n = t.beta,
|
|
i = t.gamma;
|
|
e = (e || 0) * Math.PI / 180, n = (n || 0) * Math.PI / 180, i = (i || 0) * Math.PI / 180, this._deviceOrientationQ.setFromEulerYXZ(n, e, -i)
|
|
}, et.prototype.onDeviceMotion_ = function(t) {
|
|
this.updateDeviceMotion_(t)
|
|
}, et.prototype.updateDeviceMotion_ = function(t) {
|
|
var e = t.accelerationIncludingGravity,
|
|
n = t.rotationRate,
|
|
i = t.timeStamp / 1e3,
|
|
r = i - this.previousTimestampS;
|
|
return r < 0 ? (S("fusion-pose-sensor:invalid:non-monotonic", "Invalid timestamps detected: non-monotonic timestamp from devicemotion"), void(this.previousTimestampS = i)) : r <= .001 || r > 1 ? (S("fusion-pose-sensor:invalid:outside-threshold", "Invalid timestamps detected: Timestamp from devicemotion outside expected range."), void(this.previousTimestampS = i)) : (this.accelerometer.set(-e.x, -e.y, -e.z), n && (f() ? this.gyroscope.set(-n.beta, n.alpha, n.gamma) : this.gyroscope.set(n.alpha, n.beta, n.gamma), this.isDeviceMotionInRadians || this.gyroscope.multiplyScalar(Math.PI / 180), this.filter.addGyroMeasurement(this.gyroscope, i)), this.filter.addAccelMeasurement(this.accelerometer, i), void(this.previousTimestampS = i))
|
|
}, et.prototype.onOrientationChange_ = function(t) {
|
|
this.setScreenTransform_()
|
|
}, et.prototype.onMessage_ = function(t) {
|
|
var e = t.data;
|
|
e && e.type && "devicemotion" === e.type.toLowerCase() && this.updateDeviceMotion_(e.deviceMotionEvent)
|
|
}, et.prototype.setScreenTransform_ = function() {
|
|
switch (this.worldToScreenQ.set(0, 0, 0, 1), window.orientation) {
|
|
case 0:
|
|
break;
|
|
case 90:
|
|
this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), -Math.PI / 2);
|
|
break;
|
|
case -90:
|
|
this.worldToScreenQ.setFromAxisAngle(new U(0, 0, 1), Math.PI / 2)
|
|
}
|
|
this.inverseWorldToScreenQ.copy(this.worldToScreenQ), this.inverseWorldToScreenQ.inverse()
|
|
}, et.prototype.start = function() {
|
|
var t, e, n;
|
|
this.onDeviceMotionCallback_ = this.onDeviceMotion_.bind(this), this.onOrientationChangeCallback_ = this.onOrientationChange_.bind(this), this.onMessageCallback_ = this.onMessage_.bind(this), this.onDeviceOrientationCallback_ = this.onDeviceOrientation_.bind(this), a() && (t = window.self !== window.top, e = E(document.referrer), n = E(window.location.href), t && e !== n) && window.addEventListener("message", this.onMessageCallback_), window.addEventListener("orientationchange", this.onOrientationChangeCallback_), this.isWithoutDeviceMotion ? window.addEventListener("deviceorientation", this.onDeviceOrientationCallback_) : window.addEventListener("devicemotion", this.onDeviceMotionCallback_)
|
|
}, et.prototype.stop = function() {
|
|
window.removeEventListener("devicemotion", this.onDeviceMotionCallback_), window.removeEventListener("deviceorientation", this.onDeviceOrientationCallback_), window.removeEventListener("orientationchange", this.onOrientationChangeCallback_), window.removeEventListener("message", this.onMessageCallback_)
|
|
};
|
|
var nt = new U(1, 0, 0),
|
|
it = new U(0, 0, 1),
|
|
rt = new V;
|
|
rt.setFromAxisAngle(nt, -Math.PI / 2), rt.multiply((new V).setFromAxisAngle(it, Math.PI / 2));
|
|
var ot = function() {
|
|
function t(e) {
|
|
! function(t, e) {
|
|
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
|
|
}(this, t), this.config = e, this.sensor = null, this.fusionSensor = null, this._out = new Float32Array(4), this.api = null, this.errors = [], this._sensorQ = new V, this._outQ = new V, this._onSensorRead = this._onSensorRead.bind(this), this._onSensorError = this._onSensorError.bind(this), this.init()
|
|
}
|
|
return r(t, [{
|
|
key: "init",
|
|
value: function() {
|
|
var t = null;
|
|
try {
|
|
(t = new RelativeOrientationSensor({
|
|
frequency: 60,
|
|
referenceFrame: "screen"
|
|
})).addEventListener("error", this._onSensorError)
|
|
} catch (t) {
|
|
this.errors.push(t), "SecurityError" === t.name ? (console.error("Cannot construct sensors due to the Feature Policy"), console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'), this.useDeviceMotion()) : "ReferenceError" === t.name ? this.useDeviceMotion() : console.error(t)
|
|
}
|
|
t && (this.api = "sensor", this.sensor = t, this.sensor.addEventListener("reading", this._onSensorRead), this.sensor.start())
|
|
}
|
|
}, {
|
|
key: "useDeviceMotion",
|
|
value: function() {
|
|
this.api = "devicemotion", this.fusionSensor = new et(this.config.K_FILTER, this.config.PREDICTION_TIME_S, this.config.YAW_ONLY, this.config.DEBUG), this.sensor && (this.sensor.removeEventListener("reading", this._onSensorRead), this.sensor.removeEventListener("error", this._onSensorError), this.sensor = null)
|
|
}
|
|
}, {
|
|
key: "getOrientation",
|
|
value: function() {
|
|
if (this.fusionSensor) return this.fusionSensor.getOrientation();
|
|
if (!this.sensor || !this.sensor.quaternion) return this._out[0] = this._out[1] = this._out[2] = 0, this._out[3] = 1, this._out;
|
|
var t = this.sensor.quaternion;
|
|
this._sensorQ.set(t[0], t[1], t[2], t[3]);
|
|
var e = this._outQ;
|
|
return e.copy(rt), e.multiply(this._sensorQ), this.config.YAW_ONLY && (e.x = e.z = 0, e.normalize()), this._out[0] = e.x, this._out[1] = e.y, this._out[2] = e.z, this._out[3] = e.w, this._out
|
|
}
|
|
}, {
|
|
key: "_onSensorError",
|
|
value: function(t) {
|
|
this.errors.push(t.error), "NotAllowedError" === t.error.name ? console.error("Permission to access sensor was denied") : "NotReadableError" === t.error.name ? console.error("Sensor could not be read") : console.error(t.error), this.useDeviceMotion()
|
|
}
|
|
}, {
|
|
key: "_onSensorRead",
|
|
value: function() {}
|
|
}]), t
|
|
}();
|
|
|
|
function st() {
|
|
this.loadIcon_();
|
|
var t = document.createElement("div");
|
|
(o = t.style).position = "fixed", o.top = 0, o.right = 0, o.bottom = 0, o.left = 0, o.backgroundColor = "gray", o.fontFamily = "sans-serif", o.zIndex = 1e6;
|
|
var e = document.createElement("img");
|
|
e.src = this.icon, (o = e.style).marginLeft = "25%", o.marginTop = "25%", o.width = "50%", t.appendChild(e);
|
|
var n = document.createElement("div");
|
|
(o = n.style).textAlign = "center", o.fontSize = "16px", o.lineHeight = "24px", o.margin = "24px 25%", o.width = "50%", n.innerHTML = "Place your phone into your Cardboard viewer.", t.appendChild(n);
|
|
var i = document.createElement("div");
|
|
(o = i.style).backgroundColor = "#CFD8DC", o.position = "fixed", o.bottom = 0, o.width = "100%", o.height = "48px", o.padding = "14px 24px", o.boxSizing = "border-box", o.color = "#656A6B", t.appendChild(i);
|
|
var r = document.createElement("div");
|
|
r.style.float = "left", r.innerHTML = "No Cardboard viewer?";
|
|
var o, s = document.createElement("a");
|
|
s.href = "https://www.google.com/get/cardboard/get-cardboard/", s.innerHTML = "get one", s.target = "_blank", (o = s.style).float = "right", o.fontWeight = 600, o.textTransform = "uppercase", o.borderLeft = "1px solid gray", o.paddingLeft = "24px", o.textDecoration = "none", o.color = "#656A6B", i.appendChild(r), i.appendChild(s), this.overlay = t, this.text = n, this.hide()
|
|
}
|
|
|
|
function at(t) {
|
|
try {
|
|
this.selectedKey = localStorage.getItem("WEBVR_CARDBOARD_VIEWER")
|
|
} catch (t) {
|
|
console.error("Failed to load viewer profile: %s", t)
|
|
}
|
|
this.selectedKey || (this.selectedKey = t || "CardboardV1"), this.dialog = this.createDialog_(q.Viewers), this.root = null, this.onChangeCallbacks_ = []
|
|
}
|
|
st.prototype.show = function(t) {
|
|
t || this.overlay.parentElement ? t && (this.overlay.parentElement && this.overlay.parentElement != t && this.overlay.parentElement.removeChild(this.overlay), t.appendChild(this.overlay)) : document.body.appendChild(this.overlay), this.overlay.style.display = "block";
|
|
var e = this.overlay.querySelector("img").style;
|
|
m() ? (e.width = "20%", e.marginLeft = "40%", e.marginTop = "3%") : (e.width = "50%", e.marginLeft = "25%", e.marginTop = "25%")
|
|
}, st.prototype.hide = function() {
|
|
this.overlay.style.display = "none"
|
|
}, st.prototype.showTemporarily = function(t, e) {
|
|
this.show(e), this.timer = setTimeout(this.hide.bind(this), t)
|
|
}, st.prototype.disableShowTemporarily = function() {
|
|
clearTimeout(this.timer)
|
|
}, st.prototype.update = function() {
|
|
this.disableShowTemporarily(), !m() && _() ? this.show() : this.hide()
|
|
}, st.prototype.loadIcon_ = function() {
|
|
this.icon = "data:image/svg+xml," + encodeURIComponent("<svg width='198' height='240' viewBox='0 0 198 240' xmlns='http://www.w3.org/2000/svg'><g fill='none' fill-rule='evenodd'><path d='M149.625 109.527l6.737 3.891v.886c0 .177.013.36.038.549.01.081.02.162.027.242.14 1.415.974 2.998 2.105 3.999l5.72 5.062.081-.09s4.382-2.53 5.235-3.024l25.97 14.993v54.001c0 .771-.386 1.217-.948 1.217-.233 0-.495-.076-.772-.236l-23.967-13.838-.014.024-27.322 15.775-.85-1.323c-4.731-1.529-9.748-2.74-14.951-3.61a.27.27 0 0 0-.007.024l-5.067 16.961-7.891 4.556-.037-.063v27.59c0 .772-.386 1.217-.948 1.217-.232 0-.495-.076-.772-.236l-42.473-24.522c-.95-.549-1.72-1.877-1.72-2.967v-1.035l-.021.047a5.111 5.111 0 0 0-1.816-.399 5.682 5.682 0 0 0-.546.001 13.724 13.724 0 0 1-1.918-.041c-1.655-.153-3.2-.6-4.404-1.296l-46.576-26.89.005.012-10.278-18.75c-1.001-1.827-.241-4.216 1.698-5.336l56.011-32.345a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.659 3.227 1.853l.005-.003.227.413-.006.004a9.63 9.63 0 0 0 1.477 2.018l.277.27c1.914 1.85 4.468 2.801 7.113 2.801 1.949 0 3.948-.517 5.775-1.572.013 0 7.319-4.219 7.319-4.219a4.194 4.194 0 0 1 2.099-.572c1.326 0 2.572.658 3.226 1.853l3.25 5.928.022-.018 6.785 3.917-.105-.182 46.881-26.965m0-1.635c-.282 0-.563.073-.815.218l-46.169 26.556-5.41-3.124-3.005-5.481c-.913-1.667-2.699-2.702-4.66-2.703-1.011 0-2.02.274-2.917.792a3825 3825 0 0 1-7.275 4.195l-.044.024a9.937 9.937 0 0 1-4.957 1.353c-2.292 0-4.414-.832-5.976-2.342l-.252-.245a7.992 7.992 0 0 1-1.139-1.534 1.379 1.379 0 0 0-.06-.122l-.227-.414a1.718 1.718 0 0 0-.095-.154c-.938-1.574-2.673-2.545-4.571-2.545-1.011 0-2.02.274-2.917.792L3.125 155.502c-2.699 1.559-3.738 4.94-2.314 7.538l10.278 18.75c.177.323.448.563.761.704l46.426 26.804c1.403.81 3.157 1.332 5.072 1.508a15.661 15.661 0 0 0 2.146.046 4.766 4.766 0 0 1 .396 0c.096.004.19.011.283.022.109 1.593 1.159 3.323 2.529 4.114l42.472 24.522c.524.302 1.058.455 1.59.455 1.497 0 2.583-1.2 2.583-2.852v-26.562l7.111-4.105a1.64 1.64 0 0 0 .749-.948l4.658-15.593c4.414.797 8.692 1.848 12.742 3.128l.533.829a1.634 1.634 0 0 0 2.193.531l26.532-15.317L193 192.433c.523.302 1.058.455 1.59.455 1.497 0 2.583-1.199 2.583-2.852v-54.001c0-.584-.312-1.124-.818-1.416l-25.97-14.993a1.633 1.633 0 0 0-1.636.001c-.606.351-2.993 1.73-4.325 2.498l-4.809-4.255c-.819-.725-1.461-1.933-1.561-2.936a7.776 7.776 0 0 0-.033-.294 2.487 2.487 0 0 1-.023-.336v-.886c0-.584-.312-1.123-.817-1.416l-6.739-3.891a1.633 1.633 0 0 0-.817-.219' fill='#455A64'/><path d='M96.027 132.636l46.576 26.891c1.204.695 1.979 1.587 2.242 2.541l-.01.007-81.374 46.982h-.001c-1.654-.152-3.199-.6-4.403-1.295l-46.576-26.891 83.546-48.235' fill='#FAFAFA'/><path d='M63.461 209.174c-.008 0-.015 0-.022-.002-1.693-.156-3.228-.609-4.441-1.309l-46.576-26.89a.118.118 0 0 1 0-.203l83.546-48.235a.117.117 0 0 1 .117 0l46.576 26.891c1.227.708 2.021 1.612 2.296 2.611a.116.116 0 0 1-.042.124l-.021.016-81.375 46.981a.11.11 0 0 1-.058.016zm-50.747-28.303l46.401 26.79c1.178.68 2.671 1.121 4.32 1.276l81.272-46.922c-.279-.907-1.025-1.73-2.163-2.387l-46.517-26.857-83.313 48.1z' fill='#607D8B'/><path d='M148.327 165.471a5.85 5.85 0 0 1-.546.001c-1.894-.083-3.302-1.038-3.145-2.132a2.693 2.693 0 0 0-.072-1.105l-81.103 46.822c.628.058 1.272.073 1.918.042.182-.009.364-.009.546-.001 1.894.083 3.302 1.038 3.145 2.132l79.257-45.759' fill='#FFF'/><path d='M69.07 211.347a.118.118 0 0 1-.115-.134c.045-.317-.057-.637-.297-.925-.505-.61-1.555-1.022-2.738-1.074a5.966 5.966 0 0 0-.535.001 14.03 14.03 0 0 1-1.935-.041.117.117 0 0 1-.103-.092.116.116 0 0 1 .055-.126l81.104-46.822a.117.117 0 0 1 .171.07c.104.381.129.768.074 1.153-.045.316.057.637.296.925.506.61 1.555 1.021 2.739 1.073.178.008.357.008.535-.001a.117.117 0 0 1 .064.218l-79.256 45.759a.114.114 0 0 1-.059.016zm-3.405-2.372c.089 0 .177.002.265.006 1.266.056 2.353.488 2.908 1.158.227.274.35.575.36.882l78.685-45.429c-.036 0-.072-.001-.107-.003-1.267-.056-2.354-.489-2.909-1.158-.282-.34-.402-.724-.347-1.107a2.604 2.604 0 0 0-.032-.91L63.846 208.97a13.91 13.91 0 0 0 1.528.012c.097-.005.194-.007.291-.007z' fill='#607D8B'/><path d='M2.208 162.134c-1.001-1.827-.241-4.217 1.698-5.337l56.011-32.344c1.939-1.12 4.324-.546 5.326 1.281l.232.41a9.344 9.344 0 0 0 1.47 2.021l.278.27c3.325 3.214 8.583 3.716 12.888 1.23l7.319-4.22c1.94-1.119 4.324-.546 5.325 1.282l3.25 5.928-83.519 48.229-10.278-18.75z' fill='#FAFAFA'/><path d='M12.486 181.001a.112.112 0 0 1-.031-.005.114.114 0 0 1-.071-.056L2.106 162.19c-1.031-1.88-.249-4.345 1.742-5.494l56.01-32.344a4.328 4.328 0 0 1 2.158-.588c1.415 0 2.65.702 3.311 1.882.01.008.018.017.024.028l.227.414a.122.122 0 0 1 .013.038 9.508 9.508 0 0 0 1.439 1.959l.275.266c1.846 1.786 4.344 2.769 7.031 2.769 1.977 0 3.954-.538 5.717-1.557a.148.148 0 0 1 .035-.013l7.284-4.206a4.321 4.321 0 0 1 2.157-.588c1.427 0 2.672.716 3.329 1.914l3.249 5.929a.116.116 0 0 1-.044.157l-83.518 48.229a.116.116 0 0 1-.059.016zm49.53-57.004c-.704 0-1.41.193-2.041.557l-56.01 32.345c-1.882 1.086-2.624 3.409-1.655 5.179l10.221 18.645 83.317-48.112-3.195-5.829c-.615-1.122-1.783-1.792-3.124-1.792a4.08 4.08 0 0 0-2.04.557l-7.317 4.225a.148.148 0 0 1-.035.013 11.7 11.7 0 0 1-5.801 1.569c-2.748 0-5.303-1.007-7.194-2.835l-.278-.27a9.716 9.716 0 0 1-1.497-2.046.096.096 0 0 1-.013-.037l-.191-.347a.11.11 0 0 1-.023-.029c-.615-1.123-1.783-1.793-3.124-1.793z' fill='#607D8B'/><path d='M42.434 155.808c-2.51-.001-4.697-1.258-5.852-3.365-1.811-3.304-.438-7.634 3.059-9.654l12.291-7.098a7.599 7.599 0 0 1 3.789-1.033c2.51 0 4.697 1.258 5.852 3.365 1.811 3.304.439 7.634-3.059 9.654l-12.291 7.098a7.606 7.606 0 0 1-3.789 1.033zm13.287-20.683a7.128 7.128 0 0 0-3.555.971l-12.291 7.098c-3.279 1.893-4.573 5.942-2.883 9.024 1.071 1.955 3.106 3.122 5.442 3.122a7.13 7.13 0 0 0 3.556-.97l12.291-7.098c3.279-1.893 4.572-5.942 2.883-9.024-1.072-1.955-3.106-3.123-5.443-3.123z' fill='#607D8B'/><path d='M149.588 109.407l6.737 3.89v.887c0 .176.013.36.037.549.011.081.02.161.028.242.14 1.415.973 2.998 2.105 3.999l7.396 6.545c.177.156.358.295.541.415 1.579 1.04 2.95.466 3.062-1.282.049-.784.057-1.595.023-2.429l-.003-.16v-1.151l25.987 15.003v54c0 1.09-.77 1.53-1.72.982l-42.473-24.523c-.95-.548-1.72-1.877-1.72-2.966v-34.033' fill='#FAFAFA'/><path d='M194.553 191.25c-.257 0-.54-.085-.831-.253l-42.472-24.521c-.981-.567-1.779-1.943-1.779-3.068v-34.033h.234v34.033c0 1.051.745 2.336 1.661 2.866l42.473 24.521c.424.245.816.288 1.103.122.285-.164.442-.52.442-1.002v-53.933l-25.753-14.868.003 1.106c.034.832.026 1.654-.024 2.439-.054.844-.396 1.464-.963 1.746-.619.309-1.45.173-2.28-.373a5.023 5.023 0 0 1-.553-.426l-7.397-6.544c-1.158-1.026-1.999-2.625-2.143-4.076a9.624 9.624 0 0 0-.027-.238 4.241 4.241 0 0 1-.038-.564v-.82l-6.68-3.856.117-.202 6.738 3.89.058.034v.954c0 .171.012.351.036.533.011.083.021.165.029.246.138 1.395.948 2.935 2.065 3.923l7.397 6.545c.173.153.35.289.527.406.758.499 1.504.63 2.047.359.49-.243.786-.795.834-1.551.05-.778.057-1.591.024-2.417l-.004-.163v-1.355l.175.1 25.987 15.004.059.033v54.068c0 .569-.198.996-.559 1.204a1.002 1.002 0 0 1-.506.131' fill='#607D8B'/><path d='M145.685 163.161l24.115 13.922-25.978 14.998-1.462-.307c-6.534-2.17-13.628-3.728-21.019-4.616-4.365-.524-8.663 1.096-9.598 3.62a2.746 2.746 0 0 0-.011 1.928c1.538 4.267 4.236 8.363 7.995 12.135l.532.845-25.977 14.997-24.115-13.922 75.518-43.6' fill='#FFF'/><path d='M94.282 220.818l-.059-.033-24.29-14.024.175-.101 75.577-43.634.058.033 24.29 14.024-26.191 15.122-.045-.01-1.461-.307c-6.549-2.174-13.613-3.725-21.009-4.614a13.744 13.744 0 0 0-1.638-.097c-3.758 0-7.054 1.531-7.837 3.642a2.62 2.62 0 0 0-.01 1.848c1.535 4.258 4.216 8.326 7.968 12.091l.016.021.526.835.006.01.064.102-.105.061-25.977 14.998-.058.033zm-23.881-14.057l23.881 13.788 24.802-14.32c.546-.315.846-.489 1.017-.575l-.466-.74c-3.771-3.787-6.467-7.881-8.013-12.168a2.851 2.851 0 0 1 .011-2.008c.815-2.199 4.203-3.795 8.056-3.795.557 0 1.117.033 1.666.099 7.412.891 14.491 2.445 21.041 4.621.836.175 1.215.254 1.39.304l25.78-14.884-23.881-13.788-75.284 43.466z' fill='#607D8B'/><path d='M167.23 125.979v50.871l-27.321 15.773-6.461-14.167c-.91-1.996-3.428-1.738-5.624.574a10.238 10.238 0 0 0-2.33 4.018l-6.46 21.628-27.322 15.774v-50.871l75.518-43.6' fill='#FFF'/><path d='M91.712 220.567a.127.127 0 0 1-.059-.016.118.118 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.519-43.6a.117.117 0 0 1 .175.101v50.871c0 .041-.023.08-.059.1l-27.321 15.775a.118.118 0 0 1-.094.01.12.12 0 0 1-.071-.063l-6.46-14.168c-.375-.822-1.062-1.275-1.934-1.275-1.089 0-2.364.686-3.5 1.881a10.206 10.206 0 0 0-2.302 3.972l-6.46 21.627a.118.118 0 0 1-.054.068L91.77 220.551a.12.12 0 0 1-.058.016zm.117-50.92v50.601l27.106-15.65 6.447-21.583a10.286 10.286 0 0 1 2.357-4.065c1.18-1.242 2.517-1.954 3.669-1.954.969 0 1.731.501 2.146 1.411l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M168.543 126.213v50.87l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.624.574a10.248 10.248 0 0 0-2.33 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6' fill='#FFF'/><path d='M93.025 220.8a.123.123 0 0 1-.059-.015.12.12 0 0 1-.058-.101v-50.871c0-.042.023-.08.058-.101l75.518-43.6a.112.112 0 0 1 .117 0c.036.02.059.059.059.1v50.871a.116.116 0 0 1-.059.101l-27.321 15.774a.111.111 0 0 1-.094.01.115.115 0 0 1-.071-.062l-6.46-14.168c-.375-.823-1.062-1.275-1.935-1.275-1.088 0-2.363.685-3.499 1.881a10.19 10.19 0 0 0-2.302 3.971l-6.461 21.628a.108.108 0 0 1-.053.067l-27.322 15.775a.12.12 0 0 1-.058.015zm.117-50.919v50.6l27.106-15.649 6.447-21.584a10.293 10.293 0 0 1 2.357-4.065c1.179-1.241 2.516-1.954 3.668-1.954.969 0 1.732.502 2.147 1.412l6.407 14.051 27.152-15.676v-50.601l-75.284 43.466z' fill='#607D8B'/><path d='M169.8 177.083l-27.322 15.774-6.46-14.168c-.91-1.995-3.428-1.738-5.625.574a10.246 10.246 0 0 0-2.329 4.019l-6.461 21.627-27.321 15.774v-50.87l75.518-43.6v50.87z' fill='#FAFAFA'/><path d='M94.282 220.917a.234.234 0 0 1-.234-.233v-50.871c0-.083.045-.161.117-.202l75.518-43.601a.234.234 0 1 1 .35.202v50.871a.233.233 0 0 1-.116.202l-27.322 15.775a.232.232 0 0 1-.329-.106l-6.461-14.168c-.36-.789-.992-1.206-1.828-1.206-1.056 0-2.301.672-3.415 1.844a10.099 10.099 0 0 0-2.275 3.924l-6.46 21.628a.235.235 0 0 1-.107.136l-27.322 15.774a.23.23 0 0 1-.116.031zm.233-50.969v50.331l26.891-15.525 6.434-21.539a10.41 10.41 0 0 1 2.384-4.112c1.201-1.265 2.569-1.991 3.753-1.991 1.018 0 1.818.526 2.253 1.48l6.354 13.934 26.982-15.578v-50.331l-75.051 43.331z' fill='#607D8B'/><path d='M109.894 199.943c-1.774 0-3.241-.725-4.244-2.12a.224.224 0 0 1 .023-.294.233.233 0 0 1 .301-.023c.78.547 1.705.827 2.75.827 1.323 0 2.754-.439 4.256-1.306 5.311-3.067 9.631-10.518 9.631-16.611 0-1.927-.442-3.56-1.278-4.724a.232.232 0 0 1 .323-.327c1.671 1.172 2.591 3.381 2.591 6.219 0 6.242-4.426 13.863-9.865 17.003-1.574.908-3.084 1.356-4.488 1.356zm-2.969-1.542c.813.651 1.82.877 2.968.877h.001c1.321 0 2.753-.327 4.254-1.194 5.311-3.067 9.632-10.463 9.632-16.556 0-1.979-.463-3.599-1.326-4.761.411 1.035.625 2.275.625 3.635 0 6.243-4.426 13.883-9.865 17.023-1.574.909-3.084 1.317-4.49 1.317-.641 0-1.243-.149-1.799-.341z' fill='#607D8B'/><path d='M113.097 197.23c5.384-3.108 9.748-10.636 9.748-16.814 0-2.051-.483-3.692-1.323-4.86-1.784-1.252-4.374-1.194-7.257.47-5.384 3.108-9.748 10.636-9.748 16.814 0 2.051.483 3.692 1.323 4.86 1.784 1.252 4.374 1.194 7.257-.47' fill='#FAFAFA'/><path d='M108.724 198.614c-1.142 0-2.158-.213-3.019-.817-.021-.014-.04.014-.055-.007-.894-1.244-1.367-2.948-1.367-4.973 0-6.242 4.426-13.864 9.865-17.005 1.574-.908 3.084-1.363 4.49-1.363 1.142 0 2.158.309 3.018.913a.23.23 0 0 1 .056.056c.894 1.244 1.367 2.972 1.367 4.997 0 6.243-4.426 13.783-9.865 16.923-1.574.909-3.084 1.276-4.49 1.276zm-2.718-1.109c.774.532 1.688.776 2.718.776 1.323 0 2.754-.413 4.256-1.28 5.311-3.066 9.631-10.505 9.631-16.598 0-1.909-.434-3.523-1.255-4.685-.774-.533-1.688-.799-2.718-.799-1.323 0-2.755.441-4.256 1.308-5.311 3.066-9.631 10.506-9.631 16.599 0 1.909.434 3.517 1.255 4.679z' fill='#607D8B'/><path d='M149.318 114.262l-9.984 8.878 15.893 11.031 5.589-6.112-11.498-13.797' fill='#FAFAFA'/><path d='M169.676 120.84l-9.748 5.627c-3.642 2.103-9.528 2.113-13.147.024-3.62-2.089-3.601-5.488.041-7.591l9.495-5.608-6.729-3.885-81.836 47.071 45.923 26.514 3.081-1.779c.631-.365.869-.898.618-1.39-2.357-4.632-2.593-9.546-.683-14.262 5.638-13.92 24.509-24.815 48.618-28.07 8.169-1.103 16.68-.967 24.704.394.852.145 1.776.008 2.407-.357l3.081-1.778-25.825-14.91' fill='#FAFAFA'/><path d='M113.675 183.459a.47.47 0 0 1-.233-.062l-45.924-26.515a.468.468 0 0 1 .001-.809l81.836-47.071a.467.467 0 0 1 .466 0l6.729 3.885a.467.467 0 0 1-.467.809l-6.496-3.75-80.9 46.533 44.988 25.973 2.848-1.644c.192-.111.62-.409.435-.773-2.416-4.748-2.658-9.814-.7-14.65 2.806-6.927 8.885-13.242 17.582-18.263 8.657-4.998 19.518-8.489 31.407-10.094 8.198-1.107 16.79-.97 24.844.397.739.125 1.561.007 2.095-.301l2.381-1.374-25.125-14.506a.467.467 0 0 1 .467-.809l25.825 14.91a.467.467 0 0 1 0 .809l-3.081 1.779c-.721.417-1.763.575-2.718.413-7.963-1.351-16.457-1.486-24.563-.392-11.77 1.589-22.512 5.039-31.065 9.977-8.514 4.916-14.456 11.073-17.183 17.805-1.854 4.578-1.623 9.376.666 13.875.37.725.055 1.513-.8 2.006l-3.081 1.78a.476.476 0 0 1-.234.062' fill='#455A64'/><path d='M153.316 128.279c-2.413 0-4.821-.528-6.652-1.586-1.818-1.049-2.82-2.461-2.82-3.975 0-1.527 1.016-2.955 2.861-4.02l9.493-5.607a.233.233 0 1 1 .238.402l-9.496 5.609c-1.696.979-2.628 2.263-2.628 3.616 0 1.34.918 2.608 2.585 3.571 3.549 2.049 9.343 2.038 12.914-.024l9.748-5.628a.234.234 0 0 1 .234.405l-9.748 5.628c-1.858 1.072-4.296 1.609-6.729 1.609' fill='#607D8B'/><path d='M113.675 182.992l-45.913-26.508M113.675 183.342a.346.346 0 0 1-.175-.047l-45.913-26.508a.35.35 0 1 1 .35-.607l45.913 26.508a.35.35 0 0 1-.175.654' fill='#455A64'/><path d='M67.762 156.484v54.001c0 1.09.77 2.418 1.72 2.967l42.473 24.521c.95.549 1.72.11 1.72-.98v-54.001' fill='#FAFAFA'/><path d='M112.727 238.561c-.297 0-.62-.095-.947-.285l-42.473-24.521c-1.063-.613-1.895-2.05-1.895-3.27v-54.001a.35.35 0 1 1 .701 0v54.001c0 .96.707 2.18 1.544 2.663l42.473 24.522c.344.198.661.243.87.122.206-.119.325-.411.325-.799v-54.001a.35.35 0 1 1 .7 0v54.001c0 .655-.239 1.154-.675 1.406a1.235 1.235 0 0 1-.623.162' fill='#455A64'/><path d='M112.86 147.512h-.001c-2.318 0-4.499-.522-6.142-1.471-1.705-.984-2.643-2.315-2.643-3.749 0-1.445.952-2.791 2.68-3.788l12.041-6.953c1.668-.962 3.874-1.493 6.212-1.493 2.318 0 4.499.523 6.143 1.472 1.704.984 2.643 2.315 2.643 3.748 0 1.446-.952 2.791-2.68 3.789l-12.042 6.952c-1.668.963-3.874 1.493-6.211 1.493zm12.147-16.753c-2.217 0-4.298.497-5.861 1.399l-12.042 6.952c-1.502.868-2.33 1.998-2.33 3.182 0 1.173.815 2.289 2.293 3.142 1.538.889 3.596 1.378 5.792 1.378h.001c2.216 0 4.298-.497 5.861-1.399l12.041-6.953c1.502-.867 2.33-1.997 2.33-3.182 0-1.172-.814-2.288-2.292-3.142-1.539-.888-3.596-1.377-5.793-1.377z' fill='#607D8B'/><path d='M165.63 123.219l-5.734 3.311c-3.167 1.828-8.286 1.837-11.433.02-3.147-1.817-3.131-4.772.036-6.601l5.734-3.31 11.397 6.58' fill='#FAFAFA'/><path d='M154.233 117.448l9.995 5.771-4.682 2.704c-1.434.827-3.352 1.283-5.399 1.283-2.029 0-3.923-.449-5.333-1.263-1.29-.744-2-1.694-2-2.674 0-.991.723-1.955 2.036-2.713l5.383-3.108m0-.809l-5.734 3.31c-3.167 1.829-3.183 4.784-.036 6.601 1.568.905 3.623 1.357 5.684 1.357 2.077 0 4.159-.46 5.749-1.377l5.734-3.311-11.397-6.58M145.445 179.667c-1.773 0-3.241-.85-4.243-2.245-.067-.092-.057-.275.023-.356.08-.081.207-.12.3-.055.781.548 1.706.812 2.751.811 1.322 0 2.754-.446 4.256-1.313 5.31-3.066 9.631-10.522 9.631-16.615 0-1.927-.442-3.562-1.279-4.726a.235.235 0 0 1 .024-.301.232.232 0 0 1 .3-.027c1.67 1.172 2.59 3.38 2.59 6.219 0 6.242-4.425 13.987-9.865 17.127-1.573.908-3.083 1.481-4.488 1.481zM142.476 178c.814.651 1.82 1.002 2.969 1.002 1.322 0 2.753-.452 4.255-1.32 5.31-3.065 9.631-10.523 9.631-16.617 0-1.98-.463-3.63-1.325-4.793.411 1.035.624 2.26.624 3.62 0 6.242-4.425 13.875-9.865 17.015-1.573.909-3.084 1.376-4.489 1.376a5.49 5.49 0 0 1-1.8-.283z' fill='#607D8B'/><path d='M148.648 176.704c5.384-3.108 9.748-10.636 9.748-16.813 0-2.052-.483-3.693-1.322-4.861-1.785-1.252-4.375-1.194-7.258.471-5.383 3.108-9.748 10.636-9.748 16.813 0 2.051.484 3.692 1.323 4.86 1.785 1.253 4.374 1.195 7.257-.47' fill='#FAFAFA'/><path d='M144.276 178.276c-1.143 0-2.158-.307-3.019-.911a.217.217 0 0 1-.055-.054c-.895-1.244-1.367-2.972-1.367-4.997 0-6.241 4.425-13.875 9.865-17.016 1.573-.908 3.084-1.369 4.489-1.369 1.143 0 2.158.307 3.019.91a.24.24 0 0 1 .055.055c.894 1.244 1.367 2.971 1.367 4.997 0 6.241-4.425 13.875-9.865 17.016-1.573.908-3.084 1.369-4.489 1.369zm-2.718-1.172c.773.533 1.687.901 2.718.901 1.322 0 2.754-.538 4.256-1.405 5.31-3.066 9.631-10.567 9.631-16.661 0-1.908-.434-3.554-1.256-4.716-.774-.532-1.688-.814-2.718-.814-1.322 0-2.754.433-4.256 1.3-5.31 3.066-9.631 10.564-9.631 16.657 0 1.91.434 3.576 1.256 4.738z' fill='#607D8B'/><path d='M150.72 172.361l-.363-.295a24.105 24.105 0 0 0 2.148-3.128 24.05 24.05 0 0 0 1.977-4.375l.443.149a24.54 24.54 0 0 1-2.015 4.46 24.61 24.61 0 0 1-2.19 3.189M115.917 191.514l-.363-.294a24.174 24.174 0 0 0 2.148-3.128 24.038 24.038 0 0 0 1.976-4.375l.443.148a24.48 24.48 0 0 1-2.015 4.461 24.662 24.662 0 0 1-2.189 3.188M114 237.476V182.584 237.476' fill='#607D8B'/><g><path d='M81.822 37.474c.017-.135-.075-.28-.267-.392-.327-.188-.826-.21-1.109-.045l-6.012 3.471c-.131.076-.194.178-.191.285.002.132.002.461.002.578v.043l-.007.128-6.591 3.779c-.001 0-2.077 1.046-2.787 5.192 0 0-.912 6.961-.898 19.745.015 12.57.606 17.07 1.167 21.351.22 1.684 3.001 2.125 3.001 2.125.331.04.698-.027 1.08-.248l75.273-43.551c1.808-1.069 2.667-3.719 3.056-6.284 1.213-7.99 1.675-32.978-.275-39.878-.196-.693-.51-1.083-.868-1.282l-2.086-.79c-.727.028-1.416.467-1.534.535L82.032 37.072l-.21.402' fill='#FFF'/><path d='M144.311 1.701l2.085.79c.358.199.672.589.868 1.282 1.949 6.9 1.487 31.887.275 39.878-.39 2.565-1.249 5.215-3.056 6.284L69.21 93.486a1.78 1.78 0 0 1-.896.258l-.183-.011c0 .001-2.782-.44-3.003-2.124-.56-4.282-1.151-8.781-1.165-21.351-.015-12.784.897-19.745.897-19.745.71-4.146 2.787-5.192 2.787-5.192l6.591-3.779.007-.128v-.043c0-.117 0-.446-.002-.578-.003-.107.059-.21.191-.285l6.012-3.472a.98.98 0 0 1 .481-.11c.218 0 .449.053.627.156.193.112.285.258.268.392l.211-.402 60.744-34.836c.117-.068.806-.507 1.534-.535m0-.997l-.039.001c-.618.023-1.283.244-1.974.656l-.021.012-60.519 34.706a2.358 2.358 0 0 0-.831-.15c-.365 0-.704.084-.98.244l-6.012 3.471c-.442.255-.699.69-.689 1.166l.001.15-6.08 3.487c-.373.199-2.542 1.531-3.29 5.898l-.006.039c-.009.07-.92 7.173-.906 19.875.014 12.62.603 17.116 1.172 21.465l.002.015c.308 2.355 3.475 2.923 3.836 2.98l.034.004c.101.013.204.019.305.019a2.77 2.77 0 0 0 1.396-.392l75.273-43.552c1.811-1.071 2.999-3.423 3.542-6.997 1.186-7.814 1.734-33.096-.301-40.299-.253-.893-.704-1.527-1.343-1.882l-.132-.062-2.085-.789a.973.973 0 0 0-.353-.065' fill='#455A64'/><path d='M128.267 11.565l1.495.434-56.339 32.326' fill='#FFF'/><path d='M74.202 90.545a.5.5 0 0 1-.25-.931l18.437-10.645a.499.499 0 1 1 .499.864L74.451 90.478l-.249.067M75.764 42.654l-.108-.062.046-.171 5.135-2.964.17.045-.045.171-5.135 2.964-.063.017M70.52 90.375V46.421l.063-.036L137.84 7.554v43.954l-.062.036L70.52 90.375zm.25-43.811v43.38l66.821-38.579V7.985L70.77 46.564z' fill='#607D8B'/><path d='M86.986 83.182c-.23.149-.612.384-.849.523l-11.505 6.701c-.237.139-.206.252.068.252h.565c.275 0 .693-.113.93-.252L87.7 83.705c.237-.139.428-.253.425-.256a11.29 11.29 0 0 1-.006-.503c0-.274-.188-.377-.418-.227l-.715.463' fill='#607D8B'/><path d='M75.266 90.782H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.236-.138.615-.371.844-.519l.715-.464a.488.488 0 0 1 .266-.089c.172 0 .345.13.345.421 0 .214.001.363.003.437l.006.004-.004.069c-.003.075-.003.075-.486.356l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.108.866-.234l11.505-6.702c.168-.098.294-.173.361-.214-.004-.084-.004-.218-.004-.437l-.095-.171-.131.049-.714.463c-.232.15-.616.386-.854.525l-11.505 6.702-.029.018z' fill='#607D8B'/><path d='M75.266 89.871H74.7c-.2 0-.316-.056-.346-.166-.03-.11.043-.217.215-.317l11.505-6.702c.258-.151.694-.268.993-.268h.565c.2 0 .316.056.346.166.03.11-.043.217-.215.317l-11.505 6.702a2.282 2.282 0 0 1-.992.268zm-.6-.25l.034.001h.566c.252 0 .649-.107.866-.234l11.505-6.702.03-.018-.035-.001h-.565c-.252 0-.649.108-.867.234l-11.505 6.702-.029.018zM74.37 90.801v-1.247 1.247' fill='#607D8B'/><path d='M68.13 93.901c-.751-.093-1.314-.737-1.439-1.376-.831-4.238-1.151-8.782-1.165-21.352-.015-12.784.897-19.745.897-19.745.711-4.146 2.787-5.192 2.787-5.192l74.859-43.219c.223-.129 2.487-1.584 3.195.923 1.95 6.9 1.488 31.887.275 39.878-.389 2.565-1.248 5.215-3.056 6.283L69.21 93.653c-.382.221-.749.288-1.08.248 0 0-2.781-.441-3.001-2.125-.561-4.281-1.152-8.781-1.167-21.351-.014-12.784.898-19.745.898-19.745.71-4.146 2.787-5.191 2.787-5.191l6.598-3.81.871-.119 6.599-3.83.046-.461L68.13 93.901' fill='#FAFAFA'/><path d='M68.317 94.161l-.215-.013h-.001l-.244-.047c-.719-.156-2.772-.736-2.976-2.292-.568-4.34-1.154-8.813-1.168-21.384-.014-12.654.891-19.707.9-19.777.725-4.231 2.832-5.338 2.922-5.382l6.628-3.827.87-.119 6.446-3.742.034-.334a.248.248 0 0 1 .273-.223.248.248 0 0 1 .223.272l-.059.589-6.752 3.919-.87.118-6.556 3.785c-.031.016-1.99 1.068-2.666 5.018-.007.06-.908 7.086-.894 19.702.014 12.539.597 16.996 1.161 21.305.091.691.689 1.154 1.309 1.452a1.95 1.95 0 0 1-.236-.609c-.781-3.984-1.155-8.202-1.17-21.399-.014-12.653.891-19.707.9-19.777.725-4.231 2.832-5.337 2.922-5.382-.004.001 74.444-42.98 74.846-43.212l.028-.017c.904-.538 1.72-.688 2.36-.433.555.221.949.733 1.172 1.52 2.014 7.128 1.46 32.219.281 39.983-.507 3.341-1.575 5.515-3.175 6.462L69.335 93.869a2.023 2.023 0 0 1-1.018.292zm-.147-.507c.293.036.604-.037.915-.217l75.273-43.551c1.823-1.078 2.602-3.915 2.934-6.106 1.174-7.731 1.731-32.695-.268-39.772-.178-.631-.473-1.032-.876-1.192-.484-.193-1.166-.052-1.921.397l-.034.021-74.858 43.218c-.031.017-1.989 1.069-2.666 5.019-.007.059-.908 7.085-.894 19.702.015 13.155.386 17.351 1.161 21.303.09.461.476.983 1.037 1.139.114.025.185.037.196.039h.001z' fill='#455A64'/><path d='M69.317 68.982c.489-.281.885-.056.885.505 0 .56-.396 1.243-.885 1.525-.488.282-.884.057-.884-.504 0-.56.396-1.243.884-1.526' fill='#FFF'/><path d='M68.92 71.133c-.289 0-.487-.228-.487-.625 0-.56.396-1.243.884-1.526a.812.812 0 0 1 .397-.121c.289 0 .488.229.488.626 0 .56-.396 1.243-.885 1.525a.812.812 0 0 1-.397.121m.794-2.459a.976.976 0 0 0-.49.147c-.548.317-.978 1.058-.978 1.687 0 .486.271.812.674.812a.985.985 0 0 0 .491-.146c.548-.317.978-1.057.978-1.687 0-.486-.272-.813-.675-.813' fill='#8097A2'/><path d='M68.92 70.947c-.271 0-.299-.307-.299-.439 0-.491.361-1.116.79-1.363a.632.632 0 0 1 .303-.096c.272 0 .301.306.301.438 0 .491-.363 1.116-.791 1.364a.629.629 0 0 1-.304.096m.794-2.086a.812.812 0 0 0-.397.121c-.488.283-.884.966-.884 1.526 0 .397.198.625.487.625a.812.812 0 0 0 .397-.121c.489-.282.885-.965.885-1.525 0-.397-.199-.626-.488-.626' fill='#8097A2'/><path d='M69.444 85.35c.264-.152.477-.031.477.272 0 .303-.213.67-.477.822-.263.153-.477.031-.477-.271 0-.302.214-.671.477-.823' fill='#FFF'/><path d='M69.23 86.51c-.156 0-.263-.123-.263-.337 0-.302.214-.671.477-.823a.431.431 0 0 1 .214-.066c.156 0 .263.124.263.338 0 .303-.213.67-.477.822a.431.431 0 0 1-.214.066m.428-1.412c-.1 0-.203.029-.307.09-.32.185-.57.618-.57.985 0 .309.185.524.449.524a.63.63 0 0 0 .308-.09c.32-.185.57-.618.57-.985 0-.309-.185-.524-.45-.524' fill='#8097A2'/><path d='M69.23 86.322l-.076-.149c0-.235.179-.544.384-.661l.12-.041.076.151c0 .234-.179.542-.383.66l-.121.04m.428-1.038a.431.431 0 0 0-.214.066c-.263.152-.477.521-.477.823 0 .214.107.337.263.337a.431.431 0 0 0 .214-.066c.264-.152.477-.519.477-.822 0-.214-.107-.338-.263-.338' fill='#8097A2'/><path d='M139.278 7.769v43.667L72.208 90.16V46.493l67.07-38.724' fill='#455A64'/><path d='M72.083 90.375V46.421l.063-.036 67.257-38.831v43.954l-.062.036-67.258 38.831zm.25-43.811v43.38l66.821-38.579V7.985L72.333 46.564z' fill='#607D8B'/></g><path d='M125.737 88.647l-7.639 3.334V84l-11.459 4.713v8.269L99 100.315l13.369 3.646 13.368-15.314' fill='#455A64'/></g></svg>")
|
|
}, at.prototype.show = function(t) {
|
|
this.root = t, t.appendChild(this.dialog), this.dialog.querySelector("#" + this.selectedKey).checked = !0, this.dialog.style.display = "block"
|
|
}, at.prototype.hide = function() {
|
|
this.root && this.root.contains(this.dialog) && this.root.removeChild(this.dialog), this.dialog.style.display = "none"
|
|
}, at.prototype.getCurrentViewer = function() {
|
|
return q.Viewers[this.selectedKey]
|
|
}, at.prototype.getSelectedKey_ = function() {
|
|
var t = this.dialog.querySelector("input[name=field]:checked");
|
|
return t ? t.id : null
|
|
}, at.prototype.onChange = function(t) {
|
|
this.onChangeCallbacks_.push(t)
|
|
}, at.prototype.fireOnChange_ = function(t) {
|
|
for (var e = 0; e < this.onChangeCallbacks_.length; e++) this.onChangeCallbacks_[e](t)
|
|
}, at.prototype.onSave_ = function() {
|
|
if (this.selectedKey = this.getSelectedKey_(), this.selectedKey && q.Viewers[this.selectedKey]) {
|
|
this.fireOnChange_(q.Viewers[this.selectedKey]);
|
|
try {
|
|
localStorage.setItem("WEBVR_CARDBOARD_VIEWER", this.selectedKey)
|
|
} catch (t) {
|
|
console.error("Failed to save viewer profile: %s", t)
|
|
}
|
|
this.hide()
|
|
} else console.error("ViewerSelector.onSave_: this should never happen!")
|
|
}, at.prototype.createDialog_ = function(t) {
|
|
var e = document.createElement("div");
|
|
e.classList.add("webvr-polyfill-viewer-selector"), e.style.display = "none";
|
|
var n = document.createElement("div");
|
|
(r = n.style).position = "fixed", r.left = 0, r.top = 0, r.width = "100%", r.height = "100%", r.background = "rgba(0, 0, 0, 0.3)", n.addEventListener("click", this.hide.bind(this));
|
|
var i = document.createElement("div"),
|
|
r = i.style;
|
|
for (var o in r.boxSizing = "border-box", r.position = "fixed", r.top = "24px", r.left = "50%", r.marginLeft = "-140px", r.width = "280px", r.padding = "24px", r.overflow = "hidden", r.background = "#fafafa", r.fontFamily = "'Roboto', sans-serif", r.boxShadow = "0px 5px 20px #666", i.appendChild(this.createH1_("Select your viewer")), t) i.appendChild(this.createChoice_(o, t[o].label));
|
|
return i.appendChild(this.createButton_("Save", this.onSave_.bind(this))), e.appendChild(n), e.appendChild(i), e
|
|
}, at.prototype.createH1_ = function(t) {
|
|
var e = document.createElement("h1"),
|
|
n = e.style;
|
|
return n.color = "black", n.fontSize = "20px", n.fontWeight = "bold", n.marginTop = 0, n.marginBottom = "24px", e.innerHTML = t, e
|
|
}, at.prototype.createChoice_ = function(t, e) {
|
|
var n = document.createElement("div");
|
|
n.style.marginTop = "8px", n.style.color = "black";
|
|
var i = document.createElement("input");
|
|
i.style.fontSize = "30px", i.setAttribute("id", t), i.setAttribute("type", "radio"), i.setAttribute("value", t), i.setAttribute("name", "field");
|
|
var r = document.createElement("label");
|
|
return r.style.marginLeft = "4px", r.setAttribute("for", t), r.innerHTML = e, n.appendChild(i), n.appendChild(r), n
|
|
}, at.prototype.createButton_ = function(t, e) {
|
|
var n = document.createElement("button");
|
|
n.innerHTML = t;
|
|
var i = n.style;
|
|
return i.float = "right", i.textTransform = "uppercase", i.color = "#1094f7", i.fontSize = "14px", i.letterSpacing = 0, i.border = 0, i.background = "none", i.marginTop = "16px", n.addEventListener("click", e), n
|
|
}, "undefined" != typeof window ? window : void 0 !== e || "undefined" != typeof self && self;
|
|
var lt, ct = (lt = function(t, e) {
|
|
return t(e = {
|
|
exports: {}
|
|
}, e.exports), e.exports
|
|
}((function(t, e) {
|
|
! function(e, n) {
|
|
t.exports = n()
|
|
}(0, (function() {
|
|
return function(t) {
|
|
var e = {};
|
|
|
|
function n(i) {
|
|
if (e[i]) return e[i].exports;
|
|
var r = e[i] = {
|
|
i: i,
|
|
l: !1,
|
|
exports: {}
|
|
};
|
|
return t[i].call(r.exports, r, r.exports, n), r.l = !0, r.exports
|
|
}
|
|
return n.m = t, n.c = e, n.d = function(t, e, i) {
|
|
n.o(t, e) || Object.defineProperty(t, e, {
|
|
configurable: !1,
|
|
enumerable: !0,
|
|
get: i
|
|
})
|
|
}, n.n = function(t) {
|
|
var e = t && t.__esModule ? function() {
|
|
return t.default
|
|
} : function() {
|
|
return t
|
|
};
|
|
return n.d(e, "a", e), e
|
|
}, n.o = function(t, e) {
|
|
return Object.prototype.hasOwnProperty.call(t, e)
|
|
}, n.p = "", n(n.s = 0)
|
|
}([function(t, e, n) {
|
|
var i = function() {
|
|
function t(t, e) {
|
|
for (var n = 0; n < e.length; n++) {
|
|
var i = e[n];
|
|
i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i)
|
|
}
|
|
}
|
|
return function(e, n, i) {
|
|
return n && t(e.prototype, n), i && t(e, i), e
|
|
}
|
|
}(),
|
|
r = n(1),
|
|
o = "undefined" != typeof navigator && parseFloat(("" + (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0, ""])[1]).replace("undefined", "3_2").replace("_", ".").replace("_", "")) < 10 && !window.MSStream,
|
|
s = function() {
|
|
function t() {
|
|
! function(t, e) {
|
|
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
|
|
}(this, t), o ? this.noSleepTimer = null : (this.noSleepVideo = document.createElement("video"), this.noSleepVideo.setAttribute("playsinline", ""), this.noSleepVideo.setAttribute("src", r), this.noSleepVideo.addEventListener("timeupdate", function(t) {
|
|
this.noSleepVideo.currentTime > .5 && (this.noSleepVideo.currentTime = Math.random())
|
|
}.bind(this)))
|
|
}
|
|
return i(t, [{
|
|
key: "enable",
|
|
value: function() {
|
|
o ? (this.disable(), this.noSleepTimer = window.setInterval((function() {
|
|
window.location.href = "/", window.setTimeout(window.stop, 0)
|
|
}), 15e3)) : this.noSleepVideo.play()
|
|
}
|
|
}, {
|
|
key: "disable",
|
|
value: function() {
|
|
o ? this.noSleepTimer && (window.clearInterval(this.noSleepTimer), this.noSleepTimer = null) : this.noSleepVideo.pause()
|
|
}
|
|
}]), t
|
|
}();
|
|
t.exports = s
|
|
}, function(t, e, n) {
|
|
t.exports = "data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="
|
|
}])
|
|
}))
|
|
}))) && lt.__esModule && Object.prototype.hasOwnProperty.call(lt, "default") ? lt.default : lt,
|
|
ht = 1e3,
|
|
ut = [0, 0, .5, 1],
|
|
dt = [.5, 0, .5, 1],
|
|
pt = window.requestAnimationFrame,
|
|
ft = window.cancelAnimationFrame;
|
|
|
|
function mt(t) {
|
|
Object.defineProperties(this, {
|
|
hasPosition: {
|
|
writable: !1,
|
|
enumerable: !0,
|
|
value: t.hasPosition
|
|
},
|
|
hasExternalDisplay: {
|
|
writable: !1,
|
|
enumerable: !0,
|
|
value: t.hasExternalDisplay
|
|
},
|
|
canPresent: {
|
|
writable: !1,
|
|
enumerable: !0,
|
|
value: t.canPresent
|
|
},
|
|
maxLayers: {
|
|
writable: !1,
|
|
enumerable: !0,
|
|
value: t.maxLayers
|
|
},
|
|
hasOrientation: {
|
|
enumerable: !0,
|
|
get: function() {
|
|
return T("VRDisplayCapabilities.prototype.hasOrientation", "VRDisplay.prototype.getFrameData"), t.hasOrientation
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
function gt(t) {
|
|
var e = !("wakelock" in (t = t || {})) || t.wakelock;
|
|
this.isPolyfilled = !0, this.displayId = ht++, this.displayName = "", this.depthNear = .01, this.depthFar = 1e4, this.isPresenting = !1, Object.defineProperty(this, "isConnected", {
|
|
get: function() {
|
|
return T("VRDisplay.prototype.isConnected", "VRDisplayCapabilities.prototype.hasExternalDisplay"), !1
|
|
}
|
|
}), this.capabilities = new mt({
|
|
hasPosition: !1,
|
|
hasOrientation: !1,
|
|
hasExternalDisplay: !1,
|
|
canPresent: !1,
|
|
maxLayers: 1
|
|
}), this.stageParameters = null, this.waitingForPresent_ = !1, this.layer_ = null, this.originalParent_ = null, this.fullscreenElement_ = null, this.fullscreenWrapper_ = null, this.fullscreenElementCachedStyle_ = null, this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null, e && _() && (this.wakelock_ = new ct)
|
|
}
|
|
gt.prototype.getFrameData = function(t) {
|
|
return M(t, this._getPose(), this)
|
|
}, gt.prototype.getPose = function() {
|
|
return T("VRDisplay.prototype.getPose", "VRDisplay.prototype.getFrameData"), this._getPose()
|
|
}, gt.prototype.resetPose = function() {
|
|
return T("VRDisplay.prototype.resetPose"), this._resetPose()
|
|
}, gt.prototype.getImmediatePose = function() {
|
|
return T("VRDisplay.prototype.getImmediatePose", "VRDisplay.prototype.getFrameData"), this._getPose()
|
|
}, gt.prototype.requestAnimationFrame = function(t) {
|
|
return pt(t)
|
|
}, gt.prototype.cancelAnimationFrame = function(t) {
|
|
return ft(t)
|
|
}, gt.prototype.wrapForFullscreen = function(t) {
|
|
if (a()) return t;
|
|
if (!this.fullscreenWrapper_) {
|
|
this.fullscreenWrapper_ = document.createElement("div");
|
|
var e = ["height: " + Math.min(screen.height, screen.width) + "px !important", "top: 0 !important", "left: 0 !important", "right: 0 !important", "border: 0", "margin: 0", "padding: 0", "z-index: 999999 !important", "position: fixed"];
|
|
this.fullscreenWrapper_.setAttribute("style", e.join("; ") + ";"), this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")
|
|
}
|
|
if (this.fullscreenElement_ == t) return this.fullscreenWrapper_;
|
|
if (this.fullscreenElement_ && (this.originalParent_ ? this.originalParent_.appendChild(this.fullscreenElement_) : this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)), this.fullscreenElement_ = t, this.originalParent_ = t.parentElement, this.originalParent_ || document.body.appendChild(t), !this.fullscreenWrapper_.parentElement) {
|
|
var n = this.fullscreenElement_.parentElement;
|
|
n.insertBefore(this.fullscreenWrapper_, this.fullscreenElement_), n.removeChild(this.fullscreenElement_)
|
|
}
|
|
this.fullscreenWrapper_.insertBefore(this.fullscreenElement_, this.fullscreenWrapper_.firstChild), this.fullscreenElementCachedStyle_ = this.fullscreenElement_.getAttribute("style");
|
|
var i = this;
|
|
return function() {
|
|
if (i.fullscreenElement_) {
|
|
var t = ["position: absolute", "top: 0", "left: 0", "width: " + Math.max(screen.width, screen.height) + "px", "height: " + Math.min(screen.height, screen.width) + "px", "border: 0", "margin: 0", "padding: 0"];
|
|
i.fullscreenElement_.setAttribute("style", t.join("; ") + ";")
|
|
}
|
|
}(), this.fullscreenWrapper_
|
|
}, gt.prototype.removeFullscreenWrapper = function() {
|
|
if (this.fullscreenElement_) {
|
|
var t = this.fullscreenElement_;
|
|
this.fullscreenElementCachedStyle_ ? t.setAttribute("style", this.fullscreenElementCachedStyle_) : t.removeAttribute("style"), this.fullscreenElement_ = null, this.fullscreenElementCachedStyle_ = null;
|
|
var e = this.fullscreenWrapper_.parentElement;
|
|
return this.fullscreenWrapper_.removeChild(t), this.originalParent_ === e ? e.insertBefore(t, this.fullscreenWrapper_) : this.originalParent_ && this.originalParent_.appendChild(t), e.removeChild(this.fullscreenWrapper_), t
|
|
}
|
|
}, gt.prototype.requestPresent = function(t) {
|
|
var e = this.isPresenting,
|
|
n = this;
|
|
return t instanceof Array || (T("VRDisplay.prototype.requestPresent with non-array argument", "an array of VRLayers as the first argument"), t = [t]), new Promise((function(i, r) {
|
|
if (n.capabilities.canPresent)
|
|
if (0 == t.length || t.length > n.capabilities.maxLayers) r(new Error("Invalid number of layers."));
|
|
else {
|
|
var o = t[0];
|
|
if (o.source) {
|
|
var s = o.leftBounds || ut,
|
|
c = o.rightBounds || dt;
|
|
if (e) {
|
|
var h = n.layer_;
|
|
h.source !== o.source && (h.source = o.source);
|
|
for (var u = 0; u < 4; u++) h.leftBounds[u] = s[u], h.rightBounds[u] = c[u];
|
|
return n.wrapForFullscreen(n.layer_.source), n.updatePresent_(), void i()
|
|
}
|
|
if (n.layer_ = {
|
|
predistorted: o.predistorted,
|
|
source: o.source,
|
|
leftBounds: s.slice(0),
|
|
rightBounds: c.slice(0)
|
|
}, n.waitingForPresent_ = !1, n.layer_ && n.layer_.source) {
|
|
var d = n.wrapForFullscreen(n.layer_.source);
|
|
n.addFullscreenListeners_(d, (function() {
|
|
var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
|
|
n.isPresenting = d === t, n.isPresenting ? (screen.orientation && screen.orientation.lock && screen.orientation.lock("landscape-primary").catch((function(t) {
|
|
console.error("screen.orientation.lock() failed due to", t.message)
|
|
})), n.waitingForPresent_ = !1, n.beginPresent_(), i()) : (screen.orientation && screen.orientation.unlock && screen.orientation.unlock(), n.removeFullscreenWrapper(), n.disableWakeLock(), n.endPresent_(), n.removeFullscreenListeners_()), n.fireVRDisplayPresentChange_()
|
|
}), (function() {
|
|
n.waitingForPresent_ && (n.removeFullscreenWrapper(), n.removeFullscreenListeners_(), n.disableWakeLock(), n.waitingForPresent_ = !1, n.isPresenting = !1, r(new Error("Unable to present.")))
|
|
})),
|
|
function(t) {
|
|
if (l()) return !1;
|
|
if (t.requestFullscreen) t.requestFullscreen();
|
|
else if (t.webkitRequestFullscreen) t.webkitRequestFullscreen();
|
|
else if (t.mozRequestFullScreen) t.mozRequestFullScreen();
|
|
else {
|
|
if (!t.msRequestFullscreen) return !1;
|
|
t.msRequestFullscreen()
|
|
}
|
|
return !0
|
|
}(d) ? (n.enableWakeLock(), n.waitingForPresent_ = !0) : (a() || l()) && (n.enableWakeLock(), n.isPresenting = !0, n.beginPresent_(), n.fireVRDisplayPresentChange_(), i())
|
|
}
|
|
n.waitingForPresent_ || a() || (y(), r(new Error("Unable to present.")))
|
|
} else i()
|
|
}
|
|
else r(new Error("VRDisplay is not capable of presenting."))
|
|
}))
|
|
}, gt.prototype.exitPresent = function() {
|
|
var t = this.isPresenting,
|
|
e = this;
|
|
return this.isPresenting = !1, this.layer_ = null, this.disableWakeLock(), new Promise((function(n, i) {
|
|
t ? (!y() && a() && (e.endPresent_(), e.fireVRDisplayPresentChange_()), l() && (e.removeFullscreenWrapper(), e.removeFullscreenListeners_(), e.endPresent_(), e.fireVRDisplayPresentChange_()), n()) : i(new Error("Was not presenting to VRDisplay."))
|
|
}))
|
|
}, gt.prototype.getLayers = function() {
|
|
return this.layer_ ? [this.layer_] : []
|
|
}, gt.prototype.fireVRDisplayPresentChange_ = function() {
|
|
var t = new CustomEvent("vrdisplaypresentchange", {
|
|
detail: {
|
|
display: this
|
|
}
|
|
});
|
|
window.dispatchEvent(t)
|
|
}, gt.prototype.fireVRDisplayConnect_ = function() {
|
|
var t = new CustomEvent("vrdisplayconnect", {
|
|
detail: {
|
|
display: this
|
|
}
|
|
});
|
|
window.dispatchEvent(t)
|
|
}, gt.prototype.addFullscreenListeners_ = function(t, e, n) {
|
|
this.removeFullscreenListeners_(), this.fullscreenEventTarget_ = t, this.fullscreenChangeHandler_ = e, this.fullscreenErrorHandler_ = n, e && (document.fullscreenEnabled ? t.addEventListener("fullscreenchange", e, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenchange", e, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenchange", e, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenchange", e, !1)), n && (document.fullscreenEnabled ? t.addEventListener("fullscreenerror", n, !1) : document.webkitFullscreenEnabled ? t.addEventListener("webkitfullscreenerror", n, !1) : document.mozFullScreenEnabled ? document.addEventListener("mozfullscreenerror", n, !1) : document.msFullscreenEnabled && t.addEventListener("msfullscreenerror", n, !1))
|
|
}, gt.prototype.removeFullscreenListeners_ = function() {
|
|
if (this.fullscreenEventTarget_) {
|
|
var t = this.fullscreenEventTarget_;
|
|
if (this.fullscreenChangeHandler_) {
|
|
var e = this.fullscreenChangeHandler_;
|
|
t.removeEventListener("fullscreenchange", e, !1), t.removeEventListener("webkitfullscreenchange", e, !1), document.removeEventListener("mozfullscreenchange", e, !1), t.removeEventListener("msfullscreenchange", e, !1)
|
|
}
|
|
if (this.fullscreenErrorHandler_) {
|
|
var n = this.fullscreenErrorHandler_;
|
|
t.removeEventListener("fullscreenerror", n, !1), t.removeEventListener("webkitfullscreenerror", n, !1), document.removeEventListener("mozfullscreenerror", n, !1), t.removeEventListener("msfullscreenerror", n, !1)
|
|
}
|
|
this.fullscreenEventTarget_ = null, this.fullscreenChangeHandler_ = null, this.fullscreenErrorHandler_ = null
|
|
}
|
|
}, gt.prototype.enableWakeLock = function() {
|
|
this.wakelock_ && this.wakelock_.enable()
|
|
}, gt.prototype.disableWakeLock = function() {
|
|
this.wakelock_ && this.wakelock_.disable()
|
|
}, gt.prototype.beginPresent_ = function() {}, gt.prototype.endPresent_ = function() {}, gt.prototype.submitFrame = function(t) {}, gt.prototype.getEyeParameters = function(t) {
|
|
return null
|
|
};
|
|
var vt = {
|
|
ADDITIONAL_VIEWERS: [],
|
|
DEFAULT_VIEWER: "",
|
|
MOBILE_WAKE_LOCK: !0,
|
|
DEBUG: !1,
|
|
DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json",
|
|
K_FILTER: .98,
|
|
PREDICTION_TIME_S: .04,
|
|
CARDBOARD_UI_DISABLED: !1,
|
|
ROTATE_INSTRUCTIONS_DISABLED: !1,
|
|
YAW_ONLY: !1,
|
|
BUFFER_SCALE: .5,
|
|
DIRTY_SUBMIT_FRAME_BINDINGS: !1
|
|
},
|
|
yt = "left",
|
|
At = "right";
|
|
|
|
function xt(t) {
|
|
var e = b({}, vt);
|
|
t = b(e, t || {}), gt.call(this, {
|
|
wakelock: t.MOBILE_WAKE_LOCK
|
|
}), this.config = t, this.displayName = "Cardboard VRDisplay", this.capabilities = new mt({
|
|
hasPosition: !1,
|
|
hasOrientation: !0,
|
|
hasExternalDisplay: !1,
|
|
canPresent: !0,
|
|
maxLayers: 1
|
|
}), this.stageParameters = null, this.bufferScale_ = this.config.BUFFER_SCALE, this.poseSensor_ = new ot(this.config), this.distorter_ = null, this.cardboardUI_ = null, this.dpdb_ = new Z(this.config.DPDB_URL, this.onDeviceParamsUpdated_.bind(this)), this.deviceInfo_ = new q(this.dpdb_.getDeviceParams(), t.ADDITIONAL_VIEWERS), this.viewerSelector_ = new at(t.DEFAULT_VIEWER), this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)), this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()), this.config.ROTATE_INSTRUCTIONS_DISABLED || (this.rotateInstructions_ = new st), a() && window.addEventListener("resize", this.onResize_.bind(this))
|
|
}
|
|
return xt.prototype = Object.create(gt.prototype), xt.prototype._getPose = function() {
|
|
return {
|
|
position: null,
|
|
orientation: this.poseSensor_.getOrientation(),
|
|
linearVelocity: null,
|
|
linearAcceleration: null,
|
|
angularVelocity: null,
|
|
angularAcceleration: null
|
|
}
|
|
}, xt.prototype._resetPose = function() {
|
|
this.poseSensor_.resetPose && this.poseSensor_.resetPose()
|
|
}, xt.prototype._getFieldOfView = function(t) {
|
|
var e;
|
|
if (t == yt) e = this.deviceInfo_.getFieldOfViewLeftEye();
|
|
else {
|
|
if (t != At) return console.error("Invalid eye provided: %s", t), null;
|
|
e = this.deviceInfo_.getFieldOfViewRightEye()
|
|
}
|
|
return e
|
|
}, xt.prototype._getEyeOffset = function(t) {
|
|
var e;
|
|
if (t == yt) e = [.5 * -this.deviceInfo_.viewer.interLensDistance, 0, 0];
|
|
else {
|
|
if (t != At) return console.error("Invalid eye provided: %s", t), null;
|
|
e = [.5 * this.deviceInfo_.viewer.interLensDistance, 0, 0]
|
|
}
|
|
return e
|
|
}, xt.prototype.getEyeParameters = function(t) {
|
|
var e = this._getEyeOffset(t),
|
|
n = this._getFieldOfView(t),
|
|
i = {
|
|
offset: e,
|
|
renderWidth: .5 * this.deviceInfo_.device.width * this.bufferScale_,
|
|
renderHeight: this.deviceInfo_.device.height * this.bufferScale_
|
|
};
|
|
return Object.defineProperty(i, "fieldOfView", {
|
|
enumerable: !0,
|
|
get: function() {
|
|
return T("VRFieldOfView", "VRFrameData's projection matrices"), n
|
|
}
|
|
}), i
|
|
}, xt.prototype.onDeviceParamsUpdated_ = function(t) {
|
|
this.config.DEBUG && console.log("DPDB reported that device params were updated."), this.deviceInfo_.updateDeviceParams(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_)
|
|
}, xt.prototype.updateBounds_ = function() {
|
|
this.layer_ && this.distorter_ && (this.layer_.leftBounds || this.layer_.rightBounds) && this.distorter_.setTextureBounds(this.layer_.leftBounds, this.layer_.rightBounds)
|
|
}, xt.prototype.beginPresent_ = function() {
|
|
var t = this.layer_.source.getContext("webgl");
|
|
t || (t = this.layer_.source.getContext("experimental-webgl")), t || (t = this.layer_.source.getContext("webgl2")), t && (this.layer_.predistorted ? this.config.CARDBOARD_UI_DISABLED || (t.canvas.width = g() * this.bufferScale_, t.canvas.height = v() * this.bufferScale_, this.cardboardUI_ = new N(t)) : (this.config.CARDBOARD_UI_DISABLED || (this.cardboardUI_ = new N(t)), this.distorter_ = new P(t, this.cardboardUI_, this.config.BUFFER_SCALE, this.config.DIRTY_SUBMIT_FRAME_BINDINGS), this.distorter_.updateDeviceInfo(this.deviceInfo_)), this.cardboardUI_ && this.cardboardUI_.listen(function(t) {
|
|
this.viewerSelector_.show(this.layer_.source.parentElement), t.stopPropagation(), t.preventDefault()
|
|
}.bind(this), function(t) {
|
|
this.exitPresent(), t.stopPropagation(), t.preventDefault()
|
|
}.bind(this)), this.rotateInstructions_ && (m() && _() ? this.rotateInstructions_.showTemporarily(3e3, this.layer_.source.parentElement) : this.rotateInstructions_.update()), this.orientationHandler = this.onOrientationChange_.bind(this), window.addEventListener("orientationchange", this.orientationHandler), this.vrdisplaypresentchangeHandler = this.updateBounds_.bind(this), window.addEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler), this.fireVRDisplayDeviceParamsChange_())
|
|
}, xt.prototype.endPresent_ = function() {
|
|
this.distorter_ && (this.distorter_.destroy(), this.distorter_ = null), this.cardboardUI_ && (this.cardboardUI_.destroy(), this.cardboardUI_ = null), this.rotateInstructions_ && this.rotateInstructions_.hide(), this.viewerSelector_.hide(), window.removeEventListener("orientationchange", this.orientationHandler), window.removeEventListener("vrdisplaypresentchange", this.vrdisplaypresentchangeHandler)
|
|
}, xt.prototype.updatePresent_ = function() {
|
|
this.endPresent_(), this.beginPresent_()
|
|
}, xt.prototype.submitFrame = function(t) {
|
|
if (this.distorter_) this.updateBounds_(), this.distorter_.submitFrame();
|
|
else if (this.cardboardUI_ && this.layer_) {
|
|
var e = this.layer_.source.getContext("webgl");
|
|
e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2"));
|
|
var n = e.canvas;
|
|
n.width == this.lastWidth && n.height == this.lastHeight || this.cardboardUI_.onResize(), this.lastWidth = n.width, this.lastHeight = n.height, this.cardboardUI_.render()
|
|
}
|
|
}, xt.prototype.onOrientationChange_ = function(t) {
|
|
this.viewerSelector_.hide(), this.rotateInstructions_ && this.rotateInstructions_.update(), this.onResize_()
|
|
}, xt.prototype.onResize_ = function(t) {
|
|
if (this.layer_) {
|
|
var e = this.layer_.source.getContext("webgl");
|
|
e || (e = this.layer_.source.getContext("experimental-webgl")), e || (e = this.layer_.source.getContext("webgl2")), e.canvas.setAttribute("style", ["position: absolute", "top: 0", "left: 0", "width: 100vw", "height: 100vh", "border: 0", "margin: 0", "padding: 0px", "box-sizing: content-box"].join("; ") + ";"), w(e.canvas)
|
|
}
|
|
}, xt.prototype.onViewerChanged_ = function(t) {
|
|
this.deviceInfo_.setViewer(t), this.distorter_ && this.distorter_.updateDeviceInfo(this.deviceInfo_), this.fireVRDisplayDeviceParamsChange_()
|
|
}, xt.prototype.fireVRDisplayDeviceParamsChange_ = function() {
|
|
var t = new CustomEvent("vrdisplaydeviceparamschange", {
|
|
detail: {
|
|
vrdisplay: this,
|
|
deviceInfo: this.deviceInfo_
|
|
}
|
|
});
|
|
window.dispatchEvent(t)
|
|
}, xt.VRFrameData = function() {
|
|
this.leftProjectionMatrix = new Float32Array(16), this.leftViewMatrix = new Float32Array(16), this.rightProjectionMatrix = new Float32Array(16), this.rightViewMatrix = new Float32Array(16), this.pose = null
|
|
}, xt.VRDisplay = gt, xt
|
|
}()
|
|
}))) && t.__esModule && Object.prototype.hasOwnProperty.call(t, "default") ? t.default : t,
|
|
a = {
|
|
ADDITIONAL_VIEWERS: [],
|
|
DEFAULT_VIEWER: "",
|
|
PROVIDE_MOBILE_VRDISPLAY: !0,
|
|
MOBILE_WAKE_LOCK: !0,
|
|
DEBUG: !1,
|
|
DPDB_URL: "https://dpdb.webvr.rocks/dpdb.json",
|
|
K_FILTER: .98,
|
|
PREDICTION_TIME_S: .04,
|
|
CARDBOARD_UI_DISABLED: !1,
|
|
ROTATE_INSTRUCTIONS_DISABLED: !1,
|
|
YAW_ONLY: !1,
|
|
BUFFER_SCALE: .5,
|
|
DIRTY_SUBMIT_FRAME_BINDINGS: !1
|
|
};
|
|
|
|
function l(t) {
|
|
this.config = o(o({}, a), t), this.polyfillDisplays = [], this.enabled = !1, this.hasNative = "getVRDisplays" in navigator, this.native = {}, this.native.getVRDisplays = navigator.getVRDisplays, this.native.VRFrameData = window.VRFrameData, this.native.VRDisplay = window.VRDisplay, (!this.hasNative || this.config.PROVIDE_MOBILE_VRDISPLAY && n()) && (this.enable(), this.getVRDisplays().then((function(t) {
|
|
t && t[0] && t[0].fireVRDisplayConnect_ && t[0].fireVRDisplayConnect_()
|
|
})))
|
|
}
|
|
l.prototype.getPolyfillDisplays = function() {
|
|
if (this._polyfillDisplaysPopulated) return this.polyfillDisplays;
|
|
if (n()) {
|
|
var t = new s({
|
|
ADDITIONAL_VIEWERS: this.config.ADDITIONAL_VIEWERS,
|
|
DEFAULT_VIEWER: this.config.DEFAULT_VIEWER,
|
|
MOBILE_WAKE_LOCK: this.config.MOBILE_WAKE_LOCK,
|
|
DEBUG: this.config.DEBUG,
|
|
DPDB_URL: this.config.DPDB_URL,
|
|
CARDBOARD_UI_DISABLED: this.config.CARDBOARD_UI_DISABLED,
|
|
K_FILTER: this.config.K_FILTER,
|
|
PREDICTION_TIME_S: this.config.PREDICTION_TIME_S,
|
|
ROTATE_INSTRUCTIONS_DISABLED: this.config.ROTATE_INSTRUCTIONS_DISABLED,
|
|
YAW_ONLY: this.config.YAW_ONLY,
|
|
BUFFER_SCALE: this.config.BUFFER_SCALE,
|
|
DIRTY_SUBMIT_FRAME_BINDINGS: this.config.DIRTY_SUBMIT_FRAME_BINDINGS
|
|
});
|
|
this.polyfillDisplays.push(t)
|
|
}
|
|
return this._polyfillDisplaysPopulated = !0, this.polyfillDisplays
|
|
}, l.prototype.enable = function() {
|
|
if (this.enabled = !0, this.hasNative && this.native.VRFrameData) {
|
|
var t = this.native.VRFrameData,
|
|
e = new this.native.VRFrameData,
|
|
n = this.native.VRDisplay.prototype.getFrameData;
|
|
window.VRDisplay.prototype.getFrameData = function(i) {
|
|
i instanceof t ? n.call(this, i) : (n.call(this, e), i.pose = e.pose, r(e.leftProjectionMatrix, i.leftProjectionMatrix), r(e.rightProjectionMatrix, i.rightProjectionMatrix), r(e.leftViewMatrix, i.leftViewMatrix), r(e.rightViewMatrix, i.rightViewMatrix))
|
|
}
|
|
}
|
|
navigator.getVRDisplays = this.getVRDisplays.bind(this), window.VRDisplay = s.VRDisplay, window.VRFrameData = s.VRFrameData
|
|
}, l.prototype.getVRDisplays = function() {
|
|
var t = this;
|
|
return this.config, this.hasNative ? this.native.getVRDisplays.call(navigator).then((function(e) {
|
|
return e.length > 0 ? e : t.getPolyfillDisplays()
|
|
})) : Promise.resolve(this.getPolyfillDisplays())
|
|
}, l.version = "0.10.12", l.VRFrameData = s.VRFrameData, l.VRDisplay = s.VRDisplay;
|
|
var c = Object.freeze({
|
|
default: l
|
|
}),
|
|
h = c && l || c;
|
|
return void 0 !== e && e.window && (e.document || (e.document = e.window.document), e.navigator || (e.navigator = e.window.navigator)), h
|
|
}()
|
|
})));
|
|
const h = 0,
|
|
u = 1,
|
|
d = 2;
|
|
|
|
function p() {}
|
|
Object.assign(p.prototype, {
|
|
addEventListener: function(t, e) {
|
|
void 0 === this._listeners && (this._listeners = {});
|
|
const n = this._listeners;
|
|
void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e)
|
|
},
|
|
hasEventListener: function(t, e) {
|
|
if (void 0 === this._listeners) return !1;
|
|
const n = this._listeners;
|
|
return void 0 !== n[t] && -1 !== n[t].indexOf(e)
|
|
},
|
|
removeEventListener: function(t, e) {
|
|
if (void 0 === this._listeners) return;
|
|
const n = this._listeners[t];
|
|
if (void 0 !== n) {
|
|
const t = n.indexOf(e); - 1 !== t && n.splice(t, 1)
|
|
}
|
|
},
|
|
dispatchEvent: function(t) {
|
|
if (void 0 === this._listeners) return;
|
|
const e = this._listeners[t.type];
|
|
if (void 0 !== e) {
|
|
t.target = this;
|
|
const n = e.slice(0);
|
|
for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t)
|
|
}
|
|
}
|
|
});
|
|
const f = [];
|
|
for (let t = 0; t < 256; t++) f[t] = (t < 16 ? "0" : "") + t.toString(16);
|
|
let m = 1234567;
|
|
const g = {
|
|
DEG2RAD: Math.PI / 180,
|
|
RAD2DEG: 180 / Math.PI,
|
|
generateUUID: function() {
|
|
const t = 4294967295 * Math.random() | 0,
|
|
e = 4294967295 * Math.random() | 0,
|
|
n = 4294967295 * Math.random() | 0,
|
|
i = 4294967295 * Math.random() | 0;
|
|
return (f[255 & t] + f[t >> 8 & 255] + f[t >> 16 & 255] + f[t >> 24 & 255] + "-" + f[255 & e] + f[e >> 8 & 255] + "-" + f[e >> 16 & 15 | 64] + f[e >> 24 & 255] + "-" + f[63 & n | 128] + f[n >> 8 & 255] + "-" + f[n >> 16 & 255] + f[n >> 24 & 255] + f[255 & i] + f[i >> 8 & 255] + f[i >> 16 & 255] + f[i >> 24 & 255]).toUpperCase()
|
|
},
|
|
clamp: function(t, e, n) {
|
|
return Math.max(e, Math.min(n, t))
|
|
},
|
|
euclideanModulo: function(t, e) {
|
|
return (t % e + e) % e
|
|
},
|
|
mapLinear: function(t, e, n, i, r) {
|
|
return i + (t - e) * (r - i) / (n - e)
|
|
},
|
|
lerp: function(t, e, n) {
|
|
return (1 - n) * t + n * e
|
|
},
|
|
damp: function(t, e, n, i) {
|
|
return g.lerp(t, e, 1 - Math.exp(-n * i))
|
|
},
|
|
pingpong: function(t, e = 1) {
|
|
return e - Math.abs(g.euclideanModulo(t, 2 * e) - e)
|
|
},
|
|
smoothstep: function(t, e, n) {
|
|
return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * (3 - 2 * t)
|
|
},
|
|
smootherstep: function(t, e, n) {
|
|
return t <= e ? 0 : t >= n ? 1 : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10)
|
|
},
|
|
randInt: function(t, e) {
|
|
return t + Math.floor(Math.random() * (e - t + 1))
|
|
},
|
|
randFloat: function(t, e) {
|
|
return t + Math.random() * (e - t)
|
|
},
|
|
randFloatSpread: function(t) {
|
|
return t * (.5 - Math.random())
|
|
},
|
|
seededRandom: function(t) {
|
|
return void 0 !== t && (m = t % 2147483647), m = 16807 * m % 2147483647, (m - 1) / 2147483646
|
|
},
|
|
degToRad: function(t) {
|
|
return t * g.DEG2RAD
|
|
},
|
|
radToDeg: function(t) {
|
|
return t * g.RAD2DEG
|
|
},
|
|
isPowerOfTwo: function(t) {
|
|
return 0 == (t & t - 1) && 0 !== t
|
|
},
|
|
ceilPowerOfTwo: function(t) {
|
|
return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2))
|
|
},
|
|
floorPowerOfTwo: function(t) {
|
|
return Math.pow(2, Math.floor(Math.log(t) / Math.LN2))
|
|
},
|
|
setQuaternionFromProperEuler: function(t, e, n, i, r) {
|
|
const o = Math.cos,
|
|
s = Math.sin,
|
|
a = o(n / 2),
|
|
l = s(n / 2),
|
|
c = o((e + i) / 2),
|
|
h = s((e + i) / 2),
|
|
u = o((e - i) / 2),
|
|
d = s((e - i) / 2),
|
|
p = o((i - e) / 2),
|
|
f = s((i - e) / 2);
|
|
switch (r) {
|
|
case "XYX":
|
|
t.set(a * h, l * u, l * d, a * c);
|
|
break;
|
|
case "YZY":
|
|
t.set(l * d, a * h, l * u, a * c);
|
|
break;
|
|
case "ZXZ":
|
|
t.set(l * u, l * d, a * h, a * c);
|
|
break;
|
|
case "XZX":
|
|
t.set(a * h, l * f, l * p, a * c);
|
|
break;
|
|
case "YXY":
|
|
t.set(l * p, a * h, l * f, a * c);
|
|
break;
|
|
case "ZYZ":
|
|
t.set(l * f, l * p, a * h, a * c);
|
|
break;
|
|
default:
|
|
console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + r)
|
|
}
|
|
}
|
|
};
|
|
class v {
|
|
constructor(t = 0, e = 0) {
|
|
Object.defineProperty(this, "isVector2", {
|
|
value: !0
|
|
}), this.x = t, this.y = e
|
|
}
|
|
get width() {
|
|
return this.x
|
|
}
|
|
set width(t) {
|
|
this.x = t
|
|
}
|
|
get height() {
|
|
return this.y
|
|
}
|
|
set height(t) {
|
|
this.y = t
|
|
}
|
|
set(t, e) {
|
|
return this.x = t, this.y = e, this
|
|
}
|
|
setScalar(t) {
|
|
return this.x = t, this.y = t, this
|
|
}
|
|
setX(t) {
|
|
return this.x = t, this
|
|
}
|
|
setY(t) {
|
|
return this.y = t, this
|
|
}
|
|
setComponent(t, e) {
|
|
switch (t) {
|
|
case 0:
|
|
this.x = e;
|
|
break;
|
|
case 1:
|
|
this.y = e;
|
|
break;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
return this
|
|
}
|
|
getComponent(t) {
|
|
switch (t) {
|
|
case 0:
|
|
return this.x;
|
|
case 1:
|
|
return this.y;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
}
|
|
clone() {
|
|
return new this.constructor(this.x, this.y)
|
|
}
|
|
copy(t) {
|
|
return this.x = t.x, this.y = t.y, this
|
|
}
|
|
add(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this)
|
|
}
|
|
addScalar(t) {
|
|
return this.x += t, this.y += t, this
|
|
}
|
|
addVectors(t, e) {
|
|
return this.x = t.x + e.x, this.y = t.y + e.y, this
|
|
}
|
|
addScaledVector(t, e) {
|
|
return this.x += t.x * e, this.y += t.y * e, this
|
|
}
|
|
sub(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this)
|
|
}
|
|
subScalar(t) {
|
|
return this.x -= t, this.y -= t, this
|
|
}
|
|
subVectors(t, e) {
|
|
return this.x = t.x - e.x, this.y = t.y - e.y, this
|
|
}
|
|
multiply(t) {
|
|
return this.x *= t.x, this.y *= t.y, this
|
|
}
|
|
multiplyScalar(t) {
|
|
return this.x *= t, this.y *= t, this
|
|
}
|
|
divide(t) {
|
|
return this.x /= t.x, this.y /= t.y, this
|
|
}
|
|
divideScalar(t) {
|
|
return this.multiplyScalar(1 / t)
|
|
}
|
|
applyMatrix3(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = t.elements;
|
|
return this.x = i[0] * e + i[3] * n + i[6], this.y = i[1] * e + i[4] * n + i[7], this
|
|
}
|
|
min(t) {
|
|
return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this
|
|
}
|
|
max(t) {
|
|
return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this
|
|
}
|
|
clamp(t, e) {
|
|
return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this
|
|
}
|
|
clampScalar(t, e) {
|
|
return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this
|
|
}
|
|
clampLength(t, e) {
|
|
const n = this.length();
|
|
return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
|
|
}
|
|
floor() {
|
|
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this
|
|
}
|
|
ceil() {
|
|
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this
|
|
}
|
|
round() {
|
|
return this.x = Math.round(this.x), this.y = Math.round(this.y), this
|
|
}
|
|
roundToZero() {
|
|
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this
|
|
}
|
|
negate() {
|
|
return this.x = -this.x, this.y = -this.y, this
|
|
}
|
|
dot(t) {
|
|
return this.x * t.x + this.y * t.y
|
|
}
|
|
cross(t) {
|
|
return this.x * t.y - this.y * t.x
|
|
}
|
|
lengthSq() {
|
|
return this.x * this.x + this.y * this.y
|
|
}
|
|
length() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y)
|
|
}
|
|
manhattanLength() {
|
|
return Math.abs(this.x) + Math.abs(this.y)
|
|
}
|
|
normalize() {
|
|
return this.divideScalar(this.length() || 1)
|
|
}
|
|
angle() {
|
|
return Math.atan2(-this.y, -this.x) + Math.PI
|
|
}
|
|
distanceTo(t) {
|
|
return Math.sqrt(this.distanceToSquared(t))
|
|
}
|
|
distanceToSquared(t) {
|
|
const e = this.x - t.x,
|
|
n = this.y - t.y;
|
|
return e * e + n * n
|
|
}
|
|
manhattanDistanceTo(t) {
|
|
return Math.abs(this.x - t.x) + Math.abs(this.y - t.y)
|
|
}
|
|
setLength(t) {
|
|
return this.normalize().multiplyScalar(t)
|
|
}
|
|
lerp(t, e) {
|
|
return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this
|
|
}
|
|
lerpVectors(t, e, n) {
|
|
return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this
|
|
}
|
|
equals(t) {
|
|
return t.x === this.x && t.y === this.y
|
|
}
|
|
fromArray(t, e = 0) {
|
|
return this.x = t[e], this.y = t[e + 1], this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this.x, t[e + 1] = this.y, t
|
|
}
|
|
fromBufferAttribute(t, e, n) {
|
|
return void 0 !== n && console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this
|
|
}
|
|
rotateAround(t, e) {
|
|
const n = Math.cos(e),
|
|
i = Math.sin(e),
|
|
r = this.x - t.x,
|
|
o = this.y - t.y;
|
|
return this.x = r * n - o * i + t.x, this.y = r * i + o * n + t.y, this
|
|
}
|
|
random() {
|
|
return this.x = Math.random(), this.y = Math.random(), this
|
|
}
|
|
}
|
|
class y {
|
|
constructor() {
|
|
Object.defineProperty(this, "isMatrix3", {
|
|
value: !0
|
|
}), this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")
|
|
}
|
|
set(t, e, n, i, r, o, s, a, l) {
|
|
const c = this.elements;
|
|
return c[0] = t, c[1] = i, c[2] = s, c[3] = e, c[4] = r, c[5] = a, c[6] = n, c[7] = o, c[8] = l, this
|
|
}
|
|
identity() {
|
|
return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).fromArray(this.elements)
|
|
}
|
|
copy(t) {
|
|
const e = this.elements,
|
|
n = t.elements;
|
|
return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], this
|
|
}
|
|
extractBasis(t, e, n) {
|
|
return t.setFromMatrix3Column(this, 0), e.setFromMatrix3Column(this, 1), n.setFromMatrix3Column(this, 2), this
|
|
}
|
|
setFromMatrix4(t) {
|
|
const e = t.elements;
|
|
return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this
|
|
}
|
|
multiply(t) {
|
|
return this.multiplyMatrices(this, t)
|
|
}
|
|
premultiply(t) {
|
|
return this.multiplyMatrices(t, this)
|
|
}
|
|
multiplyMatrices(t, e) {
|
|
const n = t.elements,
|
|
i = e.elements,
|
|
r = this.elements,
|
|
o = n[0],
|
|
s = n[3],
|
|
a = n[6],
|
|
l = n[1],
|
|
c = n[4],
|
|
h = n[7],
|
|
u = n[2],
|
|
d = n[5],
|
|
p = n[8],
|
|
f = i[0],
|
|
m = i[3],
|
|
g = i[6],
|
|
v = i[1],
|
|
y = i[4],
|
|
A = i[7],
|
|
x = i[2],
|
|
_ = i[5],
|
|
b = i[8];
|
|
return r[0] = o * f + s * v + a * x, r[3] = o * m + s * y + a * _, r[6] = o * g + s * A + a * b, r[1] = l * f + c * v + h * x, r[4] = l * m + c * y + h * _, r[7] = l * g + c * A + h * b, r[2] = u * f + d * v + p * x, r[5] = u * m + d * y + p * _, r[8] = u * g + d * A + p * b, this
|
|
}
|
|
multiplyScalar(t) {
|
|
const e = this.elements;
|
|
return e[0] *= t, e[3] *= t, e[6] *= t, e[1] *= t, e[4] *= t, e[7] *= t, e[2] *= t, e[5] *= t, e[8] *= t, this
|
|
}
|
|
determinant() {
|
|
const t = this.elements,
|
|
e = t[0],
|
|
n = t[1],
|
|
i = t[2],
|
|
r = t[3],
|
|
o = t[4],
|
|
s = t[5],
|
|
a = t[6],
|
|
l = t[7],
|
|
c = t[8];
|
|
return e * o * c - e * s * l - n * r * c + n * s * a + i * r * l - i * o * a
|
|
}
|
|
invert() {
|
|
const t = this.elements,
|
|
e = t[0],
|
|
n = t[1],
|
|
i = t[2],
|
|
r = t[3],
|
|
o = t[4],
|
|
s = t[5],
|
|
a = t[6],
|
|
l = t[7],
|
|
c = t[8],
|
|
h = c * o - s * l,
|
|
u = s * a - c * r,
|
|
d = l * r - o * a,
|
|
p = e * h + n * u + i * d;
|
|
if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
const f = 1 / p;
|
|
return t[0] = h * f, t[1] = (i * l - c * n) * f, t[2] = (s * n - i * o) * f, t[3] = u * f, t[4] = (c * e - i * a) * f, t[5] = (i * r - s * e) * f, t[6] = d * f, t[7] = (n * a - l * e) * f, t[8] = (o * e - n * r) * f, this
|
|
}
|
|
transpose() {
|
|
let t;
|
|
const e = this.elements;
|
|
return t = e[1], e[1] = e[3], e[3] = t, t = e[2], e[2] = e[6], e[6] = t, t = e[5], e[5] = e[7], e[7] = t, this
|
|
}
|
|
getNormalMatrix(t) {
|
|
return this.setFromMatrix4(t).copy(this).invert().transpose()
|
|
}
|
|
transposeIntoArray(t) {
|
|
const e = this.elements;
|
|
return t[0] = e[0], t[1] = e[3], t[2] = e[6], t[3] = e[1], t[4] = e[4], t[5] = e[7], t[6] = e[2], t[7] = e[5], t[8] = e[8], this
|
|
}
|
|
setUvTransform(t, e, n, i, r, o, s) {
|
|
const a = Math.cos(r),
|
|
l = Math.sin(r);
|
|
return this.set(n * a, n * l, -n * (a * o + l * s) + o + t, -i * l, i * a, -i * (-l * o + a * s) + s + e, 0, 0, 1), this
|
|
}
|
|
scale(t, e) {
|
|
const n = this.elements;
|
|
return n[0] *= t, n[3] *= t, n[6] *= t, n[1] *= e, n[4] *= e, n[7] *= e, this
|
|
}
|
|
rotate(t) {
|
|
const e = Math.cos(t),
|
|
n = Math.sin(t),
|
|
i = this.elements,
|
|
r = i[0],
|
|
o = i[3],
|
|
s = i[6],
|
|
a = i[1],
|
|
l = i[4],
|
|
c = i[7];
|
|
return i[0] = e * r + n * a, i[3] = e * o + n * l, i[6] = e * s + n * c, i[1] = -n * r + e * a, i[4] = -n * o + e * l, i[7] = -n * s + e * c, this
|
|
}
|
|
translate(t, e) {
|
|
const n = this.elements;
|
|
return n[0] += t * n[2], n[3] += t * n[5], n[6] += t * n[8], n[1] += e * n[2], n[4] += e * n[5], n[7] += e * n[8], this
|
|
}
|
|
equals(t) {
|
|
const e = this.elements,
|
|
n = t.elements;
|
|
for (let t = 0; t < 9; t++)
|
|
if (e[t] !== n[t]) return !1;
|
|
return !0
|
|
}
|
|
fromArray(t, e = 0) {
|
|
for (let n = 0; n < 9; n++) this.elements[n] = t[n + e];
|
|
return this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
const n = this.elements;
|
|
return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t
|
|
}
|
|
}
|
|
let A;
|
|
const x = {
|
|
getDataURL: function(t) {
|
|
if (/^data:/i.test(t.src)) return t.src;
|
|
if ("undefined" == typeof HTMLCanvasElement) return t.src;
|
|
let e;
|
|
if (t instanceof HTMLCanvasElement) e = t;
|
|
else {
|
|
void 0 === A && (A = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")), A.width = t.width, A.height = t.height;
|
|
const n = A.getContext("2d");
|
|
t instanceof ImageData ? n.putImageData(t, 0, 0) : n.drawImage(t, 0, 0, t.width, t.height), e = A
|
|
}
|
|
return e.width > 2048 || e.height > 2048 ? e.toDataURL("image/jpeg", .6) : e.toDataURL("image/png")
|
|
}
|
|
};
|
|
let _ = 0;
|
|
|
|
function b(t = b.DEFAULT_IMAGE, e = b.DEFAULT_MAPPING, n = 1001, i = 1001, r = 1006, o = 1008, s = 1023, a = 1009, l = 1, c = 3e3) {
|
|
Object.defineProperty(this, "id", {
|
|
value: _++
|
|
}), this.uuid = g.generateUUID(), this.name = "", this.image = t, this.mipmaps = [], this.mapping = e, this.wrapS = n, this.wrapT = i, this.magFilter = r, this.minFilter = o, this.anisotropy = l, this.format = s, this.internalFormat = null, this.type = a, this.offset = new v(0, 0), this.repeat = new v(1, 1), this.center = new v(0, 0), this.rotation = 0, this.matrixAutoUpdate = !0, this.matrix = new y, this.generateMipmaps = !0, this.premultiplyAlpha = !1, this.flipY = !0, this.unpackAlignment = 4, this.encoding = c, this.version = 0, this.onUpdate = null
|
|
}
|
|
|
|
function w(t) {
|
|
return "undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap ? x.getDataURL(t) : t.data ? {
|
|
data: Array.prototype.slice.call(t.data),
|
|
width: t.width,
|
|
height: t.height,
|
|
type: t.data.constructor.name
|
|
} : (console.warn("THREE.Texture: Unable to serialize Texture."), {})
|
|
}
|
|
b.DEFAULT_IMAGE = void 0, b.DEFAULT_MAPPING = 300, b.prototype = Object.assign(Object.create(p.prototype), {
|
|
constructor: b,
|
|
isTexture: !0,
|
|
updateMatrix: function() {
|
|
this.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y)
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
},
|
|
copy: function(t) {
|
|
return this.name = t.name, this.image = t.image, this.mipmaps = t.mipmaps.slice(0), this.mapping = t.mapping, this.wrapS = t.wrapS, this.wrapT = t.wrapT, this.magFilter = t.magFilter, this.minFilter = t.minFilter, this.anisotropy = t.anisotropy, this.format = t.format, this.internalFormat = t.internalFormat, this.type = t.type, this.offset.copy(t.offset), this.repeat.copy(t.repeat), this.center.copy(t.center), this.rotation = t.rotation, this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrix.copy(t.matrix), this.generateMipmaps = t.generateMipmaps, this.premultiplyAlpha = t.premultiplyAlpha, this.flipY = t.flipY, this.unpackAlignment = t.unpackAlignment, this.encoding = t.encoding, this
|
|
},
|
|
toJSON: function(t) {
|
|
const e = void 0 === t || "string" == typeof t;
|
|
if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid];
|
|
const n = {
|
|
metadata: {
|
|
version: 4.5,
|
|
type: "Texture",
|
|
generator: "Texture.toJSON"
|
|
},
|
|
uuid: this.uuid,
|
|
name: this.name,
|
|
mapping: this.mapping,
|
|
repeat: [this.repeat.x, this.repeat.y],
|
|
offset: [this.offset.x, this.offset.y],
|
|
center: [this.center.x, this.center.y],
|
|
rotation: this.rotation,
|
|
wrap: [this.wrapS, this.wrapT],
|
|
format: this.format,
|
|
type: this.type,
|
|
encoding: this.encoding,
|
|
minFilter: this.minFilter,
|
|
magFilter: this.magFilter,
|
|
anisotropy: this.anisotropy,
|
|
flipY: this.flipY,
|
|
premultiplyAlpha: this.premultiplyAlpha,
|
|
unpackAlignment: this.unpackAlignment
|
|
};
|
|
if (void 0 !== this.image) {
|
|
const i = this.image;
|
|
if (void 0 === i.uuid && (i.uuid = g.generateUUID()), !e && void 0 === t.images[i.uuid]) {
|
|
let e;
|
|
if (Array.isArray(i)) {
|
|
e = [];
|
|
for (let t = 0, n = i.length; t < n; t++) i[t].isDataTexture ? e.push(w(i[t].image)) : e.push(w(i[t]))
|
|
} else e = w(i);
|
|
t.images[i.uuid] = {
|
|
uuid: i.uuid,
|
|
url: e
|
|
}
|
|
}
|
|
n.image = i.uuid
|
|
}
|
|
return e || (t.textures[this.uuid] = n), n
|
|
},
|
|
dispose: function() {
|
|
this.dispatchEvent({
|
|
type: "dispose"
|
|
})
|
|
},
|
|
transformUv: function(t) {
|
|
if (300 !== this.mapping) return t;
|
|
if (t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1) switch (this.wrapS) {
|
|
case 1e3:
|
|
t.x = t.x - Math.floor(t.x);
|
|
break;
|
|
case 1001:
|
|
t.x = t.x < 0 ? 0 : 1;
|
|
break;
|
|
case 1002:
|
|
1 === Math.abs(Math.floor(t.x) % 2) ? t.x = Math.ceil(t.x) - t.x : t.x = t.x - Math.floor(t.x)
|
|
}
|
|
if (t.y < 0 || t.y > 1) switch (this.wrapT) {
|
|
case 1e3:
|
|
t.y = t.y - Math.floor(t.y);
|
|
break;
|
|
case 1001:
|
|
t.y = t.y < 0 ? 0 : 1;
|
|
break;
|
|
case 1002:
|
|
1 === Math.abs(Math.floor(t.y) % 2) ? t.y = Math.ceil(t.y) - t.y : t.y = t.y - Math.floor(t.y)
|
|
}
|
|
return this.flipY && (t.y = 1 - t.y), t
|
|
}
|
|
}), Object.defineProperty(b.prototype, "needsUpdate", {
|
|
set: function(t) {
|
|
!0 === t && this.version++
|
|
}
|
|
});
|
|
class M {
|
|
constructor(t = 0, e = 0, n = 0, i = 1) {
|
|
Object.defineProperty(this, "isVector4", {
|
|
value: !0
|
|
}), this.x = t, this.y = e, this.z = n, this.w = i
|
|
}
|
|
get width() {
|
|
return this.z
|
|
}
|
|
set width(t) {
|
|
this.z = t
|
|
}
|
|
get height() {
|
|
return this.w
|
|
}
|
|
set height(t) {
|
|
this.w = t
|
|
}
|
|
set(t, e, n, i) {
|
|
return this.x = t, this.y = e, this.z = n, this.w = i, this
|
|
}
|
|
setScalar(t) {
|
|
return this.x = t, this.y = t, this.z = t, this.w = t, this
|
|
}
|
|
setX(t) {
|
|
return this.x = t, this
|
|
}
|
|
setY(t) {
|
|
return this.y = t, this
|
|
}
|
|
setZ(t) {
|
|
return this.z = t, this
|
|
}
|
|
setW(t) {
|
|
return this.w = t, this
|
|
}
|
|
setComponent(t, e) {
|
|
switch (t) {
|
|
case 0:
|
|
this.x = e;
|
|
break;
|
|
case 1:
|
|
this.y = e;
|
|
break;
|
|
case 2:
|
|
this.z = e;
|
|
break;
|
|
case 3:
|
|
this.w = e;
|
|
break;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
return this
|
|
}
|
|
getComponent(t) {
|
|
switch (t) {
|
|
case 0:
|
|
return this.x;
|
|
case 1:
|
|
return this.y;
|
|
case 2:
|
|
return this.z;
|
|
case 3:
|
|
return this.w;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
}
|
|
clone() {
|
|
return new this.constructor(this.x, this.y, this.z, this.w)
|
|
}
|
|
copy(t) {
|
|
return this.x = t.x, this.y = t.y, this.z = t.z, this.w = void 0 !== t.w ? t.w : 1, this
|
|
}
|
|
add(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this.w += t.w, this)
|
|
}
|
|
addScalar(t) {
|
|
return this.x += t, this.y += t, this.z += t, this.w += t, this
|
|
}
|
|
addVectors(t, e) {
|
|
return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this.w = t.w + e.w, this
|
|
}
|
|
addScaledVector(t, e) {
|
|
return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this.w += t.w * e, this
|
|
}
|
|
sub(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this.w -= t.w, this)
|
|
}
|
|
subScalar(t) {
|
|
return this.x -= t, this.y -= t, this.z -= t, this.w -= t, this
|
|
}
|
|
subVectors(t, e) {
|
|
return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this.w = t.w - e.w, this
|
|
}
|
|
multiply(t) {
|
|
return this.x *= t.x, this.y *= t.y, this.z *= t.z, this.w *= t.w, this
|
|
}
|
|
multiplyScalar(t) {
|
|
return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this
|
|
}
|
|
applyMatrix4(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = this.w,
|
|
o = t.elements;
|
|
return this.x = o[0] * e + o[4] * n + o[8] * i + o[12] * r, this.y = o[1] * e + o[5] * n + o[9] * i + o[13] * r, this.z = o[2] * e + o[6] * n + o[10] * i + o[14] * r, this.w = o[3] * e + o[7] * n + o[11] * i + o[15] * r, this
|
|
}
|
|
divideScalar(t) {
|
|
return this.multiplyScalar(1 / t)
|
|
}
|
|
setAxisAngleFromQuaternion(t) {
|
|
this.w = 2 * Math.acos(t.w);
|
|
const e = Math.sqrt(1 - t.w * t.w);
|
|
return e < 1e-4 ? (this.x = 1, this.y = 0, this.z = 0) : (this.x = t.x / e, this.y = t.y / e, this.z = t.z / e), this
|
|
}
|
|
setAxisAngleFromRotationMatrix(t) {
|
|
let e, n, i, r;
|
|
const o = t.elements,
|
|
s = o[0],
|
|
a = o[4],
|
|
l = o[8],
|
|
c = o[1],
|
|
h = o[5],
|
|
u = o[9],
|
|
d = o[2],
|
|
p = o[6],
|
|
f = o[10];
|
|
if (Math.abs(a - c) < .01 && Math.abs(l - d) < .01 && Math.abs(u - p) < .01) {
|
|
if (Math.abs(a + c) < .1 && Math.abs(l + d) < .1 && Math.abs(u + p) < .1 && Math.abs(s + h + f - 3) < .1) return this.set(1, 0, 0, 0), this;
|
|
e = Math.PI;
|
|
const t = (s + 1) / 2,
|
|
o = (h + 1) / 2,
|
|
m = (f + 1) / 2,
|
|
g = (a + c) / 4,
|
|
v = (l + d) / 4,
|
|
y = (u + p) / 4;
|
|
return t > o && t > m ? t < .01 ? (n = 0, i = .707106781, r = .707106781) : (n = Math.sqrt(t), i = g / n, r = v / n) : o > m ? o < .01 ? (n = .707106781, i = 0, r = .707106781) : (i = Math.sqrt(o), n = g / i, r = y / i) : m < .01 ? (n = .707106781, i = .707106781, r = 0) : (r = Math.sqrt(m), n = v / r, i = y / r), this.set(n, i, r, e), this
|
|
}
|
|
let m = Math.sqrt((p - u) * (p - u) + (l - d) * (l - d) + (c - a) * (c - a));
|
|
return Math.abs(m) < .001 && (m = 1), this.x = (p - u) / m, this.y = (l - d) / m, this.z = (c - a) / m, this.w = Math.acos((s + h + f - 1) / 2), this
|
|
}
|
|
min(t) {
|
|
return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this.w = Math.min(this.w, t.w), this
|
|
}
|
|
max(t) {
|
|
return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this.w = Math.max(this.w, t.w), this
|
|
}
|
|
clamp(t, e) {
|
|
return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this.w = Math.max(t.w, Math.min(e.w, this.w)), this
|
|
}
|
|
clampScalar(t, e) {
|
|
return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this.w = Math.max(t, Math.min(e, this.w)), this
|
|
}
|
|
clampLength(t, e) {
|
|
const n = this.length();
|
|
return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
|
|
}
|
|
floor() {
|
|
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this.w = Math.floor(this.w), this
|
|
}
|
|
ceil() {
|
|
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this.w = Math.ceil(this.w), this
|
|
}
|
|
round() {
|
|
return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this.w = Math.round(this.w), this
|
|
}
|
|
roundToZero() {
|
|
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w), this
|
|
}
|
|
negate() {
|
|
return this.x = -this.x, this.y = -this.y, this.z = -this.z, this.w = -this.w, this
|
|
}
|
|
dot(t) {
|
|
return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w
|
|
}
|
|
lengthSq() {
|
|
return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
|
|
}
|
|
length() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)
|
|
}
|
|
manhattanLength() {
|
|
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w)
|
|
}
|
|
normalize() {
|
|
return this.divideScalar(this.length() || 1)
|
|
}
|
|
setLength(t) {
|
|
return this.normalize().multiplyScalar(t)
|
|
}
|
|
lerp(t, e) {
|
|
return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this.w += (t.w - this.w) * e, this
|
|
}
|
|
lerpVectors(t, e, n) {
|
|
return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this.w = t.w + (e.w - t.w) * n, this
|
|
}
|
|
equals(t) {
|
|
return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w
|
|
}
|
|
fromArray(t, e = 0) {
|
|
return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this.w = t[e + 3], this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t[e + 3] = this.w, t
|
|
}
|
|
fromBufferAttribute(t, e, n) {
|
|
return void 0 !== n && console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this.w = t.getW(e), this
|
|
}
|
|
random() {
|
|
return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this.w = Math.random(), this
|
|
}
|
|
}
|
|
class E extends p {
|
|
constructor(t, e, n) {
|
|
super(), Object.defineProperty(this, "isWebGLRenderTarget", {
|
|
value: !0
|
|
}), this.width = t, this.height = e, this.scissor = new M(0, 0, t, e), this.scissorTest = !1, this.viewport = new M(0, 0, t, e), n = n || {}, this.texture = new b(void 0, n.mapping, n.wrapS, n.wrapT, n.magFilter, n.minFilter, n.format, n.type, n.anisotropy, n.encoding), this.texture.image = {}, this.texture.image.width = t, this.texture.image.height = e, this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps, this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer, this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer, this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null
|
|
}
|
|
setSize(t, e) {
|
|
this.width === t && this.height === e || (this.width = t, this.height = e, this.texture.image.width = t, this.texture.image.height = e, this.dispose()), this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e)
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.width = t.width, this.height = t.height, this.viewport.copy(t.viewport), this.texture = t.texture.clone(), this.depthBuffer = t.depthBuffer, this.stencilBuffer = t.stencilBuffer, this.depthTexture = t.depthTexture, this
|
|
}
|
|
dispose() {
|
|
this.dispatchEvent({
|
|
type: "dispose"
|
|
})
|
|
}
|
|
}
|
|
class S {
|
|
constructor(t = 0, e = 0, n = 0, i = 1) {
|
|
Object.defineProperty(this, "isQuaternion", {
|
|
value: !0
|
|
}), this._x = t, this._y = e, this._z = n, this._w = i
|
|
}
|
|
static slerp(t, e, n, i) {
|
|
return n.copy(t).slerp(e, i)
|
|
}
|
|
static slerpFlat(t, e, n, i, r, o, s) {
|
|
let a = n[i + 0],
|
|
l = n[i + 1],
|
|
c = n[i + 2],
|
|
h = n[i + 3];
|
|
const u = r[o + 0],
|
|
d = r[o + 1],
|
|
p = r[o + 2],
|
|
f = r[o + 3];
|
|
if (h !== f || a !== u || l !== d || c !== p) {
|
|
let t = 1 - s;
|
|
const e = a * u + l * d + c * p + h * f,
|
|
n = e >= 0 ? 1 : -1,
|
|
i = 1 - e * e;
|
|
if (i > Number.EPSILON) {
|
|
const r = Math.sqrt(i),
|
|
o = Math.atan2(r, e * n);
|
|
t = Math.sin(t * o) / r, s = Math.sin(s * o) / r
|
|
}
|
|
const r = s * n;
|
|
if (a = a * t + u * r, l = l * t + d * r, c = c * t + p * r, h = h * t + f * r, t === 1 - s) {
|
|
const t = 1 / Math.sqrt(a * a + l * l + c * c + h * h);
|
|
a *= t, l *= t, c *= t, h *= t
|
|
}
|
|
}
|
|
t[e] = a, t[e + 1] = l, t[e + 2] = c, t[e + 3] = h
|
|
}
|
|
static multiplyQuaternionsFlat(t, e, n, i, r, o) {
|
|
const s = n[i],
|
|
a = n[i + 1],
|
|
l = n[i + 2],
|
|
c = n[i + 3],
|
|
h = r[o],
|
|
u = r[o + 1],
|
|
d = r[o + 2],
|
|
p = r[o + 3];
|
|
return t[e] = s * p + c * h + a * d - l * u, t[e + 1] = a * p + c * u + l * h - s * d, t[e + 2] = l * p + c * d + s * u - a * h, t[e + 3] = c * p - s * h - a * u - l * d, t
|
|
}
|
|
get x() {
|
|
return this._x
|
|
}
|
|
set x(t) {
|
|
this._x = t, this._onChangeCallback()
|
|
}
|
|
get y() {
|
|
return this._y
|
|
}
|
|
set y(t) {
|
|
this._y = t, this._onChangeCallback()
|
|
}
|
|
get z() {
|
|
return this._z
|
|
}
|
|
set z(t) {
|
|
this._z = t, this._onChangeCallback()
|
|
}
|
|
get w() {
|
|
return this._w
|
|
}
|
|
set w(t) {
|
|
this._w = t, this._onChangeCallback()
|
|
}
|
|
set(t, e, n, i) {
|
|
return this._x = t, this._y = e, this._z = n, this._w = i, this._onChangeCallback(), this
|
|
}
|
|
clone() {
|
|
return new this.constructor(this._x, this._y, this._z, this._w)
|
|
}
|
|
copy(t) {
|
|
return this._x = t.x, this._y = t.y, this._z = t.z, this._w = t.w, this._onChangeCallback(), this
|
|
}
|
|
setFromEuler(t, e) {
|
|
if (!t || !t.isEuler) throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");
|
|
const n = t._x,
|
|
i = t._y,
|
|
r = t._z,
|
|
o = t._order,
|
|
s = Math.cos,
|
|
a = Math.sin,
|
|
l = s(n / 2),
|
|
c = s(i / 2),
|
|
h = s(r / 2),
|
|
u = a(n / 2),
|
|
d = a(i / 2),
|
|
p = a(r / 2);
|
|
switch (o) {
|
|
case "XYZ":
|
|
this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p;
|
|
break;
|
|
case "YXZ":
|
|
this._x = u * c * h + l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p;
|
|
break;
|
|
case "ZXY":
|
|
this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h - u * d * p;
|
|
break;
|
|
case "ZYX":
|
|
this._x = u * c * h - l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h + u * d * p;
|
|
break;
|
|
case "YZX":
|
|
this._x = u * c * h + l * d * p, this._y = l * d * h + u * c * p, this._z = l * c * p - u * d * h, this._w = l * c * h - u * d * p;
|
|
break;
|
|
case "XZY":
|
|
this._x = u * c * h - l * d * p, this._y = l * d * h - u * c * p, this._z = l * c * p + u * d * h, this._w = l * c * h + u * d * p;
|
|
break;
|
|
default:
|
|
console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: " + o)
|
|
}
|
|
return !1 !== e && this._onChangeCallback(), this
|
|
}
|
|
setFromAxisAngle(t, e) {
|
|
const n = e / 2,
|
|
i = Math.sin(n);
|
|
return this._x = t.x * i, this._y = t.y * i, this._z = t.z * i, this._w = Math.cos(n), this._onChangeCallback(), this
|
|
}
|
|
setFromRotationMatrix(t) {
|
|
const e = t.elements,
|
|
n = e[0],
|
|
i = e[4],
|
|
r = e[8],
|
|
o = e[1],
|
|
s = e[5],
|
|
a = e[9],
|
|
l = e[2],
|
|
c = e[6],
|
|
h = e[10],
|
|
u = n + s + h;
|
|
if (u > 0) {
|
|
const t = .5 / Math.sqrt(u + 1);
|
|
this._w = .25 / t, this._x = (c - a) * t, this._y = (r - l) * t, this._z = (o - i) * t
|
|
} else if (n > s && n > h) {
|
|
const t = 2 * Math.sqrt(1 + n - s - h);
|
|
this._w = (c - a) / t, this._x = .25 * t, this._y = (i + o) / t, this._z = (r + l) / t
|
|
} else if (s > h) {
|
|
const t = 2 * Math.sqrt(1 + s - n - h);
|
|
this._w = (r - l) / t, this._x = (i + o) / t, this._y = .25 * t, this._z = (a + c) / t
|
|
} else {
|
|
const t = 2 * Math.sqrt(1 + h - n - s);
|
|
this._w = (o - i) / t, this._x = (r + l) / t, this._y = (a + c) / t, this._z = .25 * t
|
|
}
|
|
return this._onChangeCallback(), this
|
|
}
|
|
setFromUnitVectors(t, e) {
|
|
let n = t.dot(e) + 1;
|
|
return n < 1e-6 ? (n = 0, Math.abs(t.x) > Math.abs(t.z) ? (this._x = -t.y, this._y = t.x, this._z = 0, this._w = n) : (this._x = 0, this._y = -t.z, this._z = t.y, this._w = n)) : (this._x = t.y * e.z - t.z * e.y, this._y = t.z * e.x - t.x * e.z, this._z = t.x * e.y - t.y * e.x, this._w = n), this.normalize()
|
|
}
|
|
angleTo(t) {
|
|
return 2 * Math.acos(Math.abs(g.clamp(this.dot(t), -1, 1)))
|
|
}
|
|
rotateTowards(t, e) {
|
|
const n = this.angleTo(t);
|
|
if (0 === n) return this;
|
|
const i = Math.min(1, e / n);
|
|
return this.slerp(t, i), this
|
|
}
|
|
identity() {
|
|
return this.set(0, 0, 0, 1)
|
|
}
|
|
invert() {
|
|
return this.conjugate()
|
|
}
|
|
conjugate() {
|
|
return this._x *= -1, this._y *= -1, this._z *= -1, this._onChangeCallback(), this
|
|
}
|
|
dot(t) {
|
|
return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w
|
|
}
|
|
lengthSq() {
|
|
return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w
|
|
}
|
|
length() {
|
|
return Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w)
|
|
}
|
|
normalize() {
|
|
let t = this.length();
|
|
return 0 === t ? (this._x = 0, this._y = 0, this._z = 0, this._w = 1) : (t = 1 / t, this._x = this._x * t, this._y = this._y * t, this._z = this._z * t, this._w = this._w * t), this._onChangeCallback(), this
|
|
}
|
|
multiply(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), this.multiplyQuaternions(t, e)) : this.multiplyQuaternions(this, t)
|
|
}
|
|
premultiply(t) {
|
|
return this.multiplyQuaternions(t, this)
|
|
}
|
|
multiplyQuaternions(t, e) {
|
|
const n = t._x,
|
|
i = t._y,
|
|
r = t._z,
|
|
o = t._w,
|
|
s = e._x,
|
|
a = e._y,
|
|
l = e._z,
|
|
c = e._w;
|
|
return this._x = n * c + o * s + i * l - r * a, this._y = i * c + o * a + r * s - n * l, this._z = r * c + o * l + n * a - i * s, this._w = o * c - n * s - i * a - r * l, this._onChangeCallback(), this
|
|
}
|
|
slerp(t, e) {
|
|
if (0 === e) return this;
|
|
if (1 === e) return this.copy(t);
|
|
const n = this._x,
|
|
i = this._y,
|
|
r = this._z,
|
|
o = this._w;
|
|
let s = o * t._w + n * t._x + i * t._y + r * t._z;
|
|
if (s < 0 ? (this._w = -t._w, this._x = -t._x, this._y = -t._y, this._z = -t._z, s = -s) : this.copy(t), s >= 1) return this._w = o, this._x = n, this._y = i, this._z = r, this;
|
|
const a = 1 - s * s;
|
|
if (a <= Number.EPSILON) {
|
|
const t = 1 - e;
|
|
return this._w = t * o + e * this._w, this._x = t * n + e * this._x, this._y = t * i + e * this._y, this._z = t * r + e * this._z, this.normalize(), this._onChangeCallback(), this
|
|
}
|
|
const l = Math.sqrt(a),
|
|
c = Math.atan2(l, s),
|
|
h = Math.sin((1 - e) * c) / l,
|
|
u = Math.sin(e * c) / l;
|
|
return this._w = o * h + this._w * u, this._x = n * h + this._x * u, this._y = i * h + this._y * u, this._z = r * h + this._z * u, this._onChangeCallback(), this
|
|
}
|
|
equals(t) {
|
|
return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w
|
|
}
|
|
fromArray(t, e = 0) {
|
|
return this._x = t[e], this._y = t[e + 1], this._z = t[e + 2], this._w = t[e + 3], this._onChangeCallback(), this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._w, t
|
|
}
|
|
fromBufferAttribute(t, e) {
|
|
return this._x = t.getX(e), this._y = t.getY(e), this._z = t.getZ(e), this._w = t.getW(e), this
|
|
}
|
|
_onChange(t) {
|
|
return this._onChangeCallback = t, this
|
|
}
|
|
_onChangeCallback() {}
|
|
}
|
|
class T {
|
|
constructor(t = 0, e = 0, n = 0) {
|
|
Object.defineProperty(this, "isVector3", {
|
|
value: !0
|
|
}), this.x = t, this.y = e, this.z = n
|
|
}
|
|
set(t, e, n) {
|
|
return void 0 === n && (n = this.z), this.x = t, this.y = e, this.z = n, this
|
|
}
|
|
setScalar(t) {
|
|
return this.x = t, this.y = t, this.z = t, this
|
|
}
|
|
setX(t) {
|
|
return this.x = t, this
|
|
}
|
|
setY(t) {
|
|
return this.y = t, this
|
|
}
|
|
setZ(t) {
|
|
return this.z = t, this
|
|
}
|
|
setComponent(t, e) {
|
|
switch (t) {
|
|
case 0:
|
|
this.x = e;
|
|
break;
|
|
case 1:
|
|
this.y = e;
|
|
break;
|
|
case 2:
|
|
this.z = e;
|
|
break;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
return this
|
|
}
|
|
getComponent(t) {
|
|
switch (t) {
|
|
case 0:
|
|
return this.x;
|
|
case 1:
|
|
return this.y;
|
|
case 2:
|
|
return this.z;
|
|
default:
|
|
throw new Error("index is out of range: " + t)
|
|
}
|
|
}
|
|
clone() {
|
|
return new this.constructor(this.x, this.y, this.z)
|
|
}
|
|
copy(t) {
|
|
return this.x = t.x, this.y = t.y, this.z = t.z, this
|
|
}
|
|
add(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), this.addVectors(t, e)) : (this.x += t.x, this.y += t.y, this.z += t.z, this)
|
|
}
|
|
addScalar(t) {
|
|
return this.x += t, this.y += t, this.z += t, this
|
|
}
|
|
addVectors(t, e) {
|
|
return this.x = t.x + e.x, this.y = t.y + e.y, this.z = t.z + e.z, this
|
|
}
|
|
addScaledVector(t, e) {
|
|
return this.x += t.x * e, this.y += t.y * e, this.z += t.z * e, this
|
|
}
|
|
sub(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), this.subVectors(t, e)) : (this.x -= t.x, this.y -= t.y, this.z -= t.z, this)
|
|
}
|
|
subScalar(t) {
|
|
return this.x -= t, this.y -= t, this.z -= t, this
|
|
}
|
|
subVectors(t, e) {
|
|
return this.x = t.x - e.x, this.y = t.y - e.y, this.z = t.z - e.z, this
|
|
}
|
|
multiply(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), this.multiplyVectors(t, e)) : (this.x *= t.x, this.y *= t.y, this.z *= t.z, this)
|
|
}
|
|
multiplyScalar(t) {
|
|
return this.x *= t, this.y *= t, this.z *= t, this
|
|
}
|
|
multiplyVectors(t, e) {
|
|
return this.x = t.x * e.x, this.y = t.y * e.y, this.z = t.z * e.z, this
|
|
}
|
|
applyEuler(t) {
|
|
return t && t.isEuler || console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."), this.applyQuaternion(R.setFromEuler(t))
|
|
}
|
|
applyAxisAngle(t, e) {
|
|
return this.applyQuaternion(R.setFromAxisAngle(t, e))
|
|
}
|
|
applyMatrix3(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = t.elements;
|
|
return this.x = r[0] * e + r[3] * n + r[6] * i, this.y = r[1] * e + r[4] * n + r[7] * i, this.z = r[2] * e + r[5] * n + r[8] * i, this
|
|
}
|
|
applyNormalMatrix(t) {
|
|
return this.applyMatrix3(t).normalize()
|
|
}
|
|
applyMatrix4(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = t.elements,
|
|
o = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]);
|
|
return this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * o, this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * o, this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * o, this
|
|
}
|
|
applyQuaternion(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = t.x,
|
|
o = t.y,
|
|
s = t.z,
|
|
a = t.w,
|
|
l = a * e + o * i - s * n,
|
|
c = a * n + s * e - r * i,
|
|
h = a * i + r * n - o * e,
|
|
u = -r * e - o * n - s * i;
|
|
return this.x = l * a + u * -r + c * -s - h * -o, this.y = c * a + u * -o + h * -r - l * -s, this.z = h * a + u * -s + l * -o - c * -r, this
|
|
}
|
|
project(t) {
|
|
return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)
|
|
}
|
|
unproject(t) {
|
|
return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)
|
|
}
|
|
transformDirection(t) {
|
|
const e = this.x,
|
|
n = this.y,
|
|
i = this.z,
|
|
r = t.elements;
|
|
return this.x = r[0] * e + r[4] * n + r[8] * i, this.y = r[1] * e + r[5] * n + r[9] * i, this.z = r[2] * e + r[6] * n + r[10] * i, this.normalize()
|
|
}
|
|
divide(t) {
|
|
return this.x /= t.x, this.y /= t.y, this.z /= t.z, this
|
|
}
|
|
divideScalar(t) {
|
|
return this.multiplyScalar(1 / t)
|
|
}
|
|
min(t) {
|
|
return this.x = Math.min(this.x, t.x), this.y = Math.min(this.y, t.y), this.z = Math.min(this.z, t.z), this
|
|
}
|
|
max(t) {
|
|
return this.x = Math.max(this.x, t.x), this.y = Math.max(this.y, t.y), this.z = Math.max(this.z, t.z), this
|
|
}
|
|
clamp(t, e) {
|
|
return this.x = Math.max(t.x, Math.min(e.x, this.x)), this.y = Math.max(t.y, Math.min(e.y, this.y)), this.z = Math.max(t.z, Math.min(e.z, this.z)), this
|
|
}
|
|
clampScalar(t, e) {
|
|
return this.x = Math.max(t, Math.min(e, this.x)), this.y = Math.max(t, Math.min(e, this.y)), this.z = Math.max(t, Math.min(e, this.z)), this
|
|
}
|
|
clampLength(t, e) {
|
|
const n = this.length();
|
|
return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n)))
|
|
}
|
|
floor() {
|
|
return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this.z = Math.floor(this.z), this
|
|
}
|
|
ceil() {
|
|
return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this.z = Math.ceil(this.z), this
|
|
}
|
|
round() {
|
|
return this.x = Math.round(this.x), this.y = Math.round(this.y), this.z = Math.round(this.z), this
|
|
}
|
|
roundToZero() {
|
|
return this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x), this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y), this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z), this
|
|
}
|
|
negate() {
|
|
return this.x = -this.x, this.y = -this.y, this.z = -this.z, this
|
|
}
|
|
dot(t) {
|
|
return this.x * t.x + this.y * t.y + this.z * t.z
|
|
}
|
|
lengthSq() {
|
|
return this.x * this.x + this.y * this.y + this.z * this.z
|
|
}
|
|
length() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
|
|
}
|
|
manhattanLength() {
|
|
return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z)
|
|
}
|
|
normalize() {
|
|
return this.divideScalar(this.length() || 1)
|
|
}
|
|
setLength(t) {
|
|
return this.normalize().multiplyScalar(t)
|
|
}
|
|
lerp(t, e) {
|
|
return this.x += (t.x - this.x) * e, this.y += (t.y - this.y) * e, this.z += (t.z - this.z) * e, this
|
|
}
|
|
lerpVectors(t, e, n) {
|
|
return this.x = t.x + (e.x - t.x) * n, this.y = t.y + (e.y - t.y) * n, this.z = t.z + (e.z - t.z) * n, this
|
|
}
|
|
cross(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."), this.crossVectors(t, e)) : this.crossVectors(this, t)
|
|
}
|
|
crossVectors(t, e) {
|
|
const n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = e.x,
|
|
s = e.y,
|
|
a = e.z;
|
|
return this.x = i * a - r * s, this.y = r * o - n * a, this.z = n * s - i * o, this
|
|
}
|
|
projectOnVector(t) {
|
|
const e = t.lengthSq();
|
|
if (0 === e) return this.set(0, 0, 0);
|
|
const n = t.dot(this) / e;
|
|
return this.copy(t).multiplyScalar(n)
|
|
}
|
|
projectOnPlane(t) {
|
|
return L.copy(this).projectOnVector(t), this.sub(L)
|
|
}
|
|
reflect(t) {
|
|
return this.sub(L.copy(t).multiplyScalar(2 * this.dot(t)))
|
|
}
|
|
angleTo(t) {
|
|
const e = Math.sqrt(this.lengthSq() * t.lengthSq());
|
|
if (0 === e) return Math.PI / 2;
|
|
const n = this.dot(t) / e;
|
|
return Math.acos(g.clamp(n, -1, 1))
|
|
}
|
|
distanceTo(t) {
|
|
return Math.sqrt(this.distanceToSquared(t))
|
|
}
|
|
distanceToSquared(t) {
|
|
const e = this.x - t.x,
|
|
n = this.y - t.y,
|
|
i = this.z - t.z;
|
|
return e * e + n * n + i * i
|
|
}
|
|
manhattanDistanceTo(t) {
|
|
return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z)
|
|
}
|
|
setFromSpherical(t) {
|
|
return this.setFromSphericalCoords(t.radius, t.phi, t.theta)
|
|
}
|
|
setFromSphericalCoords(t, e, n) {
|
|
const i = Math.sin(e) * t;
|
|
return this.x = i * Math.sin(n), this.y = Math.cos(e) * t, this.z = i * Math.cos(n), this
|
|
}
|
|
setFromCylindrical(t) {
|
|
return this.setFromCylindricalCoords(t.radius, t.theta, t.y)
|
|
}
|
|
setFromCylindricalCoords(t, e, n) {
|
|
return this.x = t * Math.sin(e), this.y = n, this.z = t * Math.cos(e), this
|
|
}
|
|
setFromMatrixPosition(t) {
|
|
const e = t.elements;
|
|
return this.x = e[12], this.y = e[13], this.z = e[14], this
|
|
}
|
|
setFromMatrixScale(t) {
|
|
const e = this.setFromMatrixColumn(t, 0).length(),
|
|
n = this.setFromMatrixColumn(t, 1).length(),
|
|
i = this.setFromMatrixColumn(t, 2).length();
|
|
return this.x = e, this.y = n, this.z = i, this
|
|
}
|
|
setFromMatrixColumn(t, e) {
|
|
return this.fromArray(t.elements, 4 * e)
|
|
}
|
|
setFromMatrix3Column(t, e) {
|
|
return this.fromArray(t.elements, 3 * e)
|
|
}
|
|
equals(t) {
|
|
return t.x === this.x && t.y === this.y && t.z === this.z
|
|
}
|
|
fromArray(t, e = 0) {
|
|
return this.x = t[e], this.y = t[e + 1], this.z = t[e + 2], this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this.x, t[e + 1] = this.y, t[e + 2] = this.z, t
|
|
}
|
|
fromBufferAttribute(t, e, n) {
|
|
return void 0 !== n && console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."), this.x = t.getX(e), this.y = t.getY(e), this.z = t.getZ(e), this
|
|
}
|
|
random() {
|
|
return this.x = Math.random(), this.y = Math.random(), this.z = Math.random(), this
|
|
}
|
|
}
|
|
const L = new T,
|
|
R = new S;
|
|
class C {
|
|
constructor(t, e) {
|
|
Object.defineProperty(this, "isBox3", {
|
|
value: !0
|
|
}), this.min = void 0 !== t ? t : new T(1 / 0, 1 / 0, 1 / 0), this.max = void 0 !== e ? e : new T(-1 / 0, -1 / 0, -1 / 0)
|
|
}
|
|
set(t, e) {
|
|
return this.min.copy(t), this.max.copy(e), this
|
|
}
|
|
setFromArray(t) {
|
|
let e = 1 / 0,
|
|
n = 1 / 0,
|
|
i = 1 / 0,
|
|
r = -1 / 0,
|
|
o = -1 / 0,
|
|
s = -1 / 0;
|
|
for (let a = 0, l = t.length; a < l; a += 3) {
|
|
const l = t[a],
|
|
c = t[a + 1],
|
|
h = t[a + 2];
|
|
l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h)
|
|
}
|
|
return this.min.set(e, n, i), this.max.set(r, o, s), this
|
|
}
|
|
setFromBufferAttribute(t) {
|
|
let e = 1 / 0,
|
|
n = 1 / 0,
|
|
i = 1 / 0,
|
|
r = -1 / 0,
|
|
o = -1 / 0,
|
|
s = -1 / 0;
|
|
for (let a = 0, l = t.count; a < l; a++) {
|
|
const l = t.getX(a),
|
|
c = t.getY(a),
|
|
h = t.getZ(a);
|
|
l < e && (e = l), c < n && (n = c), h < i && (i = h), l > r && (r = l), c > o && (o = c), h > s && (s = h)
|
|
}
|
|
return this.min.set(e, n, i), this.max.set(r, o, s), this
|
|
}
|
|
setFromPoints(t) {
|
|
this.makeEmpty();
|
|
for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]);
|
|
return this
|
|
}
|
|
setFromCenterAndSize(t, e) {
|
|
const n = I.copy(e).multiplyScalar(.5);
|
|
return this.min.copy(t).sub(n), this.max.copy(t).add(n), this
|
|
}
|
|
setFromObject(t) {
|
|
return this.makeEmpty(), this.expandByObject(t)
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.min.copy(t.min), this.max.copy(t.max), this
|
|
}
|
|
makeEmpty() {
|
|
return this.min.x = this.min.y = this.min.z = 1 / 0, this.max.x = this.max.y = this.max.z = -1 / 0, this
|
|
}
|
|
isEmpty() {
|
|
return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z
|
|
}
|
|
getCenter(t) {
|
|
return void 0 === t && (console.warn("THREE.Box3: .getCenter() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5)
|
|
}
|
|
getSize(t) {
|
|
return void 0 === t && (console.warn("THREE.Box3: .getSize() target is now required"), t = new T), this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min)
|
|
}
|
|
expandByPoint(t) {
|
|
return this.min.min(t), this.max.max(t), this
|
|
}
|
|
expandByVector(t) {
|
|
return this.min.sub(t), this.max.add(t), this
|
|
}
|
|
expandByScalar(t) {
|
|
return this.min.addScalar(-t), this.max.addScalar(t), this
|
|
}
|
|
expandByObject(t) {
|
|
t.updateWorldMatrix(!1, !1);
|
|
const e = t.geometry;
|
|
void 0 !== e && (null === e.boundingBox && e.computeBoundingBox(), O.copy(e.boundingBox), O.applyMatrix4(t.matrixWorld), this.union(O));
|
|
const n = t.children;
|
|
for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]);
|
|
return this
|
|
}
|
|
containsPoint(t) {
|
|
return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y || t.z < this.min.z || t.z > this.max.z)
|
|
}
|
|
containsBox(t) {
|
|
return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y && this.min.z <= t.min.z && t.max.z <= this.max.z
|
|
}
|
|
getParameter(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Box3: .getParameter() target is now required"), e = new T), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y), (t.z - this.min.z) / (this.max.z - this.min.z))
|
|
}
|
|
intersectsBox(t) {
|
|
return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y || t.max.z < this.min.z || t.min.z > this.max.z)
|
|
}
|
|
intersectsSphere(t) {
|
|
return this.clampPoint(t.center, I), I.distanceToSquared(t.center) <= t.radius * t.radius
|
|
}
|
|
intersectsPlane(t) {
|
|
let e, n;
|
|
return t.normal.x > 0 ? (e = t.normal.x * this.min.x, n = t.normal.x * this.max.x) : (e = t.normal.x * this.max.x, n = t.normal.x * this.min.x), t.normal.y > 0 ? (e += t.normal.y * this.min.y, n += t.normal.y * this.max.y) : (e += t.normal.y * this.max.y, n += t.normal.y * this.min.y), t.normal.z > 0 ? (e += t.normal.z * this.min.z, n += t.normal.z * this.max.z) : (e += t.normal.z * this.max.z, n += t.normal.z * this.min.z), e <= -t.constant && n >= -t.constant
|
|
}
|
|
intersectsTriangle(t) {
|
|
if (this.isEmpty()) return !1;
|
|
this.getCenter(G), V.subVectors(this.max, G), N.subVectors(t.a, G), B.subVectors(t.b, G), F.subVectors(t.c, G), z.subVectors(B, N), U.subVectors(F, B), H.subVectors(N, F);
|
|
let e = [0, -z.z, z.y, 0, -U.z, U.y, 0, -H.z, H.y, z.z, 0, -z.x, U.z, 0, -U.x, H.z, 0, -H.x, -z.y, z.x, 0, -U.y, U.x, 0, -H.y, H.x, 0];
|
|
return !!P(e, N, B, F, V) && (e = [1, 0, 0, 0, 1, 0, 0, 0, 1], !!P(e, N, B, F, V) && (k.crossVectors(z, U), e = [k.x, k.y, k.z], P(e, N, B, F, V)))
|
|
}
|
|
clampPoint(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Box3: .clampPoint() target is now required"), e = new T), e.copy(t).clamp(this.min, this.max)
|
|
}
|
|
distanceToPoint(t) {
|
|
return I.copy(t).clamp(this.min, this.max).sub(t).length()
|
|
}
|
|
getBoundingSphere(t) {
|
|
return void 0 === t && console.error("THREE.Box3: .getBoundingSphere() target is now required"), this.getCenter(t.center), t.radius = .5 * this.getSize(I).length(), t
|
|
}
|
|
intersect(t) {
|
|
return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this
|
|
}
|
|
union(t) {
|
|
return this.min.min(t.min), this.max.max(t.max), this
|
|
}
|
|
applyMatrix4(t) {
|
|
return this.isEmpty() || (D[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), D[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), D[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), D[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), D[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), D[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), D[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), D[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), this.setFromPoints(D)), this
|
|
}
|
|
translate(t) {
|
|
return this.min.add(t), this.max.add(t), this
|
|
}
|
|
equals(t) {
|
|
return t.min.equals(this.min) && t.max.equals(this.max)
|
|
}
|
|
}
|
|
|
|
function P(t, e, n, i, r) {
|
|
for (let o = 0, s = t.length - 3; o <= s; o += 3) {
|
|
W.fromArray(t, o);
|
|
const s = r.x * Math.abs(W.x) + r.y * Math.abs(W.y) + r.z * Math.abs(W.z),
|
|
a = e.dot(W),
|
|
l = n.dot(W),
|
|
c = i.dot(W);
|
|
if (Math.max(-Math.max(a, l, c), Math.min(a, l, c)) > s) return !1
|
|
}
|
|
return !0
|
|
}
|
|
const D = [new T, new T, new T, new T, new T, new T, new T, new T],
|
|
I = new T,
|
|
O = new C,
|
|
N = new T,
|
|
B = new T,
|
|
F = new T,
|
|
z = new T,
|
|
U = new T,
|
|
H = new T,
|
|
G = new T,
|
|
V = new T,
|
|
k = new T,
|
|
W = new T,
|
|
j = new C;
|
|
class X {
|
|
constructor(t, e) {
|
|
this.center = void 0 !== t ? t : new T, this.radius = void 0 !== e ? e : -1
|
|
}
|
|
set(t, e) {
|
|
return this.center.copy(t), this.radius = e, this
|
|
}
|
|
setFromPoints(t, e) {
|
|
const n = this.center;
|
|
void 0 !== e ? n.copy(e) : j.setFromPoints(t).getCenter(n);
|
|
let i = 0;
|
|
for (let e = 0, r = t.length; e < r; e++) i = Math.max(i, n.distanceToSquared(t[e]));
|
|
return this.radius = Math.sqrt(i), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.center.copy(t.center), this.radius = t.radius, this
|
|
}
|
|
isEmpty() {
|
|
return this.radius < 0
|
|
}
|
|
makeEmpty() {
|
|
return this.center.set(0, 0, 0), this.radius = -1, this
|
|
}
|
|
containsPoint(t) {
|
|
return t.distanceToSquared(this.center) <= this.radius * this.radius
|
|
}
|
|
distanceToPoint(t) {
|
|
return t.distanceTo(this.center) - this.radius
|
|
}
|
|
intersectsSphere(t) {
|
|
const e = this.radius + t.radius;
|
|
return t.center.distanceToSquared(this.center) <= e * e
|
|
}
|
|
intersectsBox(t) {
|
|
return t.intersectsSphere(this)
|
|
}
|
|
intersectsPlane(t) {
|
|
return Math.abs(t.distanceToPoint(this.center)) <= this.radius
|
|
}
|
|
clampPoint(t, e) {
|
|
const n = this.center.distanceToSquared(t);
|
|
return void 0 === e && (console.warn("THREE.Sphere: .clampPoint() target is now required"), e = new T), e.copy(t), n > this.radius * this.radius && (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), e
|
|
}
|
|
getBoundingBox(t) {
|
|
return void 0 === t && (console.warn("THREE.Sphere: .getBoundingBox() target is now required"), t = new C), this.isEmpty() ? (t.makeEmpty(), t) : (t.set(this.center, this.center), t.expandByScalar(this.radius), t)
|
|
}
|
|
applyMatrix4(t) {
|
|
return this.center.applyMatrix4(t), this.radius = this.radius * t.getMaxScaleOnAxis(), this
|
|
}
|
|
translate(t) {
|
|
return this.center.add(t), this
|
|
}
|
|
equals(t) {
|
|
return t.center.equals(this.center) && t.radius === this.radius
|
|
}
|
|
}
|
|
const q = new T,
|
|
Y = new T,
|
|
Q = new T,
|
|
Z = new T,
|
|
J = new T,
|
|
K = new T,
|
|
$ = new T;
|
|
class tt {
|
|
constructor(t, e) {
|
|
this.origin = void 0 !== t ? t : new T, this.direction = void 0 !== e ? e : new T(0, 0, -1)
|
|
}
|
|
set(t, e) {
|
|
return this.origin.copy(t), this.direction.copy(e), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.origin.copy(t.origin), this.direction.copy(t.direction), this
|
|
}
|
|
at(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Ray: .at() target is now required"), e = new T), e.copy(this.direction).multiplyScalar(t).add(this.origin)
|
|
}
|
|
lookAt(t) {
|
|
return this.direction.copy(t).sub(this.origin).normalize(), this
|
|
}
|
|
recast(t) {
|
|
return this.origin.copy(this.at(t, q)), this
|
|
}
|
|
closestPointToPoint(t, e) {
|
|
void 0 === e && (console.warn("THREE.Ray: .closestPointToPoint() target is now required"), e = new T), e.subVectors(t, this.origin);
|
|
const n = e.dot(this.direction);
|
|
return n < 0 ? e.copy(this.origin) : e.copy(this.direction).multiplyScalar(n).add(this.origin)
|
|
}
|
|
distanceToPoint(t) {
|
|
return Math.sqrt(this.distanceSqToPoint(t))
|
|
}
|
|
distanceSqToPoint(t) {
|
|
const e = q.subVectors(t, this.origin).dot(this.direction);
|
|
return e < 0 ? this.origin.distanceToSquared(t) : (q.copy(this.direction).multiplyScalar(e).add(this.origin), q.distanceToSquared(t))
|
|
}
|
|
distanceSqToSegment(t, e, n, i) {
|
|
Y.copy(t).add(e).multiplyScalar(.5), Q.copy(e).sub(t).normalize(), Z.copy(this.origin).sub(Y);
|
|
const r = .5 * t.distanceTo(e),
|
|
o = -this.direction.dot(Q),
|
|
s = Z.dot(this.direction),
|
|
a = -Z.dot(Q),
|
|
l = Z.lengthSq(),
|
|
c = Math.abs(1 - o * o);
|
|
let h, u, d, p;
|
|
if (c > 0)
|
|
if (h = o * a - s, u = o * s - a, p = r * c, h >= 0)
|
|
if (u >= -p)
|
|
if (u <= p) {
|
|
const t = 1 / c;
|
|
h *= t, u *= t, d = h * (h + o * u + 2 * s) + u * (o * h + u + 2 * a) + l
|
|
} else u = r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l;
|
|
else u = -r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l;
|
|
else u <= -p ? (h = Math.max(0, -(-o * r + s)), u = h > 0 ? -r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l) : u <= p ? (h = 0, u = Math.min(Math.max(-r, -a), r), d = u * (u + 2 * a) + l) : (h = Math.max(0, -(o * r + s)), u = h > 0 ? r : Math.min(Math.max(-r, -a), r), d = -h * h + u * (u + 2 * a) + l);
|
|
else u = o > 0 ? -r : r, h = Math.max(0, -(o * u + s)), d = -h * h + u * (u + 2 * a) + l;
|
|
return n && n.copy(this.direction).multiplyScalar(h).add(this.origin), i && i.copy(Q).multiplyScalar(u).add(Y), d
|
|
}
|
|
intersectSphere(t, e) {
|
|
q.subVectors(t.center, this.origin);
|
|
const n = q.dot(this.direction),
|
|
i = q.dot(q) - n * n,
|
|
r = t.radius * t.radius;
|
|
if (i > r) return null;
|
|
const o = Math.sqrt(r - i),
|
|
s = n - o,
|
|
a = n + o;
|
|
return s < 0 && a < 0 ? null : s < 0 ? this.at(a, e) : this.at(s, e)
|
|
}
|
|
intersectsSphere(t) {
|
|
return this.distanceSqToPoint(t.center) <= t.radius * t.radius
|
|
}
|
|
distanceToPlane(t) {
|
|
const e = t.normal.dot(this.direction);
|
|
if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null;
|
|
const n = -(this.origin.dot(t.normal) + t.constant) / e;
|
|
return n >= 0 ? n : null
|
|
}
|
|
intersectPlane(t, e) {
|
|
const n = this.distanceToPlane(t);
|
|
return null === n ? null : this.at(n, e)
|
|
}
|
|
intersectsPlane(t) {
|
|
const e = t.distanceToPoint(this.origin);
|
|
if (0 === e) return !0;
|
|
return t.normal.dot(this.direction) * e < 0
|
|
}
|
|
intersectBox(t, e) {
|
|
let n, i, r, o, s, a;
|
|
const l = 1 / this.direction.x,
|
|
c = 1 / this.direction.y,
|
|
h = 1 / this.direction.z,
|
|
u = this.origin;
|
|
return l >= 0 ? (n = (t.min.x - u.x) * l, i = (t.max.x - u.x) * l) : (n = (t.max.x - u.x) * l, i = (t.min.x - u.x) * l), c >= 0 ? (r = (t.min.y - u.y) * c, o = (t.max.y - u.y) * c) : (r = (t.max.y - u.y) * c, o = (t.min.y - u.y) * c), n > o || r > i ? null : ((r > n || n != n) && (n = r), (o < i || i != i) && (i = o), h >= 0 ? (s = (t.min.z - u.z) * h, a = (t.max.z - u.z) * h) : (s = (t.max.z - u.z) * h, a = (t.min.z - u.z) * h), n > a || s > i ? null : ((s > n || n != n) && (n = s), (a < i || i != i) && (i = a), i < 0 ? null : this.at(n >= 0 ? n : i, e)))
|
|
}
|
|
intersectsBox(t) {
|
|
return null !== this.intersectBox(t, q)
|
|
}
|
|
intersectTriangle(t, e, n, i, r) {
|
|
J.subVectors(e, t), K.subVectors(n, t), $.crossVectors(J, K);
|
|
let o, s = this.direction.dot($);
|
|
if (s > 0) {
|
|
if (i) return null;
|
|
o = 1
|
|
} else {
|
|
if (!(s < 0)) return null;
|
|
o = -1, s = -s
|
|
}
|
|
Z.subVectors(this.origin, t);
|
|
const a = o * this.direction.dot(K.crossVectors(Z, K));
|
|
if (a < 0) return null;
|
|
const l = o * this.direction.dot(J.cross(Z));
|
|
if (l < 0) return null;
|
|
if (a + l > s) return null;
|
|
const c = -o * Z.dot($);
|
|
return c < 0 ? null : this.at(c / s, r)
|
|
}
|
|
applyMatrix4(t) {
|
|
return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this
|
|
}
|
|
equals(t) {
|
|
return t.origin.equals(this.origin) && t.direction.equals(this.direction)
|
|
}
|
|
}
|
|
class et {
|
|
constructor() {
|
|
Object.defineProperty(this, "isMatrix4", {
|
|
value: !0
|
|
}), this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], arguments.length > 0 && console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")
|
|
}
|
|
set(t, e, n, i, r, o, s, a, l, c, h, u, d, p, f, m) {
|
|
const g = this.elements;
|
|
return g[0] = t, g[4] = e, g[8] = n, g[12] = i, g[1] = r, g[5] = o, g[9] = s, g[13] = a, g[2] = l, g[6] = c, g[10] = h, g[14] = u, g[3] = d, g[7] = p, g[11] = f, g[15] = m, this
|
|
}
|
|
identity() {
|
|
return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this
|
|
}
|
|
clone() {
|
|
return (new et).fromArray(this.elements)
|
|
}
|
|
copy(t) {
|
|
const e = this.elements,
|
|
n = t.elements;
|
|
return e[0] = n[0], e[1] = n[1], e[2] = n[2], e[3] = n[3], e[4] = n[4], e[5] = n[5], e[6] = n[6], e[7] = n[7], e[8] = n[8], e[9] = n[9], e[10] = n[10], e[11] = n[11], e[12] = n[12], e[13] = n[13], e[14] = n[14], e[15] = n[15], this
|
|
}
|
|
copyPosition(t) {
|
|
const e = this.elements,
|
|
n = t.elements;
|
|
return e[12] = n[12], e[13] = n[13], e[14] = n[14], this
|
|
}
|
|
setFromMatrix3(t) {
|
|
const e = t.elements;
|
|
return this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), this
|
|
}
|
|
extractBasis(t, e, n) {
|
|
return t.setFromMatrixColumn(this, 0), e.setFromMatrixColumn(this, 1), n.setFromMatrixColumn(this, 2), this
|
|
}
|
|
makeBasis(t, e, n) {
|
|
return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this
|
|
}
|
|
extractRotation(t) {
|
|
const e = this.elements,
|
|
n = t.elements,
|
|
i = 1 / nt.setFromMatrixColumn(t, 0).length(),
|
|
r = 1 / nt.setFromMatrixColumn(t, 1).length(),
|
|
o = 1 / nt.setFromMatrixColumn(t, 2).length();
|
|
return e[0] = n[0] * i, e[1] = n[1] * i, e[2] = n[2] * i, e[3] = 0, e[4] = n[4] * r, e[5] = n[5] * r, e[6] = n[6] * r, e[7] = 0, e[8] = n[8] * o, e[9] = n[9] * o, e[10] = n[10] * o, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this
|
|
}
|
|
makeRotationFromEuler(t) {
|
|
t && t.isEuler || console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");
|
|
const e = this.elements,
|
|
n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = Math.cos(n),
|
|
s = Math.sin(n),
|
|
a = Math.cos(i),
|
|
l = Math.sin(i),
|
|
c = Math.cos(r),
|
|
h = Math.sin(r);
|
|
if ("XYZ" === t.order) {
|
|
const t = o * c,
|
|
n = o * h,
|
|
i = s * c,
|
|
r = s * h;
|
|
e[0] = a * c, e[4] = -a * h, e[8] = l, e[1] = n + i * l, e[5] = t - r * l, e[9] = -s * a, e[2] = r - t * l, e[6] = i + n * l, e[10] = o * a
|
|
} else if ("YXZ" === t.order) {
|
|
const t = a * c,
|
|
n = a * h,
|
|
i = l * c,
|
|
r = l * h;
|
|
e[0] = t + r * s, e[4] = i * s - n, e[8] = o * l, e[1] = o * h, e[5] = o * c, e[9] = -s, e[2] = n * s - i, e[6] = r + t * s, e[10] = o * a
|
|
} else if ("ZXY" === t.order) {
|
|
const t = a * c,
|
|
n = a * h,
|
|
i = l * c,
|
|
r = l * h;
|
|
e[0] = t - r * s, e[4] = -o * h, e[8] = i + n * s, e[1] = n + i * s, e[5] = o * c, e[9] = r - t * s, e[2] = -o * l, e[6] = s, e[10] = o * a
|
|
} else if ("ZYX" === t.order) {
|
|
const t = o * c,
|
|
n = o * h,
|
|
i = s * c,
|
|
r = s * h;
|
|
e[0] = a * c, e[4] = i * l - n, e[8] = t * l + r, e[1] = a * h, e[5] = r * l + t, e[9] = n * l - i, e[2] = -l, e[6] = s * a, e[10] = o * a
|
|
} else if ("YZX" === t.order) {
|
|
const t = o * a,
|
|
n = o * l,
|
|
i = s * a,
|
|
r = s * l;
|
|
e[0] = a * c, e[4] = r - t * h, e[8] = i * h + n, e[1] = h, e[5] = o * c, e[9] = -s * c, e[2] = -l * c, e[6] = n * h + i, e[10] = t - r * h
|
|
} else if ("XZY" === t.order) {
|
|
const t = o * a,
|
|
n = o * l,
|
|
i = s * a,
|
|
r = s * l;
|
|
e[0] = a * c, e[4] = -h, e[8] = l * c, e[1] = t * h + r, e[5] = o * c, e[9] = n * h - i, e[2] = i * h - n, e[6] = s * c, e[10] = r * h + t
|
|
}
|
|
return e[3] = 0, e[7] = 0, e[11] = 0, e[12] = 0, e[13] = 0, e[14] = 0, e[15] = 1, this
|
|
}
|
|
makeRotationFromQuaternion(t) {
|
|
return this.compose(rt, t, ot)
|
|
}
|
|
lookAt(t, e, n) {
|
|
const i = this.elements;
|
|
return lt.subVectors(t, e), 0 === lt.lengthSq() && (lt.z = 1), lt.normalize(), st.crossVectors(n, lt), 0 === st.lengthSq() && (1 === Math.abs(n.z) ? lt.x += 1e-4 : lt.z += 1e-4, lt.normalize(), st.crossVectors(n, lt)), st.normalize(), at.crossVectors(lt, st), i[0] = st.x, i[4] = at.x, i[8] = lt.x, i[1] = st.y, i[5] = at.y, i[9] = lt.y, i[2] = st.z, i[6] = at.z, i[10] = lt.z, this
|
|
}
|
|
multiply(t, e) {
|
|
return void 0 !== e ? (console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."), this.multiplyMatrices(t, e)) : this.multiplyMatrices(this, t)
|
|
}
|
|
premultiply(t) {
|
|
return this.multiplyMatrices(t, this)
|
|
}
|
|
multiplyMatrices(t, e) {
|
|
const n = t.elements,
|
|
i = e.elements,
|
|
r = this.elements,
|
|
o = n[0],
|
|
s = n[4],
|
|
a = n[8],
|
|
l = n[12],
|
|
c = n[1],
|
|
h = n[5],
|
|
u = n[9],
|
|
d = n[13],
|
|
p = n[2],
|
|
f = n[6],
|
|
m = n[10],
|
|
g = n[14],
|
|
v = n[3],
|
|
y = n[7],
|
|
A = n[11],
|
|
x = n[15],
|
|
_ = i[0],
|
|
b = i[4],
|
|
w = i[8],
|
|
M = i[12],
|
|
E = i[1],
|
|
S = i[5],
|
|
T = i[9],
|
|
L = i[13],
|
|
R = i[2],
|
|
C = i[6],
|
|
P = i[10],
|
|
D = i[14],
|
|
I = i[3],
|
|
O = i[7],
|
|
N = i[11],
|
|
B = i[15];
|
|
return r[0] = o * _ + s * E + a * R + l * I, r[4] = o * b + s * S + a * C + l * O, r[8] = o * w + s * T + a * P + l * N, r[12] = o * M + s * L + a * D + l * B, r[1] = c * _ + h * E + u * R + d * I, r[5] = c * b + h * S + u * C + d * O, r[9] = c * w + h * T + u * P + d * N, r[13] = c * M + h * L + u * D + d * B, r[2] = p * _ + f * E + m * R + g * I, r[6] = p * b + f * S + m * C + g * O, r[10] = p * w + f * T + m * P + g * N, r[14] = p * M + f * L + m * D + g * B, r[3] = v * _ + y * E + A * R + x * I, r[7] = v * b + y * S + A * C + x * O, r[11] = v * w + y * T + A * P + x * N, r[15] = v * M + y * L + A * D + x * B, this
|
|
}
|
|
multiplyScalar(t) {
|
|
const e = this.elements;
|
|
return e[0] *= t, e[4] *= t, e[8] *= t, e[12] *= t, e[1] *= t, e[5] *= t, e[9] *= t, e[13] *= t, e[2] *= t, e[6] *= t, e[10] *= t, e[14] *= t, e[3] *= t, e[7] *= t, e[11] *= t, e[15] *= t, this
|
|
}
|
|
determinant() {
|
|
const t = this.elements,
|
|
e = t[0],
|
|
n = t[4],
|
|
i = t[8],
|
|
r = t[12],
|
|
o = t[1],
|
|
s = t[5],
|
|
a = t[9],
|
|
l = t[13],
|
|
c = t[2],
|
|
h = t[6],
|
|
u = t[10],
|
|
d = t[14];
|
|
return t[3] * (+r * a * h - i * l * h - r * s * u + n * l * u + i * s * d - n * a * d) + t[7] * (+e * a * d - e * l * u + r * o * u - i * o * d + i * l * c - r * a * c) + t[11] * (+e * l * h - e * s * d - r * o * h + n * o * d + r * s * c - n * l * c) + t[15] * (-i * s * c - e * a * h + e * s * u + i * o * h - n * o * u + n * a * c)
|
|
}
|
|
transpose() {
|
|
const t = this.elements;
|
|
let e;
|
|
return e = t[1], t[1] = t[4], t[4] = e, e = t[2], t[2] = t[8], t[8] = e, e = t[6], t[6] = t[9], t[9] = e, e = t[3], t[3] = t[12], t[12] = e, e = t[7], t[7] = t[13], t[13] = e, e = t[11], t[11] = t[14], t[14] = e, this
|
|
}
|
|
setPosition(t, e, n) {
|
|
const i = this.elements;
|
|
return t.isVector3 ? (i[12] = t.x, i[13] = t.y, i[14] = t.z) : (i[12] = t, i[13] = e, i[14] = n), this
|
|
}
|
|
invert() {
|
|
const t = this.elements,
|
|
e = t[0],
|
|
n = t[1],
|
|
i = t[2],
|
|
r = t[3],
|
|
o = t[4],
|
|
s = t[5],
|
|
a = t[6],
|
|
l = t[7],
|
|
c = t[8],
|
|
h = t[9],
|
|
u = t[10],
|
|
d = t[11],
|
|
p = t[12],
|
|
f = t[13],
|
|
m = t[14],
|
|
g = t[15],
|
|
v = h * m * l - f * u * l + f * a * d - s * m * d - h * a * g + s * u * g,
|
|
y = p * u * l - c * m * l - p * a * d + o * m * d + c * a * g - o * u * g,
|
|
A = c * f * l - p * h * l + p * s * d - o * f * d - c * s * g + o * h * g,
|
|
x = p * h * a - c * f * a - p * s * u + o * f * u + c * s * m - o * h * m,
|
|
_ = e * v + n * y + i * A + r * x;
|
|
if (0 === _) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
const b = 1 / _;
|
|
return t[0] = v * b, t[1] = (f * u * r - h * m * r - f * i * d + n * m * d + h * i * g - n * u * g) * b, t[2] = (s * m * r - f * a * r + f * i * l - n * m * l - s * i * g + n * a * g) * b, t[3] = (h * a * r - s * u * r - h * i * l + n * u * l + s * i * d - n * a * d) * b, t[4] = y * b, t[5] = (c * m * r - p * u * r + p * i * d - e * m * d - c * i * g + e * u * g) * b, t[6] = (p * a * r - o * m * r - p * i * l + e * m * l + o * i * g - e * a * g) * b, t[7] = (o * u * r - c * a * r + c * i * l - e * u * l - o * i * d + e * a * d) * b, t[8] = A * b, t[9] = (p * h * r - c * f * r - p * n * d + e * f * d + c * n * g - e * h * g) * b, t[10] = (o * f * r - p * s * r + p * n * l - e * f * l - o * n * g + e * s * g) * b, t[11] = (c * s * r - o * h * r - c * n * l + e * h * l + o * n * d - e * s * d) * b, t[12] = x * b, t[13] = (c * f * i - p * h * i + p * n * u - e * f * u - c * n * m + e * h * m) * b, t[14] = (p * s * i - o * f * i - p * n * a + e * f * a + o * n * m - e * s * m) * b, t[15] = (o * h * i - c * s * i + c * n * a - e * h * a - o * n * u + e * s * u) * b, this
|
|
}
|
|
scale(t) {
|
|
const e = this.elements,
|
|
n = t.x,
|
|
i = t.y,
|
|
r = t.z;
|
|
return e[0] *= n, e[4] *= i, e[8] *= r, e[1] *= n, e[5] *= i, e[9] *= r, e[2] *= n, e[6] *= i, e[10] *= r, e[3] *= n, e[7] *= i, e[11] *= r, this
|
|
}
|
|
getMaxScaleOnAxis() {
|
|
const t = this.elements,
|
|
e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2],
|
|
n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6],
|
|
i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10];
|
|
return Math.sqrt(Math.max(e, n, i))
|
|
}
|
|
makeTranslation(t, e, n) {
|
|
return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this
|
|
}
|
|
makeRotationX(t) {
|
|
const e = Math.cos(t),
|
|
n = Math.sin(t);
|
|
return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this
|
|
}
|
|
makeRotationY(t) {
|
|
const e = Math.cos(t),
|
|
n = Math.sin(t);
|
|
return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this
|
|
}
|
|
makeRotationZ(t) {
|
|
const e = Math.cos(t),
|
|
n = Math.sin(t);
|
|
return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this
|
|
}
|
|
makeRotationAxis(t, e) {
|
|
const n = Math.cos(e),
|
|
i = Math.sin(e),
|
|
r = 1 - n,
|
|
o = t.x,
|
|
s = t.y,
|
|
a = t.z,
|
|
l = r * o,
|
|
c = r * s;
|
|
return this.set(l * o + n, l * s - i * a, l * a + i * s, 0, l * s + i * a, c * s + n, c * a - i * o, 0, l * a - i * s, c * a + i * o, r * a * a + n, 0, 0, 0, 0, 1), this
|
|
}
|
|
makeScale(t, e, n) {
|
|
return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this
|
|
}
|
|
makeShear(t, e, n) {
|
|
return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this
|
|
}
|
|
compose(t, e, n) {
|
|
const i = this.elements,
|
|
r = e._x,
|
|
o = e._y,
|
|
s = e._z,
|
|
a = e._w,
|
|
l = r + r,
|
|
c = o + o,
|
|
h = s + s,
|
|
u = r * l,
|
|
d = r * c,
|
|
p = r * h,
|
|
f = o * c,
|
|
m = o * h,
|
|
g = s * h,
|
|
v = a * l,
|
|
y = a * c,
|
|
A = a * h,
|
|
x = n.x,
|
|
_ = n.y,
|
|
b = n.z;
|
|
return i[0] = (1 - (f + g)) * x, i[1] = (d + A) * x, i[2] = (p - y) * x, i[3] = 0, i[4] = (d - A) * _, i[5] = (1 - (u + g)) * _, i[6] = (m + v) * _, i[7] = 0, i[8] = (p + y) * b, i[9] = (m - v) * b, i[10] = (1 - (u + f)) * b, i[11] = 0, i[12] = t.x, i[13] = t.y, i[14] = t.z, i[15] = 1, this
|
|
}
|
|
decompose(t, e, n) {
|
|
const i = this.elements;
|
|
let r = nt.set(i[0], i[1], i[2]).length();
|
|
const o = nt.set(i[4], i[5], i[6]).length(),
|
|
s = nt.set(i[8], i[9], i[10]).length();
|
|
this.determinant() < 0 && (r = -r), t.x = i[12], t.y = i[13], t.z = i[14], it.copy(this);
|
|
const a = 1 / r,
|
|
l = 1 / o,
|
|
c = 1 / s;
|
|
return it.elements[0] *= a, it.elements[1] *= a, it.elements[2] *= a, it.elements[4] *= l, it.elements[5] *= l, it.elements[6] *= l, it.elements[8] *= c, it.elements[9] *= c, it.elements[10] *= c, e.setFromRotationMatrix(it), n.x = r, n.y = o, n.z = s, this
|
|
}
|
|
makePerspective(t, e, n, i, r, o) {
|
|
void 0 === o && console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");
|
|
const s = this.elements,
|
|
a = 2 * r / (e - t),
|
|
l = 2 * r / (n - i),
|
|
c = (e + t) / (e - t),
|
|
h = (n + i) / (n - i),
|
|
u = -(o + r) / (o - r),
|
|
d = -2 * o * r / (o - r);
|
|
return s[0] = a, s[4] = 0, s[8] = c, s[12] = 0, s[1] = 0, s[5] = l, s[9] = h, s[13] = 0, s[2] = 0, s[6] = 0, s[10] = u, s[14] = d, s[3] = 0, s[7] = 0, s[11] = -1, s[15] = 0, this
|
|
}
|
|
makeOrthographic(t, e, n, i, r, o) {
|
|
const s = this.elements,
|
|
a = 1 / (e - t),
|
|
l = 1 / (n - i),
|
|
c = 1 / (o - r),
|
|
h = (e + t) * a,
|
|
u = (n + i) * l,
|
|
d = (o + r) * c;
|
|
return s[0] = 2 * a, s[4] = 0, s[8] = 0, s[12] = -h, s[1] = 0, s[5] = 2 * l, s[9] = 0, s[13] = -u, s[2] = 0, s[6] = 0, s[10] = -2 * c, s[14] = -d, s[3] = 0, s[7] = 0, s[11] = 0, s[15] = 1, this
|
|
}
|
|
equals(t) {
|
|
const e = this.elements,
|
|
n = t.elements;
|
|
for (let t = 0; t < 16; t++)
|
|
if (e[t] !== n[t]) return !1;
|
|
return !0
|
|
}
|
|
fromArray(t, e = 0) {
|
|
for (let n = 0; n < 16; n++) this.elements[n] = t[n + e];
|
|
return this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
const n = this.elements;
|
|
return t[e] = n[0], t[e + 1] = n[1], t[e + 2] = n[2], t[e + 3] = n[3], t[e + 4] = n[4], t[e + 5] = n[5], t[e + 6] = n[6], t[e + 7] = n[7], t[e + 8] = n[8], t[e + 9] = n[9], t[e + 10] = n[10], t[e + 11] = n[11], t[e + 12] = n[12], t[e + 13] = n[13], t[e + 14] = n[14], t[e + 15] = n[15], t
|
|
}
|
|
}
|
|
const nt = new T,
|
|
it = new et,
|
|
rt = new T(0, 0, 0),
|
|
ot = new T(1, 1, 1),
|
|
st = new T,
|
|
at = new T,
|
|
lt = new T;
|
|
class ct {
|
|
constructor(t = 0, e = 0, n = 0, i = ct.DefaultOrder) {
|
|
Object.defineProperty(this, "isEuler", {
|
|
value: !0
|
|
}), this._x = t, this._y = e, this._z = n, this._order = i
|
|
}
|
|
get x() {
|
|
return this._x
|
|
}
|
|
set x(t) {
|
|
this._x = t, this._onChangeCallback()
|
|
}
|
|
get y() {
|
|
return this._y
|
|
}
|
|
set y(t) {
|
|
this._y = t, this._onChangeCallback()
|
|
}
|
|
get z() {
|
|
return this._z
|
|
}
|
|
set z(t) {
|
|
this._z = t, this._onChangeCallback()
|
|
}
|
|
get order() {
|
|
return this._order
|
|
}
|
|
set order(t) {
|
|
this._order = t, this._onChangeCallback()
|
|
}
|
|
set(t, e, n, i) {
|
|
return this._x = t, this._y = e, this._z = n, this._order = i || this._order, this._onChangeCallback(), this
|
|
}
|
|
clone() {
|
|
return new this.constructor(this._x, this._y, this._z, this._order)
|
|
}
|
|
copy(t) {
|
|
return this._x = t._x, this._y = t._y, this._z = t._z, this._order = t._order, this._onChangeCallback(), this
|
|
}
|
|
setFromRotationMatrix(t, e, n) {
|
|
const i = g.clamp,
|
|
r = t.elements,
|
|
o = r[0],
|
|
s = r[4],
|
|
a = r[8],
|
|
l = r[1],
|
|
c = r[5],
|
|
h = r[9],
|
|
u = r[2],
|
|
d = r[6],
|
|
p = r[10];
|
|
switch (e = e || this._order) {
|
|
case "XYZ":
|
|
this._y = Math.asin(i(a, -1, 1)), Math.abs(a) < .9999999 ? (this._x = Math.atan2(-h, p), this._z = Math.atan2(-s, o)) : (this._x = Math.atan2(d, c), this._z = 0);
|
|
break;
|
|
case "YXZ":
|
|
this._x = Math.asin(-i(h, -1, 1)), Math.abs(h) < .9999999 ? (this._y = Math.atan2(a, p), this._z = Math.atan2(l, c)) : (this._y = Math.atan2(-u, o), this._z = 0);
|
|
break;
|
|
case "ZXY":
|
|
this._x = Math.asin(i(d, -1, 1)), Math.abs(d) < .9999999 ? (this._y = Math.atan2(-u, p), this._z = Math.atan2(-s, c)) : (this._y = 0, this._z = Math.atan2(l, o));
|
|
break;
|
|
case "ZYX":
|
|
this._y = Math.asin(-i(u, -1, 1)), Math.abs(u) < .9999999 ? (this._x = Math.atan2(d, p), this._z = Math.atan2(l, o)) : (this._x = 0, this._z = Math.atan2(-s, c));
|
|
break;
|
|
case "YZX":
|
|
this._z = Math.asin(i(l, -1, 1)), Math.abs(l) < .9999999 ? (this._x = Math.atan2(-h, c), this._y = Math.atan2(-u, o)) : (this._x = 0, this._y = Math.atan2(a, p));
|
|
break;
|
|
case "XZY":
|
|
this._z = Math.asin(-i(s, -1, 1)), Math.abs(s) < .9999999 ? (this._x = Math.atan2(d, c), this._y = Math.atan2(a, o)) : (this._x = Math.atan2(-h, p), this._y = 0);
|
|
break;
|
|
default:
|
|
console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: " + e)
|
|
}
|
|
return this._order = e, !1 !== n && this._onChangeCallback(), this
|
|
}
|
|
setFromQuaternion(t, e, n) {
|
|
return ht.makeRotationFromQuaternion(t), this.setFromRotationMatrix(ht, e, n)
|
|
}
|
|
setFromVector3(t, e) {
|
|
return this.set(t.x, t.y, t.z, e || this._order)
|
|
}
|
|
reorder(t) {
|
|
return ut.setFromEuler(this), this.setFromQuaternion(ut, t)
|
|
}
|
|
equals(t) {
|
|
return t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order
|
|
}
|
|
fromArray(t) {
|
|
return this._x = t[0], this._y = t[1], this._z = t[2], void 0 !== t[3] && (this._order = t[3]), this._onChangeCallback(), this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this._x, t[e + 1] = this._y, t[e + 2] = this._z, t[e + 3] = this._order, t
|
|
}
|
|
toVector3(t) {
|
|
return t ? t.set(this._x, this._y, this._z) : new T(this._x, this._y, this._z)
|
|
}
|
|
_onChange(t) {
|
|
return this._onChangeCallback = t, this
|
|
}
|
|
_onChangeCallback() {}
|
|
}
|
|
ct.DefaultOrder = "XYZ", ct.RotationOrders = ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"];
|
|
const ht = new et,
|
|
ut = new S;
|
|
class dt {
|
|
constructor() {
|
|
this.mask = 1
|
|
}
|
|
set(t) {
|
|
this.mask = 1 << t | 0
|
|
}
|
|
enable(t) {
|
|
this.mask |= 1 << t | 0
|
|
}
|
|
enableAll() {
|
|
this.mask = -1
|
|
}
|
|
toggle(t) {
|
|
this.mask ^= 1 << t | 0
|
|
}
|
|
disable(t) {
|
|
this.mask &= ~(1 << t | 0)
|
|
}
|
|
disableAll() {
|
|
this.mask = 0
|
|
}
|
|
test(t) {
|
|
return 0 != (this.mask & t.mask)
|
|
}
|
|
}
|
|
let pt = 0;
|
|
const ft = new T,
|
|
mt = new S,
|
|
gt = new et,
|
|
vt = new T,
|
|
yt = new T,
|
|
At = new T,
|
|
xt = new S,
|
|
_t = new T(1, 0, 0),
|
|
bt = new T(0, 1, 0),
|
|
wt = new T(0, 0, 1),
|
|
Mt = {
|
|
type: "added"
|
|
},
|
|
Et = {
|
|
type: "removed"
|
|
};
|
|
|
|
function St() {
|
|
Object.defineProperty(this, "id", {
|
|
value: pt++
|
|
}), this.uuid = g.generateUUID(), this.name = "", this.type = "Object3D", this.parent = null, this.children = [], this.up = St.DefaultUp.clone();
|
|
const t = new T,
|
|
e = new ct,
|
|
n = new S,
|
|
i = new T(1, 1, 1);
|
|
e._onChange((function() {
|
|
n.setFromEuler(e, !1)
|
|
})), n._onChange((function() {
|
|
e.setFromQuaternion(n, void 0, !1)
|
|
})), Object.defineProperties(this, {
|
|
position: {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
value: t
|
|
},
|
|
rotation: {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
value: e
|
|
},
|
|
quaternion: {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
value: n
|
|
},
|
|
scale: {
|
|
configurable: !0,
|
|
enumerable: !0,
|
|
value: i
|
|
},
|
|
modelViewMatrix: {
|
|
value: new et
|
|
},
|
|
normalMatrix: {
|
|
value: new y
|
|
}
|
|
}), this.matrix = new et, this.matrixWorld = new et, this.matrixAutoUpdate = St.DefaultMatrixAutoUpdate, this.matrixWorldNeedsUpdate = !1, this.layers = new dt, this.visible = !0, this.castShadow = !1, this.receiveShadow = !1, this.frustumCulled = !0, this.renderOrder = 0, this.animations = [], this.userData = {}
|
|
}
|
|
St.DefaultUp = new T(0, 1, 0), St.DefaultMatrixAutoUpdate = !0, St.prototype = Object.assign(Object.create(p.prototype), {
|
|
constructor: St,
|
|
isObject3D: !0,
|
|
onBeforeRender: function() {},
|
|
onAfterRender: function() {},
|
|
applyMatrix4: function(t) {
|
|
this.matrixAutoUpdate && this.updateMatrix(), this.matrix.premultiply(t), this.matrix.decompose(this.position, this.quaternion, this.scale)
|
|
},
|
|
applyQuaternion: function(t) {
|
|
return this.quaternion.premultiply(t), this
|
|
},
|
|
setRotationFromAxisAngle: function(t, e) {
|
|
this.quaternion.setFromAxisAngle(t, e)
|
|
},
|
|
setRotationFromEuler: function(t) {
|
|
this.quaternion.setFromEuler(t, !0)
|
|
},
|
|
setRotationFromMatrix: function(t) {
|
|
this.quaternion.setFromRotationMatrix(t)
|
|
},
|
|
setRotationFromQuaternion: function(t) {
|
|
this.quaternion.copy(t)
|
|
},
|
|
rotateOnAxis: function(t, e) {
|
|
return mt.setFromAxisAngle(t, e), this.quaternion.multiply(mt), this
|
|
},
|
|
rotateOnWorldAxis: function(t, e) {
|
|
return mt.setFromAxisAngle(t, e), this.quaternion.premultiply(mt), this
|
|
},
|
|
rotateX: function(t) {
|
|
return this.rotateOnAxis(_t, t)
|
|
},
|
|
rotateY: function(t) {
|
|
return this.rotateOnAxis(bt, t)
|
|
},
|
|
rotateZ: function(t) {
|
|
return this.rotateOnAxis(wt, t)
|
|
},
|
|
translateOnAxis: function(t, e) {
|
|
return ft.copy(t).applyQuaternion(this.quaternion), this.position.add(ft.multiplyScalar(e)), this
|
|
},
|
|
translateX: function(t) {
|
|
return this.translateOnAxis(_t, t)
|
|
},
|
|
translateY: function(t) {
|
|
return this.translateOnAxis(bt, t)
|
|
},
|
|
translateZ: function(t) {
|
|
return this.translateOnAxis(wt, t)
|
|
},
|
|
localToWorld: function(t) {
|
|
return t.applyMatrix4(this.matrixWorld)
|
|
},
|
|
worldToLocal: function(t) {
|
|
return t.applyMatrix4(gt.copy(this.matrixWorld).invert())
|
|
},
|
|
lookAt: function(t, e, n) {
|
|
t.isVector3 ? vt.copy(t) : vt.set(t, e, n);
|
|
const i = this.parent;
|
|
this.updateWorldMatrix(!0, !1), yt.setFromMatrixPosition(this.matrixWorld), this.isCamera || this.isLight ? gt.lookAt(yt, vt, this.up) : gt.lookAt(vt, yt, this.up), this.quaternion.setFromRotationMatrix(gt), i && (gt.extractRotation(i.matrixWorld), mt.setFromRotationMatrix(gt), this.quaternion.premultiply(mt.invert()))
|
|
},
|
|
add: function(t) {
|
|
if (arguments.length > 1) {
|
|
for (let t = 0; t < arguments.length; t++) this.add(arguments[t]);
|
|
return this
|
|
}
|
|
return t === this ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), this) : (t && t.isObject3D ? (null !== t.parent && t.parent.remove(t), t.parent = this, this.children.push(t), t.dispatchEvent(Mt)) : console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.", t), this)
|
|
},
|
|
remove: function(t) {
|
|
if (arguments.length > 1) {
|
|
for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]);
|
|
return this
|
|
}
|
|
const e = this.children.indexOf(t);
|
|
return -1 !== e && (t.parent = null, this.children.splice(e, 1), t.dispatchEvent(Et)), this
|
|
},
|
|
clear: function() {
|
|
for (let t = 0; t < this.children.length; t++) {
|
|
const e = this.children[t];
|
|
e.parent = null, e.dispatchEvent(Et)
|
|
}
|
|
return this.children.length = 0, this
|
|
},
|
|
attach: function(t) {
|
|
return this.updateWorldMatrix(!0, !1), gt.copy(this.matrixWorld).invert(), null !== t.parent && (t.parent.updateWorldMatrix(!0, !1), gt.multiply(t.parent.matrixWorld)), t.applyMatrix4(gt), t.updateWorldMatrix(!1, !1), this.add(t), this
|
|
},
|
|
getObjectById: function(t) {
|
|
return this.getObjectByProperty("id", t)
|
|
},
|
|
getObjectByName: function(t) {
|
|
return this.getObjectByProperty("name", t)
|
|
},
|
|
getObjectByProperty: function(t, e) {
|
|
if (this[t] === e) return this;
|
|
for (let n = 0, i = this.children.length; n < i; n++) {
|
|
const i = this.children[n].getObjectByProperty(t, e);
|
|
if (void 0 !== i) return i
|
|
}
|
|
},
|
|
getWorldPosition: function(t) {
|
|
return void 0 === t && (console.warn("THREE.Object3D: .getWorldPosition() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld)
|
|
},
|
|
getWorldQuaternion: function(t) {
|
|
return void 0 === t && (console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"), t = new S), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, t, At), t
|
|
},
|
|
getWorldScale: function(t) {
|
|
return void 0 === t && (console.warn("THREE.Object3D: .getWorldScale() target is now required"), t = new T), this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(yt, xt, t), t
|
|
},
|
|
getWorldDirection: function(t) {
|
|
void 0 === t && (console.warn("THREE.Object3D: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1);
|
|
const e = this.matrixWorld.elements;
|
|
return t.set(e[8], e[9], e[10]).normalize()
|
|
},
|
|
raycast: function() {},
|
|
traverse: function(t) {
|
|
t(this);
|
|
const e = this.children;
|
|
for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t)
|
|
},
|
|
traverseVisible: function(t) {
|
|
if (!1 === this.visible) return;
|
|
t(this);
|
|
const e = this.children;
|
|
for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t)
|
|
},
|
|
traverseAncestors: function(t) {
|
|
const e = this.parent;
|
|
null !== e && (t(e), e.traverseAncestors(t))
|
|
},
|
|
updateMatrix: function() {
|
|
this.matrix.compose(this.position, this.quaternion, this.scale), this.matrixWorldNeedsUpdate = !0
|
|
},
|
|
updateMatrixWorld: function(t) {
|
|
this.matrixAutoUpdate && this.updateMatrix(), (this.matrixWorldNeedsUpdate || t) && (null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), this.matrixWorldNeedsUpdate = !1, t = !0);
|
|
const e = this.children;
|
|
for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t)
|
|
},
|
|
updateWorldMatrix: function(t, e) {
|
|
const n = this.parent;
|
|
if (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), this.matrixAutoUpdate && this.updateMatrix(), null === this.parent ? this.matrixWorld.copy(this.matrix) : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), !0 === e) {
|
|
const t = this.children;
|
|
for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0)
|
|
}
|
|
},
|
|
toJSON: function(t) {
|
|
const e = void 0 === t || "string" == typeof t,
|
|
n = {};
|
|
e && (t = {
|
|
geometries: {},
|
|
materials: {},
|
|
textures: {},
|
|
images: {},
|
|
shapes: {},
|
|
skeletons: {},
|
|
animations: {}
|
|
}, n.metadata = {
|
|
version: 4.5,
|
|
type: "Object",
|
|
generator: "Object3D.toJSON"
|
|
});
|
|
const i = {};
|
|
|
|
function r(e, n) {
|
|
return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid
|
|
}
|
|
if (i.uuid = this.uuid, i.type = this.type, "" !== this.name && (i.name = this.name), !0 === this.castShadow && (i.castShadow = !0), !0 === this.receiveShadow && (i.receiveShadow = !0), !1 === this.visible && (i.visible = !1), !1 === this.frustumCulled && (i.frustumCulled = !1), 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), "{}" !== JSON.stringify(this.userData) && (i.userData = this.userData), i.layers = this.layers.mask, i.matrix = this.matrix.toArray(), !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), this.isInstancedMesh && (i.type = "InstancedMesh", i.count = this.count, i.instanceMatrix = this.instanceMatrix.toJSON()), this.isMesh || this.isLine || this.isPoints) {
|
|
i.geometry = r(t.geometries, this.geometry);
|
|
const e = this.geometry.parameters;
|
|
if (void 0 !== e && void 0 !== e.shapes) {
|
|
const n = e.shapes;
|
|
if (Array.isArray(n))
|
|
for (let e = 0, i = n.length; e < i; e++) {
|
|
const i = n[e];
|
|
r(t.shapes, i)
|
|
} else r(t.shapes, n)
|
|
}
|
|
}
|
|
if (this.isSkinnedMesh && (i.bindMode = this.bindMode, i.bindMatrix = this.bindMatrix.toArray(), void 0 !== this.skeleton && (r(t.skeletons, this.skeleton), i.skeleton = this.skeleton.uuid)), void 0 !== this.material)
|
|
if (Array.isArray(this.material)) {
|
|
const e = [];
|
|
for (let n = 0, i = this.material.length; n < i; n++) e.push(r(t.materials, this.material[n]));
|
|
i.material = e
|
|
} else i.material = r(t.materials, this.material);
|
|
if (this.children.length > 0) {
|
|
i.children = [];
|
|
for (let e = 0; e < this.children.length; e++) i.children.push(this.children[e].toJSON(t).object)
|
|
}
|
|
if (this.animations.length > 0) {
|
|
i.animations = [];
|
|
for (let e = 0; e < this.animations.length; e++) {
|
|
const n = this.animations[e];
|
|
i.animations.push(r(t.animations, n))
|
|
}
|
|
}
|
|
if (e) {
|
|
const e = o(t.geometries),
|
|
i = o(t.materials),
|
|
r = o(t.textures),
|
|
s = o(t.images),
|
|
a = o(t.shapes),
|
|
l = o(t.skeletons),
|
|
c = o(t.animations);
|
|
e.length > 0 && (n.geometries = e), i.length > 0 && (n.materials = i), r.length > 0 && (n.textures = r), s.length > 0 && (n.images = s), a.length > 0 && (n.shapes = a), l.length > 0 && (n.skeletons = l), c.length > 0 && (n.animations = c)
|
|
}
|
|
return n.object = i, n;
|
|
|
|
function o(t) {
|
|
const e = [];
|
|
for (const n in t) {
|
|
const i = t[n];
|
|
delete i.metadata, e.push(i)
|
|
}
|
|
return e
|
|
}
|
|
},
|
|
clone: function(t) {
|
|
return (new this.constructor).copy(this, t)
|
|
},
|
|
copy: function(t, e = !0) {
|
|
if (this.name = t.name, this.up.copy(t.up), this.position.copy(t.position), this.rotation.order = t.rotation.order, this.quaternion.copy(t.quaternion), this.scale.copy(t.scale), this.matrix.copy(t.matrix), this.matrixWorld.copy(t.matrixWorld), this.matrixAutoUpdate = t.matrixAutoUpdate, this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate, this.layers.mask = t.layers.mask, this.visible = t.visible, this.castShadow = t.castShadow, this.receiveShadow = t.receiveShadow, this.frustumCulled = t.frustumCulled, this.renderOrder = t.renderOrder, this.userData = JSON.parse(JSON.stringify(t.userData)), !0 === e)
|
|
for (let e = 0; e < t.children.length; e++) {
|
|
const n = t.children[e];
|
|
this.add(n.clone())
|
|
}
|
|
return this
|
|
}
|
|
});
|
|
const Tt = new T,
|
|
Lt = new T,
|
|
Rt = new y;
|
|
class Ct {
|
|
constructor(t, e) {
|
|
Object.defineProperty(this, "isPlane", {
|
|
value: !0
|
|
}), this.normal = void 0 !== t ? t : new T(1, 0, 0), this.constant = void 0 !== e ? e : 0
|
|
}
|
|
set(t, e) {
|
|
return this.normal.copy(t), this.constant = e, this
|
|
}
|
|
setComponents(t, e, n, i) {
|
|
return this.normal.set(t, e, n), this.constant = i, this
|
|
}
|
|
setFromNormalAndCoplanarPoint(t, e) {
|
|
return this.normal.copy(t), this.constant = -e.dot(this.normal), this
|
|
}
|
|
setFromCoplanarPoints(t, e, n) {
|
|
const i = Tt.subVectors(n, e).cross(Lt.subVectors(t, e)).normalize();
|
|
return this.setFromNormalAndCoplanarPoint(i, t), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.normal.copy(t.normal), this.constant = t.constant, this
|
|
}
|
|
normalize() {
|
|
const t = 1 / this.normal.length();
|
|
return this.normal.multiplyScalar(t), this.constant *= t, this
|
|
}
|
|
negate() {
|
|
return this.constant *= -1, this.normal.negate(), this
|
|
}
|
|
distanceToPoint(t) {
|
|
return this.normal.dot(t) + this.constant
|
|
}
|
|
distanceToSphere(t) {
|
|
return this.distanceToPoint(t.center) - t.radius
|
|
}
|
|
projectPoint(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Plane: .projectPoint() target is now required"), e = new T), e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)
|
|
}
|
|
intersectLine(t, e) {
|
|
void 0 === e && (console.warn("THREE.Plane: .intersectLine() target is now required"), e = new T);
|
|
const n = t.delta(Tt),
|
|
i = this.normal.dot(n);
|
|
if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : void 0;
|
|
const r = -(t.start.dot(this.normal) + this.constant) / i;
|
|
return r < 0 || r > 1 ? void 0 : e.copy(n).multiplyScalar(r).add(t.start)
|
|
}
|
|
intersectsLine(t) {
|
|
const e = this.distanceToPoint(t.start),
|
|
n = this.distanceToPoint(t.end);
|
|
return e < 0 && n > 0 || n < 0 && e > 0
|
|
}
|
|
intersectsBox(t) {
|
|
return t.intersectsPlane(this)
|
|
}
|
|
intersectsSphere(t) {
|
|
return t.intersectsPlane(this)
|
|
}
|
|
coplanarPoint(t) {
|
|
return void 0 === t && (console.warn("THREE.Plane: .coplanarPoint() target is now required"), t = new T), t.copy(this.normal).multiplyScalar(-this.constant)
|
|
}
|
|
applyMatrix4(t, e) {
|
|
const n = e || Rt.getNormalMatrix(t),
|
|
i = this.coplanarPoint(Tt).applyMatrix4(t),
|
|
r = this.normal.applyMatrix3(n).normalize();
|
|
return this.constant = -i.dot(r), this
|
|
}
|
|
translate(t) {
|
|
return this.constant -= t.dot(this.normal), this
|
|
}
|
|
equals(t) {
|
|
return t.normal.equals(this.normal) && t.constant === this.constant
|
|
}
|
|
}
|
|
const Pt = new T,
|
|
Dt = new T,
|
|
It = new T,
|
|
Ot = new T,
|
|
Nt = new T,
|
|
Bt = new T,
|
|
Ft = new T,
|
|
zt = new T,
|
|
Ut = new T,
|
|
Ht = new T;
|
|
class Gt {
|
|
constructor(t, e, n) {
|
|
this.a = void 0 !== t ? t : new T, this.b = void 0 !== e ? e : new T, this.c = void 0 !== n ? n : new T
|
|
}
|
|
static getNormal(t, e, n, i) {
|
|
void 0 === i && (console.warn("THREE.Triangle: .getNormal() target is now required"), i = new T), i.subVectors(n, e), Pt.subVectors(t, e), i.cross(Pt);
|
|
const r = i.lengthSq();
|
|
return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0)
|
|
}
|
|
static getBarycoord(t, e, n, i, r) {
|
|
Pt.subVectors(i, e), Dt.subVectors(n, e), It.subVectors(t, e);
|
|
const o = Pt.dot(Pt),
|
|
s = Pt.dot(Dt),
|
|
a = Pt.dot(It),
|
|
l = Dt.dot(Dt),
|
|
c = Dt.dot(It),
|
|
h = o * l - s * s;
|
|
if (void 0 === r && (console.warn("THREE.Triangle: .getBarycoord() target is now required"), r = new T), 0 === h) return r.set(-2, -1, -1);
|
|
const u = 1 / h,
|
|
d = (l * a - s * c) * u,
|
|
p = (o * c - s * a) * u;
|
|
return r.set(1 - d - p, p, d)
|
|
}
|
|
static containsPoint(t, e, n, i) {
|
|
return this.getBarycoord(t, e, n, i, Ot), Ot.x >= 0 && Ot.y >= 0 && Ot.x + Ot.y <= 1
|
|
}
|
|
static getUV(t, e, n, i, r, o, s, a) {
|
|
return this.getBarycoord(t, e, n, i, Ot), a.set(0, 0), a.addScaledVector(r, Ot.x), a.addScaledVector(o, Ot.y), a.addScaledVector(s, Ot.z), a
|
|
}
|
|
static isFrontFacing(t, e, n, i) {
|
|
return Pt.subVectors(n, e), Dt.subVectors(t, e), Pt.cross(Dt).dot(i) < 0
|
|
}
|
|
set(t, e, n) {
|
|
return this.a.copy(t), this.b.copy(e), this.c.copy(n), this
|
|
}
|
|
setFromPointsAndIndices(t, e, n, i) {
|
|
return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this
|
|
}
|
|
getArea() {
|
|
return Pt.subVectors(this.c, this.b), Dt.subVectors(this.a, this.b), .5 * Pt.cross(Dt).length()
|
|
}
|
|
getMidpoint(t) {
|
|
return void 0 === t && (console.warn("THREE.Triangle: .getMidpoint() target is now required"), t = new T), t.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3)
|
|
}
|
|
getNormal(t) {
|
|
return Gt.getNormal(this.a, this.b, this.c, t)
|
|
}
|
|
getPlane(t) {
|
|
return void 0 === t && (console.warn("THREE.Triangle: .getPlane() target is now required"), t = new Ct), t.setFromCoplanarPoints(this.a, this.b, this.c)
|
|
}
|
|
getBarycoord(t, e) {
|
|
return Gt.getBarycoord(t, this.a, this.b, this.c, e)
|
|
}
|
|
getUV(t, e, n, i, r) {
|
|
return Gt.getUV(t, this.a, this.b, this.c, e, n, i, r)
|
|
}
|
|
containsPoint(t) {
|
|
return Gt.containsPoint(t, this.a, this.b, this.c)
|
|
}
|
|
isFrontFacing(t) {
|
|
return Gt.isFrontFacing(this.a, this.b, this.c, t)
|
|
}
|
|
intersectsBox(t) {
|
|
return t.intersectsTriangle(this)
|
|
}
|
|
closestPointToPoint(t, e) {
|
|
void 0 === e && (console.warn("THREE.Triangle: .closestPointToPoint() target is now required"), e = new T);
|
|
const n = this.a,
|
|
i = this.b,
|
|
r = this.c;
|
|
let o, s;
|
|
Nt.subVectors(i, n), Bt.subVectors(r, n), zt.subVectors(t, n);
|
|
const a = Nt.dot(zt),
|
|
l = Bt.dot(zt);
|
|
if (a <= 0 && l <= 0) return e.copy(n);
|
|
Ut.subVectors(t, i);
|
|
const c = Nt.dot(Ut),
|
|
h = Bt.dot(Ut);
|
|
if (c >= 0 && h <= c) return e.copy(i);
|
|
const u = a * h - c * l;
|
|
if (u <= 0 && a >= 0 && c <= 0) return o = a / (a - c), e.copy(n).addScaledVector(Nt, o);
|
|
Ht.subVectors(t, r);
|
|
const d = Nt.dot(Ht),
|
|
p = Bt.dot(Ht);
|
|
if (p >= 0 && d <= p) return e.copy(r);
|
|
const f = d * l - a * p;
|
|
if (f <= 0 && l >= 0 && p <= 0) return s = l / (l - p), e.copy(n).addScaledVector(Bt, s);
|
|
const m = c * p - d * h;
|
|
if (m <= 0 && h - c >= 0 && d - p >= 0) return Ft.subVectors(r, i), s = (h - c) / (h - c + (d - p)), e.copy(i).addScaledVector(Ft, s);
|
|
const g = 1 / (m + f + u);
|
|
return o = f * g, s = u * g, e.copy(n).addScaledVector(Nt, o).addScaledVector(Bt, s)
|
|
}
|
|
equals(t) {
|
|
return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c)
|
|
}
|
|
}
|
|
const Vt = {
|
|
aliceblue: 15792383,
|
|
antiquewhite: 16444375,
|
|
aqua: 65535,
|
|
aquamarine: 8388564,
|
|
azure: 15794175,
|
|
beige: 16119260,
|
|
bisque: 16770244,
|
|
black: 0,
|
|
blanchedalmond: 16772045,
|
|
blue: 255,
|
|
blueviolet: 9055202,
|
|
brown: 10824234,
|
|
burlywood: 14596231,
|
|
cadetblue: 6266528,
|
|
chartreuse: 8388352,
|
|
chocolate: 13789470,
|
|
coral: 16744272,
|
|
cornflowerblue: 6591981,
|
|
cornsilk: 16775388,
|
|
crimson: 14423100,
|
|
cyan: 65535,
|
|
darkblue: 139,
|
|
darkcyan: 35723,
|
|
darkgoldenrod: 12092939,
|
|
darkgray: 11119017,
|
|
darkgreen: 25600,
|
|
darkgrey: 11119017,
|
|
darkkhaki: 12433259,
|
|
darkmagenta: 9109643,
|
|
darkolivegreen: 5597999,
|
|
darkorange: 16747520,
|
|
darkorchid: 10040012,
|
|
darkred: 9109504,
|
|
darksalmon: 15308410,
|
|
darkseagreen: 9419919,
|
|
darkslateblue: 4734347,
|
|
darkslategray: 3100495,
|
|
darkslategrey: 3100495,
|
|
darkturquoise: 52945,
|
|
darkviolet: 9699539,
|
|
deeppink: 16716947,
|
|
deepskyblue: 49151,
|
|
dimgray: 6908265,
|
|
dimgrey: 6908265,
|
|
dodgerblue: 2003199,
|
|
firebrick: 11674146,
|
|
floralwhite: 16775920,
|
|
forestgreen: 2263842,
|
|
fuchsia: 16711935,
|
|
gainsboro: 14474460,
|
|
ghostwhite: 16316671,
|
|
gold: 16766720,
|
|
goldenrod: 14329120,
|
|
gray: 8421504,
|
|
green: 32768,
|
|
greenyellow: 11403055,
|
|
grey: 8421504,
|
|
honeydew: 15794160,
|
|
hotpink: 16738740,
|
|
indianred: 13458524,
|
|
indigo: 4915330,
|
|
ivory: 16777200,
|
|
khaki: 15787660,
|
|
lavender: 15132410,
|
|
lavenderblush: 16773365,
|
|
lawngreen: 8190976,
|
|
lemonchiffon: 16775885,
|
|
lightblue: 11393254,
|
|
lightcoral: 15761536,
|
|
lightcyan: 14745599,
|
|
lightgoldenrodyellow: 16448210,
|
|
lightgray: 13882323,
|
|
lightgreen: 9498256,
|
|
lightgrey: 13882323,
|
|
lightpink: 16758465,
|
|
lightsalmon: 16752762,
|
|
lightseagreen: 2142890,
|
|
lightskyblue: 8900346,
|
|
lightslategray: 7833753,
|
|
lightslategrey: 7833753,
|
|
lightsteelblue: 11584734,
|
|
lightyellow: 16777184,
|
|
lime: 65280,
|
|
limegreen: 3329330,
|
|
linen: 16445670,
|
|
magenta: 16711935,
|
|
maroon: 8388608,
|
|
mediumaquamarine: 6737322,
|
|
mediumblue: 205,
|
|
mediumorchid: 12211667,
|
|
mediumpurple: 9662683,
|
|
mediumseagreen: 3978097,
|
|
mediumslateblue: 8087790,
|
|
mediumspringgreen: 64154,
|
|
mediumturquoise: 4772300,
|
|
mediumvioletred: 13047173,
|
|
midnightblue: 1644912,
|
|
mintcream: 16121850,
|
|
mistyrose: 16770273,
|
|
moccasin: 16770229,
|
|
navajowhite: 16768685,
|
|
navy: 128,
|
|
oldlace: 16643558,
|
|
olive: 8421376,
|
|
olivedrab: 7048739,
|
|
orange: 16753920,
|
|
orangered: 16729344,
|
|
orchid: 14315734,
|
|
palegoldenrod: 15657130,
|
|
palegreen: 10025880,
|
|
paleturquoise: 11529966,
|
|
palevioletred: 14381203,
|
|
papayawhip: 16773077,
|
|
peachpuff: 16767673,
|
|
peru: 13468991,
|
|
pink: 16761035,
|
|
plum: 14524637,
|
|
powderblue: 11591910,
|
|
purple: 8388736,
|
|
rebeccapurple: 6697881,
|
|
red: 16711680,
|
|
rosybrown: 12357519,
|
|
royalblue: 4286945,
|
|
saddlebrown: 9127187,
|
|
salmon: 16416882,
|
|
sandybrown: 16032864,
|
|
seagreen: 3050327,
|
|
seashell: 16774638,
|
|
sienna: 10506797,
|
|
silver: 12632256,
|
|
skyblue: 8900331,
|
|
slateblue: 6970061,
|
|
slategray: 7372944,
|
|
slategrey: 7372944,
|
|
snow: 16775930,
|
|
springgreen: 65407,
|
|
steelblue: 4620980,
|
|
tan: 13808780,
|
|
teal: 32896,
|
|
thistle: 14204888,
|
|
tomato: 16737095,
|
|
turquoise: 4251856,
|
|
violet: 15631086,
|
|
wheat: 16113331,
|
|
white: 16777215,
|
|
whitesmoke: 16119285,
|
|
yellow: 16776960,
|
|
yellowgreen: 10145074
|
|
},
|
|
kt = {
|
|
h: 0,
|
|
s: 0,
|
|
l: 0
|
|
},
|
|
Wt = {
|
|
h: 0,
|
|
s: 0,
|
|
l: 0
|
|
};
|
|
|
|
function jt(t, e, n) {
|
|
return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + 6 * (e - t) * n : n < .5 ? e : n < 2 / 3 ? t + 6 * (e - t) * (2 / 3 - n) : t
|
|
}
|
|
|
|
function Xt(t) {
|
|
return t < .04045 ? .0773993808 * t : Math.pow(.9478672986 * t + .0521327014, 2.4)
|
|
}
|
|
|
|
function qt(t) {
|
|
return t < .0031308 ? 12.92 * t : 1.055 * Math.pow(t, .41666) - .055
|
|
}
|
|
class Yt {
|
|
constructor(t, e, n) {
|
|
return Object.defineProperty(this, "isColor", {
|
|
value: !0
|
|
}), void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n)
|
|
}
|
|
set(t) {
|
|
return t && t.isColor ? this.copy(t) : "number" == typeof t ? this.setHex(t) : "string" == typeof t && this.setStyle(t), this
|
|
}
|
|
setScalar(t) {
|
|
return this.r = t, this.g = t, this.b = t, this
|
|
}
|
|
setHex(t) {
|
|
return t = Math.floor(t), this.r = (t >> 16 & 255) / 255, this.g = (t >> 8 & 255) / 255, this.b = (255 & t) / 255, this
|
|
}
|
|
setRGB(t, e, n) {
|
|
return this.r = t, this.g = e, this.b = n, this
|
|
}
|
|
setHSL(t, e, n) {
|
|
if (t = g.euclideanModulo(t, 1), e = g.clamp(e, 0, 1), n = g.clamp(n, 0, 1), 0 === e) this.r = this.g = this.b = n;
|
|
else {
|
|
const i = n <= .5 ? n * (1 + e) : n + e - n * e,
|
|
r = 2 * n - i;
|
|
this.r = jt(r, i, t + 1 / 3), this.g = jt(r, i, t), this.b = jt(r, i, t - 1 / 3)
|
|
}
|
|
return this
|
|
}
|
|
setStyle(t) {
|
|
function e(e) {
|
|
void 0 !== e && parseFloat(e) < 1 && console.warn("THREE.Color: Alpha component of " + t + " will be ignored.")
|
|
}
|
|
let n;
|
|
if (n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)) {
|
|
let t;
|
|
const i = n[1],
|
|
r = n[2];
|
|
switch (i) {
|
|
case "rgb":
|
|
case "rgba":
|
|
if (t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(255, parseInt(t[1], 10)) / 255, this.g = Math.min(255, parseInt(t[2], 10)) / 255, this.b = Math.min(255, parseInt(t[3], 10)) / 255, e(t[4]), this;
|
|
if (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) return this.r = Math.min(100, parseInt(t[1], 10)) / 100, this.g = Math.min(100, parseInt(t[2], 10)) / 100, this.b = Math.min(100, parseInt(t[3], 10)) / 100, e(t[4]), this;
|
|
break;
|
|
case "hsl":
|
|
case "hsla":
|
|
if (t = /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) {
|
|
const n = parseFloat(t[1]) / 360,
|
|
i = parseInt(t[2], 10) / 100,
|
|
r = parseInt(t[3], 10) / 100;
|
|
return e(t[4]), this.setHSL(n, i, r)
|
|
}
|
|
}
|
|
} else if (n = /^\#([A-Fa-f\d]+)$/.exec(t)) {
|
|
const t = n[1],
|
|
e = t.length;
|
|
if (3 === e) return this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255, this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255, this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255, this;
|
|
if (6 === e) return this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255, this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255, this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255, this
|
|
}
|
|
return t && t.length > 0 ? this.setColorName(t) : this
|
|
}
|
|
setColorName(t) {
|
|
const e = Vt[t];
|
|
return void 0 !== e ? this.setHex(e) : console.warn("THREE.Color: Unknown color " + t), this
|
|
}
|
|
clone() {
|
|
return new this.constructor(this.r, this.g, this.b)
|
|
}
|
|
copy(t) {
|
|
return this.r = t.r, this.g = t.g, this.b = t.b, this
|
|
}
|
|
copyGammaToLinear(t, e = 2) {
|
|
return this.r = Math.pow(t.r, e), this.g = Math.pow(t.g, e), this.b = Math.pow(t.b, e), this
|
|
}
|
|
copyLinearToGamma(t, e = 2) {
|
|
const n = e > 0 ? 1 / e : 1;
|
|
return this.r = Math.pow(t.r, n), this.g = Math.pow(t.g, n), this.b = Math.pow(t.b, n), this
|
|
}
|
|
convertGammaToLinear(t) {
|
|
return this.copyGammaToLinear(this, t), this
|
|
}
|
|
convertLinearToGamma(t) {
|
|
return this.copyLinearToGamma(this, t), this
|
|
}
|
|
copySRGBToLinear(t) {
|
|
return this.r = Xt(t.r), this.g = Xt(t.g), this.b = Xt(t.b), this
|
|
}
|
|
copyLinearToSRGB(t) {
|
|
return this.r = qt(t.r), this.g = qt(t.g), this.b = qt(t.b), this
|
|
}
|
|
convertSRGBToLinear() {
|
|
return this.copySRGBToLinear(this), this
|
|
}
|
|
convertLinearToSRGB() {
|
|
return this.copyLinearToSRGB(this), this
|
|
}
|
|
getHex() {
|
|
return 255 * this.r << 16 ^ 255 * this.g << 8 ^ 255 * this.b << 0
|
|
}
|
|
getHexString() {
|
|
return ("000000" + this.getHex().toString(16)).slice(-6)
|
|
}
|
|
getHSL(t) {
|
|
void 0 === t && (console.warn("THREE.Color: .getHSL() target is now required"), t = {
|
|
h: 0,
|
|
s: 0,
|
|
l: 0
|
|
});
|
|
const e = this.r,
|
|
n = this.g,
|
|
i = this.b,
|
|
r = Math.max(e, n, i),
|
|
o = Math.min(e, n, i);
|
|
let s, a;
|
|
const l = (o + r) / 2;
|
|
if (o === r) s = 0, a = 0;
|
|
else {
|
|
const t = r - o;
|
|
switch (a = l <= .5 ? t / (r + o) : t / (2 - r - o), r) {
|
|
case e:
|
|
s = (n - i) / t + (n < i ? 6 : 0);
|
|
break;
|
|
case n:
|
|
s = (i - e) / t + 2;
|
|
break;
|
|
case i:
|
|
s = (e - n) / t + 4
|
|
}
|
|
s /= 6
|
|
}
|
|
return t.h = s, t.s = a, t.l = l, t
|
|
}
|
|
getStyle() {
|
|
return "rgb(" + (255 * this.r | 0) + "," + (255 * this.g | 0) + "," + (255 * this.b | 0) + ")"
|
|
}
|
|
offsetHSL(t, e, n) {
|
|
return this.getHSL(kt), kt.h += t, kt.s += e, kt.l += n, this.setHSL(kt.h, kt.s, kt.l), this
|
|
}
|
|
add(t) {
|
|
return this.r += t.r, this.g += t.g, this.b += t.b, this
|
|
}
|
|
addColors(t, e) {
|
|
return this.r = t.r + e.r, this.g = t.g + e.g, this.b = t.b + e.b, this
|
|
}
|
|
addScalar(t) {
|
|
return this.r += t, this.g += t, this.b += t, this
|
|
}
|
|
sub(t) {
|
|
return this.r = Math.max(0, this.r - t.r), this.g = Math.max(0, this.g - t.g), this.b = Math.max(0, this.b - t.b), this
|
|
}
|
|
multiply(t) {
|
|
return this.r *= t.r, this.g *= t.g, this.b *= t.b, this
|
|
}
|
|
multiplyScalar(t) {
|
|
return this.r *= t, this.g *= t, this.b *= t, this
|
|
}
|
|
lerp(t, e) {
|
|
return this.r += (t.r - this.r) * e, this.g += (t.g - this.g) * e, this.b += (t.b - this.b) * e, this
|
|
}
|
|
lerpColors(t, e, n) {
|
|
return this.r = t.r + (e.r - t.r) * n, this.g = t.g + (e.g - t.g) * n, this.b = t.b + (e.b - t.b) * n, this
|
|
}
|
|
lerpHSL(t, e) {
|
|
this.getHSL(kt), t.getHSL(Wt);
|
|
const n = g.lerp(kt.h, Wt.h, e),
|
|
i = g.lerp(kt.s, Wt.s, e),
|
|
r = g.lerp(kt.l, Wt.l, e);
|
|
return this.setHSL(n, i, r), this
|
|
}
|
|
equals(t) {
|
|
return t.r === this.r && t.g === this.g && t.b === this.b
|
|
}
|
|
fromArray(t, e = 0) {
|
|
return this.r = t[e], this.g = t[e + 1], this.b = t[e + 2], this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
return t[e] = this.r, t[e + 1] = this.g, t[e + 2] = this.b, t
|
|
}
|
|
fromBufferAttribute(t, e) {
|
|
return this.r = t.getX(e), this.g = t.getY(e), this.b = t.getZ(e), !0 === t.normalized && (this.r /= 255, this.g /= 255, this.b /= 255), this
|
|
}
|
|
toJSON() {
|
|
return this.getHex()
|
|
}
|
|
}
|
|
Yt.NAMES = Vt, Yt.prototype.r = 1, Yt.prototype.g = 1, Yt.prototype.b = 1;
|
|
class Qt {
|
|
constructor(t, e, n, i, r, o = 0) {
|
|
this.a = t, this.b = e, this.c = n, this.normal = i && i.isVector3 ? i : new T, this.vertexNormals = Array.isArray(i) ? i : [], this.color = r && r.isColor ? r : new Yt, this.vertexColors = Array.isArray(r) ? r : [], this.materialIndex = o
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
this.a = t.a, this.b = t.b, this.c = t.c, this.normal.copy(t.normal), this.color.copy(t.color), this.materialIndex = t.materialIndex;
|
|
for (let e = 0, n = t.vertexNormals.length; e < n; e++) this.vertexNormals[e] = t.vertexNormals[e].clone();
|
|
for (let e = 0, n = t.vertexColors.length; e < n; e++) this.vertexColors[e] = t.vertexColors[e].clone();
|
|
return this
|
|
}
|
|
}
|
|
let Zt = 0;
|
|
|
|
function Jt() {
|
|
Object.defineProperty(this, "id", {
|
|
value: Zt++
|
|
}), this.uuid = g.generateUUID(), this.name = "", this.type = "Material", this.fog = !0, this.blending = 1, this.side = 0, this.flatShading = !1, this.vertexColors = !1, this.opacity = 1, this.transparent = !1, this.blendSrc = 204, this.blendDst = 205, this.blendEquation = 100, this.blendSrcAlpha = null, this.blendDstAlpha = null, this.blendEquationAlpha = null, this.depthFunc = 3, this.depthTest = !0, this.depthWrite = !0, this.stencilWriteMask = 255, this.stencilFunc = 519, this.stencilRef = 0, this.stencilFuncMask = 255, this.stencilFail = 7680, this.stencilZFail = 7680, this.stencilZPass = 7680, this.stencilWrite = !1, this.clippingPlanes = null, this.clipIntersection = !1, this.clipShadows = !1, this.shadowSide = null, this.colorWrite = !0, this.precision = null, this.polygonOffset = !1, this.polygonOffsetFactor = 0, this.polygonOffsetUnits = 0, this.dithering = !1, this.alphaTest = 0, this.premultipliedAlpha = !1, this.visible = !0, this.toneMapped = !0, this.userData = {}, this.version = 0
|
|
}
|
|
|
|
function Kt(t) {
|
|
Jt.call(this), this.type = "MeshBasicMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.setValues(t)
|
|
}
|
|
Jt.prototype = Object.assign(Object.create(p.prototype), {
|
|
constructor: Jt,
|
|
isMaterial: !0,
|
|
onBeforeCompile: function() {},
|
|
customProgramCacheKey: function() {
|
|
return this.onBeforeCompile.toString()
|
|
},
|
|
setValues: function(t) {
|
|
if (void 0 !== t)
|
|
for (const e in t) {
|
|
const n = t[e];
|
|
if (void 0 === n) {
|
|
console.warn("THREE.Material: '" + e + "' parameter is undefined.");
|
|
continue
|
|
}
|
|
if ("shading" === e) {
|
|
console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === n;
|
|
continue
|
|
}
|
|
const i = this[e];
|
|
void 0 !== i ? i && i.isColor ? i.set(n) : i && i.isVector3 && n && n.isVector3 ? i.copy(n) : this[e] = n : console.warn("THREE." + this.type + ": '" + e + "' is not a property of this material.")
|
|
}
|
|
},
|
|
toJSON: function(t) {
|
|
const e = void 0 === t || "string" == typeof t;
|
|
e && (t = {
|
|
textures: {},
|
|
images: {}
|
|
});
|
|
const n = {
|
|
metadata: {
|
|
version: 4.5,
|
|
type: "Material",
|
|
generator: "Material.toJSON"
|
|
}
|
|
};
|
|
|
|
function i(t) {
|
|
const e = [];
|
|
for (const n in t) {
|
|
const i = t[n];
|
|
delete i.metadata, e.push(i)
|
|
}
|
|
return e
|
|
}
|
|
if (n.uuid = this.uuid, n.type = this.type, "" !== this.name && (n.name = this.name), this.color && this.color.isColor && (n.color = this.color.getHex()), void 0 !== this.roughness && (n.roughness = this.roughness), void 0 !== this.metalness && (n.metalness = this.metalness), this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), this.emissiveIntensity && 1 !== this.emissiveIntensity && (n.emissiveIntensity = this.emissiveIntensity), this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), void 0 !== this.shininess && (n.shininess = this.shininess), void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), this.clearcoatMap && this.clearcoatMap.isTexture && (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture && (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture && (n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid, n.clearcoatNormalScale = this.clearcoatNormalScale.toArray()), this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), this.lightMap && this.lightMap.isTexture && (n.lightMap = this.lightMap.toJSON(t).uuid), this.aoMap && this.aoMap.isTexture && (n.aoMap = this.aoMap.toJSON(t).uuid, n.aoMapIntensity = this.aoMapIntensity), this.bumpMap && this.bumpMap.isTexture && (n.bumpMap = this.bumpMap.toJSON(t).uuid, n.bumpScale = this.bumpScale), this.normalMap && this.normalMap.isTexture && (n.normalMap = this.normalMap.toJSON(t).uuid, n.normalMapType = this.normalMapType, n.normalScale = this.normalScale.toArray()), this.displacementMap && this.displacementMap.isTexture && (n.displacementMap = this.displacementMap.toJSON(t).uuid, n.displacementScale = this.displacementScale, n.displacementBias = this.displacementBias), this.roughnessMap && this.roughnessMap.isTexture && (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), this.metalnessMap && this.metalnessMap.isTexture && (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), this.emissiveMap && this.emissiveMap.isTexture && (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), this.specularMap && this.specularMap.isTexture && (n.specularMap = this.specularMap.toJSON(t).uuid), this.envMap && this.envMap.isTexture && (n.envMap = this.envMap.toJSON(t).uuid, n.reflectivity = this.reflectivity, n.refractionRatio = this.refractionRatio, void 0 !== this.combine && (n.combine = this.combine), void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity)), this.gradientMap && this.gradientMap.isTexture && (n.gradientMap = this.gradientMap.toJSON(t).uuid), void 0 !== this.size && (n.size = this.size), void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), 1 !== this.blending && (n.blending = this.blending), !0 === this.flatShading && (n.flatShading = this.flatShading), 0 !== this.side && (n.side = this.side), this.vertexColors && (n.vertexColors = !0), this.opacity < 1 && (n.opacity = this.opacity), !0 === this.transparent && (n.transparent = this.transparent), n.depthFunc = this.depthFunc, n.depthTest = this.depthTest, n.depthWrite = this.depthWrite, n.stencilWrite = this.stencilWrite, n.stencilWriteMask = this.stencilWriteMask, n.stencilFunc = this.stencilFunc, n.stencilRef = this.stencilRef, n.stencilFuncMask = this.stencilFuncMask, n.stencilFail = this.stencilFail, n.stencilZFail = this.stencilZFail, n.stencilZPass = this.stencilZPass, this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), !0 === this.polygonOffset && (n.polygonOffset = !0), 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), void 0 !== this.dashSize && (n.dashSize = this.dashSize), void 0 !== this.gapSize && (n.gapSize = this.gapSize), void 0 !== this.scale && (n.scale = this.scale), !0 === this.dithering && (n.dithering = !0), this.alphaTest > 0 && (n.alphaTest = this.alphaTest), !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), !0 === this.wireframe && (n.wireframe = this.wireframe), this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), "round" !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), "round" !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), !0 === this.morphTargets && (n.morphTargets = !0), !0 === this.morphNormals && (n.morphNormals = !0), !0 === this.skinning && (n.skinning = !0), !1 === this.visible && (n.visible = !1), !1 === this.toneMapped && (n.toneMapped = !1), "{}" !== JSON.stringify(this.userData) && (n.userData = this.userData), e) {
|
|
const e = i(t.textures),
|
|
r = i(t.images);
|
|
e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r)
|
|
}
|
|
return n
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
},
|
|
copy: function(t) {
|
|
this.name = t.name, this.fog = t.fog, this.blending = t.blending, this.side = t.side, this.flatShading = t.flatShading, this.vertexColors = t.vertexColors, this.opacity = t.opacity, this.transparent = t.transparent, this.blendSrc = t.blendSrc, this.blendDst = t.blendDst, this.blendEquation = t.blendEquation, this.blendSrcAlpha = t.blendSrcAlpha, this.blendDstAlpha = t.blendDstAlpha, this.blendEquationAlpha = t.blendEquationAlpha, this.depthFunc = t.depthFunc, this.depthTest = t.depthTest, this.depthWrite = t.depthWrite, this.stencilWriteMask = t.stencilWriteMask, this.stencilFunc = t.stencilFunc, this.stencilRef = t.stencilRef, this.stencilFuncMask = t.stencilFuncMask, this.stencilFail = t.stencilFail, this.stencilZFail = t.stencilZFail, this.stencilZPass = t.stencilZPass, this.stencilWrite = t.stencilWrite;
|
|
const e = t.clippingPlanes;
|
|
let n = null;
|
|
if (null !== e) {
|
|
const t = e.length;
|
|
n = new Array(t);
|
|
for (let i = 0; i !== t; ++i) n[i] = e[i].clone()
|
|
}
|
|
return this.clippingPlanes = n, this.clipIntersection = t.clipIntersection, this.clipShadows = t.clipShadows, this.shadowSide = t.shadowSide, this.colorWrite = t.colorWrite, this.precision = t.precision, this.polygonOffset = t.polygonOffset, this.polygonOffsetFactor = t.polygonOffsetFactor, this.polygonOffsetUnits = t.polygonOffsetUnits, this.dithering = t.dithering, this.alphaTest = t.alphaTest, this.premultipliedAlpha = t.premultipliedAlpha, this.visible = t.visible, this.toneMapped = t.toneMapped, this.userData = JSON.parse(JSON.stringify(t.userData)), this
|
|
},
|
|
dispose: function() {
|
|
this.dispatchEvent({
|
|
type: "dispose"
|
|
})
|
|
}
|
|
}), Object.defineProperty(Jt.prototype, "needsUpdate", {
|
|
set: function(t) {
|
|
!0 === t && this.version++
|
|
}
|
|
}), Kt.prototype = Object.create(Jt.prototype), Kt.prototype.constructor = Kt, Kt.prototype.isMeshBasicMaterial = !0, Kt.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this
|
|
};
|
|
const $t = new T,
|
|
te = new v;
|
|
|
|
function ee(t, e, n) {
|
|
if (Array.isArray(t)) throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");
|
|
this.name = "", this.array = t, this.itemSize = e, this.count = void 0 !== t ? t.length / e : 0, this.normalized = !0 === n, this.usage = 35044, this.updateRange = {
|
|
offset: 0,
|
|
count: -1
|
|
}, this.version = 0
|
|
}
|
|
|
|
function ne(t, e, n) {
|
|
ee.call(this, new Int8Array(t), e, n)
|
|
}
|
|
|
|
function ie(t, e, n) {
|
|
ee.call(this, new Uint8Array(t), e, n)
|
|
}
|
|
|
|
function re(t, e, n) {
|
|
ee.call(this, new Uint8ClampedArray(t), e, n)
|
|
}
|
|
|
|
function oe(t, e, n) {
|
|
ee.call(this, new Int16Array(t), e, n)
|
|
}
|
|
|
|
function se(t, e, n) {
|
|
ee.call(this, new Uint16Array(t), e, n)
|
|
}
|
|
|
|
function ae(t, e, n) {
|
|
ee.call(this, new Int32Array(t), e, n)
|
|
}
|
|
|
|
function le(t, e, n) {
|
|
ee.call(this, new Uint32Array(t), e, n)
|
|
}
|
|
|
|
function ce(t, e, n) {
|
|
ee.call(this, new Uint16Array(t), e, n)
|
|
}
|
|
|
|
function he(t, e, n) {
|
|
ee.call(this, new Float32Array(t), e, n)
|
|
}
|
|
|
|
function ue(t, e, n) {
|
|
ee.call(this, new Float64Array(t), e, n)
|
|
}
|
|
|
|
function de(t) {
|
|
if (0 === t.length) return -1 / 0;
|
|
let e = t[0];
|
|
for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]);
|
|
return e
|
|
}
|
|
Object.defineProperty(ee.prototype, "needsUpdate", {
|
|
set: function(t) {
|
|
!0 === t && this.version++
|
|
}
|
|
}), Object.assign(ee.prototype, {
|
|
isBufferAttribute: !0,
|
|
onUploadCallback: function() {},
|
|
setUsage: function(t) {
|
|
return this.usage = t, this
|
|
},
|
|
copy: function(t) {
|
|
return this.name = t.name, this.array = new t.array.constructor(t.array), this.itemSize = t.itemSize, this.count = t.count, this.normalized = t.normalized, this.usage = t.usage, this
|
|
},
|
|
copyAt: function(t, e, n) {
|
|
t *= this.itemSize, n *= e.itemSize;
|
|
for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i];
|
|
return this
|
|
},
|
|
copyArray: function(t) {
|
|
return this.array.set(t), this
|
|
},
|
|
copyColorsArray: function(t) {
|
|
const e = this.array;
|
|
let n = 0;
|
|
for (let i = 0, r = t.length; i < r; i++) {
|
|
let r = t[i];
|
|
void 0 === r && (console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined", i), r = new Yt), e[n++] = r.r, e[n++] = r.g, e[n++] = r.b
|
|
}
|
|
return this
|
|
},
|
|
copyVector2sArray: function(t) {
|
|
const e = this.array;
|
|
let n = 0;
|
|
for (let i = 0, r = t.length; i < r; i++) {
|
|
let r = t[i];
|
|
void 0 === r && (console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined", i), r = new v), e[n++] = r.x, e[n++] = r.y
|
|
}
|
|
return this
|
|
},
|
|
copyVector3sArray: function(t) {
|
|
const e = this.array;
|
|
let n = 0;
|
|
for (let i = 0, r = t.length; i < r; i++) {
|
|
let r = t[i];
|
|
void 0 === r && (console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined", i), r = new T), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z
|
|
}
|
|
return this
|
|
},
|
|
copyVector4sArray: function(t) {
|
|
const e = this.array;
|
|
let n = 0;
|
|
for (let i = 0, r = t.length; i < r; i++) {
|
|
let r = t[i];
|
|
void 0 === r && (console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined", i), r = new M), e[n++] = r.x, e[n++] = r.y, e[n++] = r.z, e[n++] = r.w
|
|
}
|
|
return this
|
|
},
|
|
applyMatrix3: function(t) {
|
|
if (2 === this.itemSize)
|
|
for (let e = 0, n = this.count; e < n; e++) te.fromBufferAttribute(this, e), te.applyMatrix3(t), this.setXY(e, te.x, te.y);
|
|
else if (3 === this.itemSize)
|
|
for (let e = 0, n = this.count; e < n; e++) $t.fromBufferAttribute(this, e), $t.applyMatrix3(t), this.setXYZ(e, $t.x, $t.y, $t.z);
|
|
return this
|
|
},
|
|
applyMatrix4: function(t) {
|
|
for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyMatrix4(t), this.setXYZ(e, $t.x, $t.y, $t.z);
|
|
return this
|
|
},
|
|
applyNormalMatrix: function(t) {
|
|
for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.applyNormalMatrix(t), this.setXYZ(e, $t.x, $t.y, $t.z);
|
|
return this
|
|
},
|
|
transformDirection: function(t) {
|
|
for (let e = 0, n = this.count; e < n; e++) $t.x = this.getX(e), $t.y = this.getY(e), $t.z = this.getZ(e), $t.transformDirection(t), this.setXYZ(e, $t.x, $t.y, $t.z);
|
|
return this
|
|
},
|
|
set: function(t, e = 0) {
|
|
return this.array.set(t, e), this
|
|
},
|
|
getX: function(t) {
|
|
return this.array[t * this.itemSize]
|
|
},
|
|
setX: function(t, e) {
|
|
return this.array[t * this.itemSize] = e, this
|
|
},
|
|
getY: function(t) {
|
|
return this.array[t * this.itemSize + 1]
|
|
},
|
|
setY: function(t, e) {
|
|
return this.array[t * this.itemSize + 1] = e, this
|
|
},
|
|
getZ: function(t) {
|
|
return this.array[t * this.itemSize + 2]
|
|
},
|
|
setZ: function(t, e) {
|
|
return this.array[t * this.itemSize + 2] = e, this
|
|
},
|
|
getW: function(t) {
|
|
return this.array[t * this.itemSize + 3]
|
|
},
|
|
setW: function(t, e) {
|
|
return this.array[t * this.itemSize + 3] = e, this
|
|
},
|
|
setXY: function(t, e, n) {
|
|
return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this
|
|
},
|
|
setXYZ: function(t, e, n, i) {
|
|
return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this
|
|
},
|
|
setXYZW: function(t, e, n, i, r) {
|
|
return t *= this.itemSize, this.array[t + 0] = e, this.array[t + 1] = n, this.array[t + 2] = i, this.array[t + 3] = r, this
|
|
},
|
|
onUpload: function(t) {
|
|
return this.onUploadCallback = t, this
|
|
},
|
|
clone: function() {
|
|
return new this.constructor(this.array, this.itemSize).copy(this)
|
|
},
|
|
toJSON: function() {
|
|
return {
|
|
itemSize: this.itemSize,
|
|
type: this.array.constructor.name,
|
|
array: Array.prototype.slice.call(this.array),
|
|
normalized: this.normalized
|
|
}
|
|
}
|
|
}), ne.prototype = Object.create(ee.prototype), ne.prototype.constructor = ne, ie.prototype = Object.create(ee.prototype), ie.prototype.constructor = ie, re.prototype = Object.create(ee.prototype), re.prototype.constructor = re, oe.prototype = Object.create(ee.prototype), oe.prototype.constructor = oe, se.prototype = Object.create(ee.prototype), se.prototype.constructor = se, ae.prototype = Object.create(ee.prototype), ae.prototype.constructor = ae, le.prototype = Object.create(ee.prototype), le.prototype.constructor = le, ce.prototype = Object.create(ee.prototype), ce.prototype.constructor = ce, ce.prototype.isFloat16BufferAttribute = !0, he.prototype = Object.create(ee.prototype), he.prototype.constructor = he, ue.prototype = Object.create(ee.prototype), ue.prototype.constructor = ue;
|
|
const pe = {
|
|
Int8Array: Int8Array,
|
|
Uint8Array: Uint8Array,
|
|
Uint8ClampedArray: "undefined" != typeof Uint8ClampedArray ? Uint8ClampedArray : Uint8Array,
|
|
Int16Array: Int16Array,
|
|
Uint16Array: Uint16Array,
|
|
Int32Array: Int32Array,
|
|
Uint32Array: Uint32Array,
|
|
Float32Array: Float32Array,
|
|
Float64Array: Float64Array
|
|
};
|
|
|
|
function fe(t, e) {
|
|
return new pe[t](e)
|
|
}
|
|
let me = 0;
|
|
const ge = new et,
|
|
ve = new St,
|
|
ye = new T,
|
|
Ae = new C,
|
|
xe = new C,
|
|
_e = new T;
|
|
|
|
function be() {
|
|
Object.defineProperty(this, "id", {
|
|
value: me++
|
|
}), this.uuid = g.generateUUID(), this.name = "", this.type = "BufferGeometry", this.index = null, this.attributes = {}, this.morphAttributes = {}, this.morphTargetsRelative = !1, this.groups = [], this.boundingBox = null, this.boundingSphere = null, this.drawRange = {
|
|
start: 0,
|
|
count: 1 / 0
|
|
}, this.userData = {}
|
|
}
|
|
be.prototype = Object.assign(Object.create(p.prototype), {
|
|
constructor: be,
|
|
isBufferGeometry: !0,
|
|
getIndex: function() {
|
|
return this.index
|
|
},
|
|
setIndex: function(t) {
|
|
return Array.isArray(t) ? this.index = new(de(t) > 65535 ? le : se)(t, 1) : this.index = t, this
|
|
},
|
|
getAttribute: function(t) {
|
|
return this.attributes[t]
|
|
},
|
|
setAttribute: function(t, e) {
|
|
return this.attributes[t] = e, this
|
|
},
|
|
deleteAttribute: function(t) {
|
|
return delete this.attributes[t], this
|
|
},
|
|
hasAttribute: function(t) {
|
|
return void 0 !== this.attributes[t]
|
|
},
|
|
addGroup: function(t, e, n = 0) {
|
|
this.groups.push({
|
|
start: t,
|
|
count: e,
|
|
materialIndex: n
|
|
})
|
|
},
|
|
clearGroups: function() {
|
|
this.groups = []
|
|
},
|
|
setDrawRange: function(t, e) {
|
|
this.drawRange.start = t, this.drawRange.count = e
|
|
},
|
|
applyMatrix4: function(t) {
|
|
const e = this.attributes.position;
|
|
void 0 !== e && (e.applyMatrix4(t), e.needsUpdate = !0);
|
|
const n = this.attributes.normal;
|
|
if (void 0 !== n) {
|
|
const e = (new y).getNormalMatrix(t);
|
|
n.applyNormalMatrix(e), n.needsUpdate = !0
|
|
}
|
|
const i = this.attributes.tangent;
|
|
return void 0 !== i && (i.transformDirection(t), i.needsUpdate = !0), null !== this.boundingBox && this.computeBoundingBox(), null !== this.boundingSphere && this.computeBoundingSphere(), this
|
|
},
|
|
rotateX: function(t) {
|
|
return ge.makeRotationX(t), this.applyMatrix4(ge), this
|
|
},
|
|
rotateY: function(t) {
|
|
return ge.makeRotationY(t), this.applyMatrix4(ge), this
|
|
},
|
|
rotateZ: function(t) {
|
|
return ge.makeRotationZ(t), this.applyMatrix4(ge), this
|
|
},
|
|
translate: function(t, e, n) {
|
|
return ge.makeTranslation(t, e, n), this.applyMatrix4(ge), this
|
|
},
|
|
scale: function(t, e, n) {
|
|
return ge.makeScale(t, e, n), this.applyMatrix4(ge), this
|
|
},
|
|
lookAt: function(t) {
|
|
return ve.lookAt(t), ve.updateMatrix(), this.applyMatrix4(ve.matrix), this
|
|
},
|
|
center: function() {
|
|
return this.computeBoundingBox(), this.boundingBox.getCenter(ye).negate(), this.translate(ye.x, ye.y, ye.z), this
|
|
},
|
|
setFromPoints: function(t) {
|
|
const e = [];
|
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
const i = t[n];
|
|
e.push(i.x, i.y, i.z || 0)
|
|
}
|
|
return this.setAttribute("position", new he(e, 3)), this
|
|
},
|
|
computeBoundingBox: function() {
|
|
null === this.boundingBox && (this.boundingBox = new C);
|
|
const t = this.attributes.position,
|
|
e = this.morphAttributes.position;
|
|
if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingBox.set(new T(-1 / 0, -1 / 0, -1 / 0), new T(1 / 0, 1 / 0, 1 / 0));
|
|
if (void 0 !== t) {
|
|
if (this.boundingBox.setFromBufferAttribute(t), e)
|
|
for (let t = 0, n = e.length; t < n; t++) {
|
|
const n = e[t];
|
|
Ae.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(this.boundingBox.min, Ae.min), this.boundingBox.expandByPoint(_e), _e.addVectors(this.boundingBox.max, Ae.max), this.boundingBox.expandByPoint(_e)) : (this.boundingBox.expandByPoint(Ae.min), this.boundingBox.expandByPoint(Ae.max))
|
|
}
|
|
} else this.boundingBox.makeEmpty();
|
|
(isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) && console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this)
|
|
},
|
|
computeBoundingSphere: function() {
|
|
null === this.boundingSphere && (this.boundingSphere = new X);
|
|
const t = this.attributes.position,
|
|
e = this.morphAttributes.position;
|
|
if (t && t.isGLBufferAttribute) return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this), void this.boundingSphere.set(new T, 1 / 0);
|
|
if (t) {
|
|
const n = this.boundingSphere.center;
|
|
if (Ae.setFromBufferAttribute(t), e)
|
|
for (let t = 0, n = e.length; t < n; t++) {
|
|
const n = e[t];
|
|
xe.setFromBufferAttribute(n), this.morphTargetsRelative ? (_e.addVectors(Ae.min, xe.min), Ae.expandByPoint(_e), _e.addVectors(Ae.max, xe.max), Ae.expandByPoint(_e)) : (Ae.expandByPoint(xe.min), Ae.expandByPoint(xe.max))
|
|
}
|
|
Ae.getCenter(n);
|
|
let i = 0;
|
|
for (let e = 0, r = t.count; e < r; e++) _e.fromBufferAttribute(t, e), i = Math.max(i, n.distanceToSquared(_e));
|
|
if (e)
|
|
for (let r = 0, o = e.length; r < o; r++) {
|
|
const o = e[r],
|
|
s = this.morphTargetsRelative;
|
|
for (let e = 0, r = o.count; e < r; e++) _e.fromBufferAttribute(o, e), s && (ye.fromBufferAttribute(t, e), _e.add(ye)), i = Math.max(i, n.distanceToSquared(_e))
|
|
}
|
|
this.boundingSphere.radius = Math.sqrt(i), isNaN(this.boundingSphere.radius) && console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this)
|
|
}
|
|
},
|
|
computeFaceNormals: function() {},
|
|
computeTangents: function() {
|
|
const t = this.index,
|
|
e = this.attributes;
|
|
if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) return void console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");
|
|
const n = t.array,
|
|
i = e.position.array,
|
|
r = e.normal.array,
|
|
o = e.uv.array,
|
|
s = i.length / 3;
|
|
void 0 === e.tangent && this.setAttribute("tangent", new ee(new Float32Array(4 * s), 4));
|
|
const a = e.tangent.array,
|
|
l = [],
|
|
c = [];
|
|
for (let t = 0; t < s; t++) l[t] = new T, c[t] = new T;
|
|
const h = new T,
|
|
u = new T,
|
|
d = new T,
|
|
p = new v,
|
|
f = new v,
|
|
m = new v,
|
|
g = new T,
|
|
y = new T;
|
|
|
|
function A(t, e, n) {
|
|
h.fromArray(i, 3 * t), u.fromArray(i, 3 * e), d.fromArray(i, 3 * n), p.fromArray(o, 2 * t), f.fromArray(o, 2 * e), m.fromArray(o, 2 * n), u.sub(h), d.sub(h), f.sub(p), m.sub(p);
|
|
const r = 1 / (f.x * m.y - m.x * f.y);
|
|
isFinite(r) && (g.copy(u).multiplyScalar(m.y).addScaledVector(d, -f.y).multiplyScalar(r), y.copy(d).multiplyScalar(f.x).addScaledVector(u, -m.x).multiplyScalar(r), l[t].add(g), l[e].add(g), l[n].add(g), c[t].add(y), c[e].add(y), c[n].add(y))
|
|
}
|
|
let x = this.groups;
|
|
0 === x.length && (x = [{
|
|
start: 0,
|
|
count: n.length
|
|
}]);
|
|
for (let t = 0, e = x.length; t < e; ++t) {
|
|
const e = x[t],
|
|
i = e.start;
|
|
for (let t = i, r = i + e.count; t < r; t += 3) A(n[t + 0], n[t + 1], n[t + 2])
|
|
}
|
|
const _ = new T,
|
|
b = new T,
|
|
w = new T,
|
|
M = new T;
|
|
|
|
function E(t) {
|
|
w.fromArray(r, 3 * t), M.copy(w);
|
|
const e = l[t];
|
|
_.copy(e), _.sub(w.multiplyScalar(w.dot(e))).normalize(), b.crossVectors(M, e);
|
|
const n = b.dot(c[t]) < 0 ? -1 : 1;
|
|
a[4 * t] = _.x, a[4 * t + 1] = _.y, a[4 * t + 2] = _.z, a[4 * t + 3] = n
|
|
}
|
|
for (let t = 0, e = x.length; t < e; ++t) {
|
|
const e = x[t],
|
|
i = e.start;
|
|
for (let t = i, r = i + e.count; t < r; t += 3) E(n[t + 0]), E(n[t + 1]), E(n[t + 2])
|
|
}
|
|
},
|
|
computeVertexNormals: function() {
|
|
const t = this.index,
|
|
e = this.getAttribute("position");
|
|
if (void 0 !== e) {
|
|
let n = this.getAttribute("normal");
|
|
if (void 0 === n) n = new ee(new Float32Array(3 * e.count), 3), this.setAttribute("normal", n);
|
|
else
|
|
for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0);
|
|
const i = new T,
|
|
r = new T,
|
|
o = new T,
|
|
s = new T,
|
|
a = new T,
|
|
l = new T,
|
|
c = new T,
|
|
h = new T;
|
|
if (t)
|
|
for (let u = 0, d = t.count; u < d; u += 3) {
|
|
const d = t.getX(u + 0),
|
|
p = t.getX(u + 1),
|
|
f = t.getX(u + 2);
|
|
i.fromBufferAttribute(e, d), r.fromBufferAttribute(e, p), o.fromBufferAttribute(e, f), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), s.fromBufferAttribute(n, d), a.fromBufferAttribute(n, p), l.fromBufferAttribute(n, f), s.add(c), a.add(c), l.add(c), n.setXYZ(d, s.x, s.y, s.z), n.setXYZ(p, a.x, a.y, a.z), n.setXYZ(f, l.x, l.y, l.z)
|
|
} else
|
|
for (let t = 0, s = e.count; t < s; t += 3) i.fromBufferAttribute(e, t + 0), r.fromBufferAttribute(e, t + 1), o.fromBufferAttribute(e, t + 2), c.subVectors(o, r), h.subVectors(i, r), c.cross(h), n.setXYZ(t + 0, c.x, c.y, c.z), n.setXYZ(t + 1, c.x, c.y, c.z), n.setXYZ(t + 2, c.x, c.y, c.z);
|
|
this.normalizeNormals(), n.needsUpdate = !0
|
|
}
|
|
},
|
|
merge: function(t, e) {
|
|
if (!t || !t.isBufferGeometry) return void console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.", t);
|
|
void 0 === e && (e = 0, console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));
|
|
const n = this.attributes;
|
|
for (const i in n) {
|
|
if (void 0 === t.attributes[i]) continue;
|
|
const r = n[i].array,
|
|
o = t.attributes[i],
|
|
s = o.array,
|
|
a = o.itemSize * e,
|
|
l = Math.min(s.length, r.length - a);
|
|
for (let t = 0, e = a; t < l; t++, e++) r[e] = s[t]
|
|
}
|
|
return this
|
|
},
|
|
normalizeNormals: function() {
|
|
const t = this.attributes.normal;
|
|
for (let e = 0, n = t.count; e < n; e++) _e.fromBufferAttribute(t, e), _e.normalize(), t.setXYZ(e, _e.x, _e.y, _e.z)
|
|
},
|
|
toNonIndexed: function() {
|
|
function t(t, e) {
|
|
const n = t.array,
|
|
i = t.itemSize,
|
|
r = t.normalized,
|
|
o = new n.constructor(e.length * i);
|
|
let s = 0,
|
|
a = 0;
|
|
for (let t = 0, r = e.length; t < r; t++) {
|
|
s = e[t] * i;
|
|
for (let t = 0; t < i; t++) o[a++] = n[s++]
|
|
}
|
|
return new ee(o, i, r)
|
|
}
|
|
if (null === this.index) return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."), this;
|
|
const e = new be,
|
|
n = this.index.array,
|
|
i = this.attributes;
|
|
for (const r in i) {
|
|
const o = t(i[r], n);
|
|
e.setAttribute(r, o)
|
|
}
|
|
const r = this.morphAttributes;
|
|
for (const i in r) {
|
|
const o = [],
|
|
s = r[i];
|
|
for (let e = 0, i = s.length; e < i; e++) {
|
|
const i = t(s[e], n);
|
|
o.push(i)
|
|
}
|
|
e.morphAttributes[i] = o
|
|
}
|
|
e.morphTargetsRelative = this.morphTargetsRelative;
|
|
const o = this.groups;
|
|
for (let t = 0, n = o.length; t < n; t++) {
|
|
const n = o[t];
|
|
e.addGroup(n.start, n.count, n.materialIndex)
|
|
}
|
|
return e
|
|
},
|
|
toJSON: function() {
|
|
const t = {
|
|
metadata: {
|
|
version: 4.5,
|
|
type: "BufferGeometry",
|
|
generator: "BufferGeometry.toJSON"
|
|
}
|
|
};
|
|
if (t.uuid = this.uuid, t.type = this.type, "" !== this.name && (t.name = this.name), Object.keys(this.userData).length > 0 && (t.userData = this.userData), void 0 !== this.parameters) {
|
|
const e = this.parameters;
|
|
for (const n in e) void 0 !== e[n] && (t[n] = e[n]);
|
|
return t
|
|
}
|
|
t.data = {
|
|
attributes: {}
|
|
};
|
|
const e = this.index;
|
|
null !== e && (t.data.index = {
|
|
type: e.array.constructor.name,
|
|
array: Array.prototype.slice.call(e.array)
|
|
});
|
|
const n = this.attributes;
|
|
for (const e in n) {
|
|
const i = n[e],
|
|
r = i.toJSON(t.data);
|
|
"" !== i.name && (r.name = i.name), t.data.attributes[e] = r
|
|
}
|
|
const i = {};
|
|
let r = !1;
|
|
for (const e in this.morphAttributes) {
|
|
const n = this.morphAttributes[e],
|
|
o = [];
|
|
for (let e = 0, i = n.length; e < i; e++) {
|
|
const i = n[e],
|
|
r = i.toJSON(t.data);
|
|
"" !== i.name && (r.name = i.name), o.push(r)
|
|
}
|
|
o.length > 0 && (i[e] = o, r = !0)
|
|
}
|
|
r && (t.data.morphAttributes = i, t.data.morphTargetsRelative = this.morphTargetsRelative);
|
|
const o = this.groups;
|
|
o.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(o)));
|
|
const s = this.boundingSphere;
|
|
return null !== s && (t.data.boundingSphere = {
|
|
center: s.center.toArray(),
|
|
radius: s.radius
|
|
}), t
|
|
},
|
|
clone: function() {
|
|
return (new be).copy(this)
|
|
},
|
|
copy: function(t) {
|
|
this.index = null, this.attributes = {}, this.morphAttributes = {}, this.groups = [], this.boundingBox = null, this.boundingSphere = null;
|
|
const e = {};
|
|
this.name = t.name;
|
|
const n = t.index;
|
|
null !== n && this.setIndex(n.clone(e));
|
|
const i = t.attributes;
|
|
for (const t in i) {
|
|
const n = i[t];
|
|
this.setAttribute(t, n.clone(e))
|
|
}
|
|
const r = t.morphAttributes;
|
|
for (const t in r) {
|
|
const n = [],
|
|
i = r[t];
|
|
for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e));
|
|
this.morphAttributes[t] = n
|
|
}
|
|
this.morphTargetsRelative = t.morphTargetsRelative;
|
|
const o = t.groups;
|
|
for (let t = 0, e = o.length; t < e; t++) {
|
|
const e = o[t];
|
|
this.addGroup(e.start, e.count, e.materialIndex)
|
|
}
|
|
const s = t.boundingBox;
|
|
null !== s && (this.boundingBox = s.clone());
|
|
const a = t.boundingSphere;
|
|
return null !== a && (this.boundingSphere = a.clone()), this.drawRange.start = t.drawRange.start, this.drawRange.count = t.drawRange.count, this.userData = t.userData, this
|
|
},
|
|
dispose: function() {
|
|
this.dispatchEvent({
|
|
type: "dispose"
|
|
})
|
|
}
|
|
});
|
|
const we = new et,
|
|
Me = new tt,
|
|
Ee = new X,
|
|
Se = new T,
|
|
Te = new T,
|
|
Le = new T,
|
|
Re = new T,
|
|
Ce = new T,
|
|
Pe = new T,
|
|
De = new T,
|
|
Ie = new T,
|
|
Oe = new T,
|
|
Ne = new v,
|
|
Be = new v,
|
|
Fe = new v,
|
|
ze = new T,
|
|
Ue = new T;
|
|
|
|
function He(t = new be, e = new Kt) {
|
|
St.call(this), this.type = "Mesh", this.geometry = t, this.material = e, this.updateMorphTargets()
|
|
}
|
|
|
|
function Ge(t, e, n, i, r, o, s, a, l, c, h, u) {
|
|
Se.fromBufferAttribute(r, c), Te.fromBufferAttribute(r, h), Le.fromBufferAttribute(r, u);
|
|
const d = t.morphTargetInfluences;
|
|
if (e.morphTargets && o && d) {
|
|
De.set(0, 0, 0), Ie.set(0, 0, 0), Oe.set(0, 0, 0);
|
|
for (let t = 0, e = o.length; t < e; t++) {
|
|
const e = d[t],
|
|
n = o[t];
|
|
0 !== e && (Re.fromBufferAttribute(n, c), Ce.fromBufferAttribute(n, h), Pe.fromBufferAttribute(n, u), s ? (De.addScaledVector(Re, e), Ie.addScaledVector(Ce, e), Oe.addScaledVector(Pe, e)) : (De.addScaledVector(Re.sub(Se), e), Ie.addScaledVector(Ce.sub(Te), e), Oe.addScaledVector(Pe.sub(Le), e)))
|
|
}
|
|
Se.add(De), Te.add(Ie), Le.add(Oe)
|
|
}
|
|
t.isSkinnedMesh && (t.boneTransform(c, Se), t.boneTransform(h, Te), t.boneTransform(u, Le));
|
|
const p = function(t, e, n, i, r, o, s, a) {
|
|
let l;
|
|
if (l = 1 === e.side ? i.intersectTriangle(s, o, r, !0, a) : i.intersectTriangle(r, o, s, 2 !== e.side, a), null === l) return null;
|
|
Ue.copy(a), Ue.applyMatrix4(t.matrixWorld);
|
|
const c = n.ray.origin.distanceTo(Ue);
|
|
return c < n.near || c > n.far ? null : {
|
|
distance: c,
|
|
point: Ue.clone(),
|
|
object: t
|
|
}
|
|
}(t, e, n, i, Se, Te, Le, ze);
|
|
if (p) {
|
|
a && (Ne.fromBufferAttribute(a, c), Be.fromBufferAttribute(a, h), Fe.fromBufferAttribute(a, u), p.uv = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v)), l && (Ne.fromBufferAttribute(l, c), Be.fromBufferAttribute(l, h), Fe.fromBufferAttribute(l, u), p.uv2 = Gt.getUV(ze, Se, Te, Le, Ne, Be, Fe, new v));
|
|
const t = new Qt(c, h, u);
|
|
Gt.getNormal(Se, Te, Le, t.normal), p.face = t
|
|
}
|
|
return p
|
|
}
|
|
He.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: He,
|
|
isMesh: !0,
|
|
copy: function(t) {
|
|
return St.prototype.copy.call(this, t), void 0 !== t.morphTargetInfluences && (this.morphTargetInfluences = t.morphTargetInfluences.slice()), void 0 !== t.morphTargetDictionary && (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), this.material = t.material, this.geometry = t.geometry, this
|
|
},
|
|
updateMorphTargets: function() {
|
|
const t = this.geometry;
|
|
if (t.isBufferGeometry) {
|
|
const e = t.morphAttributes,
|
|
n = Object.keys(e);
|
|
if (n.length > 0) {
|
|
const t = e[n[0]];
|
|
if (void 0 !== t) {
|
|
this.morphTargetInfluences = [], this.morphTargetDictionary = {};
|
|
for (let e = 0, n = t.length; e < n; e++) {
|
|
const n = t[e].name || String(e);
|
|
this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
const e = t.morphTargets;
|
|
void 0 !== e && e.length > 0 && console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
}
|
|
},
|
|
raycast: function(t, e) {
|
|
const n = this.geometry,
|
|
i = this.material,
|
|
r = this.matrixWorld;
|
|
if (void 0 === i) return;
|
|
if (null === n.boundingSphere && n.computeBoundingSphere(), Ee.copy(n.boundingSphere), Ee.applyMatrix4(r), !1 === t.ray.intersectsSphere(Ee)) return;
|
|
if (we.copy(r).invert(), Me.copy(t.ray).applyMatrix4(we), null !== n.boundingBox && !1 === Me.intersectsBox(n.boundingBox)) return;
|
|
let o;
|
|
if (n.isBufferGeometry) {
|
|
const r = n.index,
|
|
s = n.attributes.position,
|
|
a = n.morphAttributes.position,
|
|
l = n.morphTargetsRelative,
|
|
c = n.attributes.uv,
|
|
h = n.attributes.uv2,
|
|
u = n.groups,
|
|
d = n.drawRange;
|
|
if (null !== r)
|
|
if (Array.isArray(i))
|
|
for (let n = 0, p = u.length; n < p; n++) {
|
|
const p = u[n],
|
|
f = i[p.materialIndex];
|
|
for (let n = Math.max(p.start, d.start), i = Math.min(p.start + p.count, d.start + d.count); n < i; n += 3) {
|
|
const i = r.getX(n),
|
|
u = r.getX(n + 1),
|
|
d = r.getX(n + 2);
|
|
o = Ge(this, f, t, Me, s, a, l, c, h, i, u, d), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = p.materialIndex, e.push(o))
|
|
}
|
|
} else {
|
|
for (let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); n < u; n += 3) {
|
|
const u = r.getX(n),
|
|
d = r.getX(n + 1),
|
|
p = r.getX(n + 2);
|
|
o = Ge(this, i, t, Me, s, a, l, c, h, u, d, p), o && (o.faceIndex = Math.floor(n / 3), e.push(o))
|
|
}
|
|
} else if (void 0 !== s)
|
|
if (Array.isArray(i))
|
|
for (let n = 0, r = u.length; n < r; n++) {
|
|
const r = u[n],
|
|
p = i[r.materialIndex];
|
|
for (let n = Math.max(r.start, d.start), i = Math.min(r.start + r.count, d.start + d.count); n < i; n += 3) {
|
|
o = Ge(this, p, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), o.face.materialIndex = r.materialIndex, e.push(o))
|
|
}
|
|
} else {
|
|
for (let n = Math.max(0, d.start), r = Math.min(s.count, d.start + d.count); n < r; n += 3) {
|
|
o = Ge(this, i, t, Me, s, a, l, c, h, n, n + 1, n + 2), o && (o.faceIndex = Math.floor(n / 3), e.push(o))
|
|
}
|
|
}
|
|
} else n.isGeometry && console.error("THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
}
|
|
});
|
|
class Ve extends be {
|
|
constructor(t = 1, e = 1, n = 1, i = 1, r = 1, o = 1) {
|
|
super(), this.type = "BoxGeometry", this.parameters = {
|
|
width: t,
|
|
height: e,
|
|
depth: n,
|
|
widthSegments: i,
|
|
heightSegments: r,
|
|
depthSegments: o
|
|
};
|
|
const s = this;
|
|
i = Math.floor(i), r = Math.floor(r), o = Math.floor(o);
|
|
const a = [],
|
|
l = [],
|
|
c = [],
|
|
h = [];
|
|
let u = 0,
|
|
d = 0;
|
|
|
|
function p(t, e, n, i, r, o, p, f, m, g, v) {
|
|
const y = o / m,
|
|
A = p / g,
|
|
x = o / 2,
|
|
_ = p / 2,
|
|
b = f / 2,
|
|
w = m + 1,
|
|
M = g + 1;
|
|
let E = 0,
|
|
S = 0;
|
|
const L = new T;
|
|
for (let o = 0; o < M; o++) {
|
|
const s = o * A - _;
|
|
for (let a = 0; a < w; a++) {
|
|
const u = a * y - x;
|
|
L[t] = u * i, L[e] = s * r, L[n] = b, l.push(L.x, L.y, L.z), L[t] = 0, L[e] = 0, L[n] = f > 0 ? 1 : -1, c.push(L.x, L.y, L.z), h.push(a / m), h.push(1 - o / g), E += 1
|
|
}
|
|
}
|
|
for (let t = 0; t < g; t++)
|
|
for (let e = 0; e < m; e++) {
|
|
const n = u + e + w * t,
|
|
i = u + e + w * (t + 1),
|
|
r = u + (e + 1) + w * (t + 1),
|
|
o = u + (e + 1) + w * t;
|
|
a.push(n, i, o), a.push(i, r, o), S += 6
|
|
}
|
|
s.addGroup(d, S, v), d += S, u += E
|
|
}
|
|
p("z", "y", "x", -1, -1, n, e, t, o, r, 0), p("z", "y", "x", 1, -1, n, e, -t, o, r, 1), p("x", "z", "y", 1, 1, t, n, e, i, o, 2), p("x", "z", "y", 1, -1, t, n, -e, i, o, 3), p("x", "y", "z", 1, -1, t, e, n, i, r, 4), p("x", "y", "z", -1, -1, t, e, -n, i, r, 5), this.setIndex(a), this.setAttribute("position", new he(l, 3)), this.setAttribute("normal", new he(c, 3)), this.setAttribute("uv", new he(h, 2))
|
|
}
|
|
}
|
|
|
|
function ke(t) {
|
|
const e = {};
|
|
for (const n in t) {
|
|
e[n] = {};
|
|
for (const i in t[n]) {
|
|
const r = t[n][i];
|
|
r && (r.isColor || r.isMatrix3 || r.isMatrix4 || r.isVector2 || r.isVector3 || r.isVector4 || r.isTexture) ? e[n][i] = r.clone() : Array.isArray(r) ? e[n][i] = r.slice() : e[n][i] = r
|
|
}
|
|
}
|
|
return e
|
|
}
|
|
|
|
function We(t) {
|
|
const e = {};
|
|
for (let n = 0; n < t.length; n++) {
|
|
const i = ke(t[n]);
|
|
for (const t in i) e[t] = i[t]
|
|
}
|
|
return e
|
|
}
|
|
const je = {
|
|
clone: ke,
|
|
merge: We
|
|
};
|
|
|
|
function Xe(t) {
|
|
Jt.call(this), this.type = "ShaderMaterial", this.defines = {}, this.uniforms = {}, this.vertexShader = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}", this.fragmentShader = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}", this.linewidth = 1, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.lights = !1, this.clipping = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.extensions = {
|
|
derivatives: !1,
|
|
fragDepth: !1,
|
|
drawBuffers: !1,
|
|
shaderTextureLOD: !1
|
|
}, this.defaultAttributeValues = {
|
|
color: [1, 1, 1],
|
|
uv: [0, 0],
|
|
uv2: [0, 0]
|
|
}, this.index0AttributeName = void 0, this.uniformsNeedUpdate = !1, this.glslVersion = null, void 0 !== t && (void 0 !== t.attributes && console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."), this.setValues(t))
|
|
}
|
|
|
|
function qe() {
|
|
St.call(this), this.type = "Camera", this.matrixWorldInverse = new et, this.projectionMatrix = new et, this.projectionMatrixInverse = new et
|
|
}
|
|
|
|
function Ye(t = 50, e = 1, n = .1, i = 2e3) {
|
|
qe.call(this), this.type = "PerspectiveCamera", this.fov = t, this.zoom = 1, this.near = n, this.far = i, this.focus = 10, this.aspect = e, this.view = null, this.filmGauge = 35, this.filmOffset = 0, this.updateProjectionMatrix()
|
|
}
|
|
Xe.prototype = Object.create(Jt.prototype), Xe.prototype.constructor = Xe, Xe.prototype.isShaderMaterial = !0, Xe.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.fragmentShader = t.fragmentShader, this.vertexShader = t.vertexShader, this.uniforms = ke(t.uniforms), this.defines = Object.assign({}, t.defines), this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.lights = t.lights, this.clipping = t.clipping, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.extensions = Object.assign({}, t.extensions), this.glslVersion = t.glslVersion, this
|
|
}, Xe.prototype.toJSON = function(t) {
|
|
const e = Jt.prototype.toJSON.call(this, t);
|
|
e.glslVersion = this.glslVersion, e.uniforms = {};
|
|
for (const n in this.uniforms) {
|
|
const i = this.uniforms[n].value;
|
|
i && i.isTexture ? e.uniforms[n] = {
|
|
type: "t",
|
|
value: i.toJSON(t).uuid
|
|
} : i && i.isColor ? e.uniforms[n] = {
|
|
type: "c",
|
|
value: i.getHex()
|
|
} : i && i.isVector2 ? e.uniforms[n] = {
|
|
type: "v2",
|
|
value: i.toArray()
|
|
} : i && i.isVector3 ? e.uniforms[n] = {
|
|
type: "v3",
|
|
value: i.toArray()
|
|
} : i && i.isVector4 ? e.uniforms[n] = {
|
|
type: "v4",
|
|
value: i.toArray()
|
|
} : i && i.isMatrix3 ? e.uniforms[n] = {
|
|
type: "m3",
|
|
value: i.toArray()
|
|
} : i && i.isMatrix4 ? e.uniforms[n] = {
|
|
type: "m4",
|
|
value: i.toArray()
|
|
} : e.uniforms[n] = {
|
|
value: i
|
|
}
|
|
}
|
|
Object.keys(this.defines).length > 0 && (e.defines = this.defines), e.vertexShader = this.vertexShader, e.fragmentShader = this.fragmentShader;
|
|
const n = {};
|
|
for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0);
|
|
return Object.keys(n).length > 0 && (e.extensions = n), e
|
|
}, qe.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: qe,
|
|
isCamera: !0,
|
|
copy: function(t, e) {
|
|
return St.prototype.copy.call(this, t, e), this.matrixWorldInverse.copy(t.matrixWorldInverse), this.projectionMatrix.copy(t.projectionMatrix), this.projectionMatrixInverse.copy(t.projectionMatrixInverse), this
|
|
},
|
|
getWorldDirection: function(t) {
|
|
void 0 === t && (console.warn("THREE.Camera: .getWorldDirection() target is now required"), t = new T), this.updateWorldMatrix(!0, !1);
|
|
const e = this.matrixWorld.elements;
|
|
return t.set(-e[8], -e[9], -e[10]).normalize()
|
|
},
|
|
updateMatrixWorld: function(t) {
|
|
St.prototype.updateMatrixWorld.call(this, t), this.matrixWorldInverse.copy(this.matrixWorld).invert()
|
|
},
|
|
updateWorldMatrix: function(t, e) {
|
|
St.prototype.updateWorldMatrix.call(this, t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert()
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
}), Ye.prototype = Object.assign(Object.create(qe.prototype), {
|
|
constructor: Ye,
|
|
isPerspectiveCamera: !0,
|
|
copy: function(t, e) {
|
|
return qe.prototype.copy.call(this, t, e), this.fov = t.fov, this.zoom = t.zoom, this.near = t.near, this.far = t.far, this.focus = t.focus, this.aspect = t.aspect, this.view = null === t.view ? null : Object.assign({}, t.view), this.filmGauge = t.filmGauge, this.filmOffset = t.filmOffset, this
|
|
},
|
|
setFocalLength: function(t) {
|
|
const e = .5 * this.getFilmHeight() / t;
|
|
this.fov = 2 * g.RAD2DEG * Math.atan(e), this.updateProjectionMatrix()
|
|
},
|
|
getFocalLength: function() {
|
|
const t = Math.tan(.5 * g.DEG2RAD * this.fov);
|
|
return .5 * this.getFilmHeight() / t
|
|
},
|
|
getEffectiveFOV: function() {
|
|
return 2 * g.RAD2DEG * Math.atan(Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom)
|
|
},
|
|
getFilmWidth: function() {
|
|
return this.filmGauge * Math.min(this.aspect, 1)
|
|
},
|
|
getFilmHeight: function() {
|
|
return this.filmGauge / Math.max(this.aspect, 1)
|
|
},
|
|
setViewOffset: function(t, e, n, i, r, o) {
|
|
this.aspect = t / e, null === this.view && (this.view = {
|
|
enabled: !0,
|
|
fullWidth: 1,
|
|
fullHeight: 1,
|
|
offsetX: 0,
|
|
offsetY: 0,
|
|
width: 1,
|
|
height: 1
|
|
}), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix()
|
|
},
|
|
clearViewOffset: function() {
|
|
null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix()
|
|
},
|
|
updateProjectionMatrix: function() {
|
|
const t = this.near;
|
|
let e = t * Math.tan(.5 * g.DEG2RAD * this.fov) / this.zoom,
|
|
n = 2 * e,
|
|
i = this.aspect * n,
|
|
r = -.5 * i;
|
|
const o = this.view;
|
|
if (null !== this.view && this.view.enabled) {
|
|
const t = o.fullWidth,
|
|
s = o.fullHeight;
|
|
r += o.offsetX * i / t, e -= o.offsetY * n / s, i *= o.width / t, n *= o.height / s
|
|
}
|
|
const s = this.filmOffset;
|
|
0 !== s && (r += t * s / this.getFilmWidth()), this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
|
|
},
|
|
toJSON: function(t) {
|
|
const e = St.prototype.toJSON.call(this, t);
|
|
return e.object.fov = this.fov, e.object.zoom = this.zoom, e.object.near = this.near, e.object.far = this.far, e.object.focus = this.focus, e.object.aspect = this.aspect, null !== this.view && (e.object.view = Object.assign({}, this.view)), e.object.filmGauge = this.filmGauge, e.object.filmOffset = this.filmOffset, e
|
|
}
|
|
});
|
|
|
|
function Qe(t, e, n) {
|
|
if (St.call(this), this.type = "CubeCamera", !0 !== n.isWebGLCubeRenderTarget) return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");
|
|
this.renderTarget = n;
|
|
const i = new Ye(90, 1, t, e);
|
|
i.layers = this.layers, i.up.set(0, -1, 0), i.lookAt(new T(1, 0, 0)), this.add(i);
|
|
const r = new Ye(90, 1, t, e);
|
|
r.layers = this.layers, r.up.set(0, -1, 0), r.lookAt(new T(-1, 0, 0)), this.add(r);
|
|
const o = new Ye(90, 1, t, e);
|
|
o.layers = this.layers, o.up.set(0, 0, 1), o.lookAt(new T(0, 1, 0)), this.add(o);
|
|
const s = new Ye(90, 1, t, e);
|
|
s.layers = this.layers, s.up.set(0, 0, -1), s.lookAt(new T(0, -1, 0)), this.add(s);
|
|
const a = new Ye(90, 1, t, e);
|
|
a.layers = this.layers, a.up.set(0, -1, 0), a.lookAt(new T(0, 0, 1)), this.add(a);
|
|
const l = new Ye(90, 1, t, e);
|
|
l.layers = this.layers, l.up.set(0, -1, 0), l.lookAt(new T(0, 0, -1)), this.add(l), this.update = function(t, e) {
|
|
null === this.parent && this.updateMatrixWorld();
|
|
const c = t.xr.enabled,
|
|
h = t.getRenderTarget();
|
|
t.xr.enabled = !1;
|
|
const u = n.texture.generateMipmaps;
|
|
n.texture.generateMipmaps = !1, t.setRenderTarget(n, 0), t.render(e, i), t.setRenderTarget(n, 1), t.render(e, r), t.setRenderTarget(n, 2), t.render(e, o), t.setRenderTarget(n, 3), t.render(e, s), t.setRenderTarget(n, 4), t.render(e, a), n.texture.generateMipmaps = u, t.setRenderTarget(n, 5), t.render(e, l), t.setRenderTarget(h), t.xr.enabled = c
|
|
}
|
|
}
|
|
|
|
function Ze(t, e, n, i, r, o, s, a, l, c) {
|
|
t = void 0 !== t ? t : [], e = void 0 !== e ? e : 301, s = void 0 !== s ? s : 1022, b.call(this, t, e, n, i, r, o, s, a, l, c), this.flipY = !1, this._needsFlipEnvMap = !0
|
|
}
|
|
Qe.prototype = Object.create(St.prototype), Qe.prototype.constructor = Qe, Ze.prototype = Object.create(b.prototype), Ze.prototype.constructor = Ze, Ze.prototype.isCubeTexture = !0, Object.defineProperty(Ze.prototype, "images", {
|
|
get: function() {
|
|
return this.image
|
|
},
|
|
set: function(t) {
|
|
this.image = t
|
|
}
|
|
});
|
|
class Je extends E {
|
|
constructor(t, e, n) {
|
|
Number.isInteger(e) && (console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"), e = n), super(t, t, e), Object.defineProperty(this, "isWebGLCubeRenderTarget", {
|
|
value: !0
|
|
}), e = e || {}, this.texture = new Ze(void 0, e.mapping, e.wrapS, e.wrapT, e.magFilter, e.minFilter, e.format, e.type, e.anisotropy, e.encoding), this.texture._needsFlipEnvMap = !1
|
|
}
|
|
fromEquirectangularTexture(t, e) {
|
|
this.texture.type = e.type, this.texture.format = 1023, this.texture.encoding = e.encoding, this.texture.generateMipmaps = e.generateMipmaps, this.texture.minFilter = e.minFilter, this.texture.magFilter = e.magFilter;
|
|
const n = {
|
|
uniforms: {
|
|
tEquirect: {
|
|
value: null
|
|
}
|
|
},
|
|
vertexShader: "\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t",
|
|
fragmentShader: "\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"
|
|
},
|
|
i = new Ve(5, 5, 5),
|
|
r = new Xe({
|
|
name: "CubemapFromEquirect",
|
|
uniforms: ke(n.uniforms),
|
|
vertexShader: n.vertexShader,
|
|
fragmentShader: n.fragmentShader,
|
|
side: 1,
|
|
blending: 0
|
|
});
|
|
r.uniforms.tEquirect.value = e;
|
|
const o = new He(i, r),
|
|
s = e.minFilter;
|
|
1008 === e.minFilter && (e.minFilter = 1006);
|
|
return new Qe(1, 10, this).update(t, o), e.minFilter = s, o.geometry.dispose(), o.material.dispose(), this
|
|
}
|
|
clear(t, e, n, i) {
|
|
const r = t.getRenderTarget();
|
|
for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i);
|
|
t.setRenderTarget(r)
|
|
}
|
|
}
|
|
|
|
function Ke(t, e, n, i, r, o, s, a, l, c, h, u) {
|
|
b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = {
|
|
data: t || null,
|
|
width: e || 1,
|
|
height: n || 1
|
|
}, this.magFilter = void 0 !== l ? l : 1003, this.minFilter = void 0 !== c ? c : 1003, this.generateMipmaps = !1, this.flipY = !1, this.unpackAlignment = 1, this.needsUpdate = !0
|
|
}
|
|
Ke.prototype = Object.create(b.prototype), Ke.prototype.constructor = Ke, Ke.prototype.isDataTexture = !0;
|
|
const $e = new X,
|
|
tn = new T;
|
|
class en {
|
|
constructor(t, e, n, i, r, o) {
|
|
this.planes = [void 0 !== t ? t : new Ct, void 0 !== e ? e : new Ct, void 0 !== n ? n : new Ct, void 0 !== i ? i : new Ct, void 0 !== r ? r : new Ct, void 0 !== o ? o : new Ct]
|
|
}
|
|
set(t, e, n, i, r, o) {
|
|
const s = this.planes;
|
|
return s[0].copy(t), s[1].copy(e), s[2].copy(n), s[3].copy(i), s[4].copy(r), s[5].copy(o), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
const e = this.planes;
|
|
for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]);
|
|
return this
|
|
}
|
|
setFromProjectionMatrix(t) {
|
|
const e = this.planes,
|
|
n = t.elements,
|
|
i = n[0],
|
|
r = n[1],
|
|
o = n[2],
|
|
s = n[3],
|
|
a = n[4],
|
|
l = n[5],
|
|
c = n[6],
|
|
h = n[7],
|
|
u = n[8],
|
|
d = n[9],
|
|
p = n[10],
|
|
f = n[11],
|
|
m = n[12],
|
|
g = n[13],
|
|
v = n[14],
|
|
y = n[15];
|
|
return e[0].setComponents(s - i, h - a, f - u, y - m).normalize(), e[1].setComponents(s + i, h + a, f + u, y + m).normalize(), e[2].setComponents(s + r, h + l, f + d, y + g).normalize(), e[3].setComponents(s - r, h - l, f - d, y - g).normalize(), e[4].setComponents(s - o, h - c, f - p, y - v).normalize(), e[5].setComponents(s + o, h + c, f + p, y + v).normalize(), this
|
|
}
|
|
intersectsObject(t) {
|
|
const e = t.geometry;
|
|
return null === e.boundingSphere && e.computeBoundingSphere(), $e.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), this.intersectsSphere($e)
|
|
}
|
|
intersectsSprite(t) {
|
|
return $e.center.set(0, 0, 0), $e.radius = .7071067811865476, $e.applyMatrix4(t.matrixWorld), this.intersectsSphere($e)
|
|
}
|
|
intersectsSphere(t) {
|
|
const e = this.planes,
|
|
n = t.center,
|
|
i = -t.radius;
|
|
for (let t = 0; t < 6; t++) {
|
|
if (e[t].distanceToPoint(n) < i) return !1
|
|
}
|
|
return !0
|
|
}
|
|
intersectsBox(t) {
|
|
const e = this.planes;
|
|
for (let n = 0; n < 6; n++) {
|
|
const i = e[n];
|
|
if (tn.x = i.normal.x > 0 ? t.max.x : t.min.x, tn.y = i.normal.y > 0 ? t.max.y : t.min.y, tn.z = i.normal.z > 0 ? t.max.z : t.min.z, i.distanceToPoint(tn) < 0) return !1
|
|
}
|
|
return !0
|
|
}
|
|
containsPoint(t) {
|
|
const e = this.planes;
|
|
for (let n = 0; n < 6; n++)
|
|
if (e[n].distanceToPoint(t) < 0) return !1;
|
|
return !0
|
|
}
|
|
}
|
|
|
|
function nn() {
|
|
let t = null,
|
|
e = !1,
|
|
n = null,
|
|
i = null;
|
|
|
|
function r(e, o) {
|
|
n(e, o), i = t.requestAnimationFrame(r)
|
|
}
|
|
return {
|
|
start: function() {
|
|
!0 !== e && null !== n && (i = t.requestAnimationFrame(r), e = !0)
|
|
},
|
|
stop: function() {
|
|
t.cancelAnimationFrame(i), e = !1
|
|
},
|
|
setAnimationLoop: function(t) {
|
|
n = t
|
|
},
|
|
setContext: function(e) {
|
|
t = e
|
|
}
|
|
}
|
|
}
|
|
|
|
function rn(t, e) {
|
|
const n = e.isWebGL2,
|
|
i = new WeakMap;
|
|
return {
|
|
get: function(t) {
|
|
return t.isInterleavedBufferAttribute && (t = t.data), i.get(t)
|
|
},
|
|
remove: function(e) {
|
|
e.isInterleavedBufferAttribute && (e = e.data);
|
|
const n = i.get(e);
|
|
n && (t.deleteBuffer(n.buffer), i.delete(e))
|
|
},
|
|
update: function(e, r) {
|
|
if (e.isGLBufferAttribute) {
|
|
const t = i.get(e);
|
|
return void((!t || t.version < e.version) && i.set(e, {
|
|
buffer: e.buffer,
|
|
type: e.type,
|
|
bytesPerElement: e.elementSize,
|
|
version: e.version
|
|
}))
|
|
}
|
|
e.isInterleavedBufferAttribute && (e = e.data);
|
|
const o = i.get(e);
|
|
void 0 === o ? i.set(e, function(e, i) {
|
|
const r = e.array,
|
|
o = e.usage,
|
|
s = t.createBuffer();
|
|
t.bindBuffer(i, s), t.bufferData(i, r, o), e.onUploadCallback();
|
|
let a = 5126;
|
|
return r instanceof Float32Array ? a = 5126 : r instanceof Float64Array ? console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.") : r instanceof Uint16Array ? e.isFloat16BufferAttribute ? n ? a = 5131 : console.warn("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.") : a = 5123 : r instanceof Int16Array ? a = 5122 : r instanceof Uint32Array ? a = 5125 : r instanceof Int32Array ? a = 5124 : r instanceof Int8Array ? a = 5120 : r instanceof Uint8Array && (a = 5121), {
|
|
buffer: s,
|
|
type: a,
|
|
bytesPerElement: r.BYTES_PER_ELEMENT,
|
|
version: e.version
|
|
}
|
|
}(e, r)) : o.version < e.version && (! function(e, i, r) {
|
|
const o = i.array,
|
|
s = i.updateRange;
|
|
t.bindBuffer(r, e), -1 === s.count ? t.bufferSubData(r, 0, o) : (n ? t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o, s.offset, s.count) : t.bufferSubData(r, s.offset * o.BYTES_PER_ELEMENT, o.subarray(s.offset, s.offset + s.count)), s.count = -1)
|
|
}(o.buffer, e, r), o.version = e.version)
|
|
}
|
|
}
|
|
}
|
|
class on extends be {
|
|
constructor(t = 1, e = 1, n = 1, i = 1) {
|
|
super(), this.type = "PlaneGeometry", this.parameters = {
|
|
width: t,
|
|
height: e,
|
|
widthSegments: n,
|
|
heightSegments: i
|
|
};
|
|
const r = t / 2,
|
|
o = e / 2,
|
|
s = Math.floor(n),
|
|
a = Math.floor(i),
|
|
l = s + 1,
|
|
c = a + 1,
|
|
h = t / s,
|
|
u = e / a,
|
|
d = [],
|
|
p = [],
|
|
f = [],
|
|
m = [];
|
|
for (let t = 0; t < c; t++) {
|
|
const e = t * u - o;
|
|
for (let n = 0; n < l; n++) {
|
|
const i = n * h - r;
|
|
p.push(i, -e, 0), f.push(0, 0, 1), m.push(n / s), m.push(1 - t / a)
|
|
}
|
|
}
|
|
for (let t = 0; t < a; t++)
|
|
for (let e = 0; e < s; e++) {
|
|
const n = e + l * t,
|
|
i = e + l * (t + 1),
|
|
r = e + 1 + l * (t + 1),
|
|
o = e + 1 + l * t;
|
|
d.push(n, i, o), d.push(i, r, o)
|
|
}
|
|
this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2))
|
|
}
|
|
}
|
|
const sn = {
|
|
alphamap_fragment: "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",
|
|
alphamap_pars_fragment: "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",
|
|
alphatest_fragment: "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",
|
|
aomap_fragment: "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",
|
|
aomap_pars_fragment: "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",
|
|
begin_vertex: "vec3 transformed = vec3( position );",
|
|
beginnormal_vertex: "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",
|
|
bsdfs: "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",
|
|
bumpmap_pars_fragment: "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",
|
|
clipping_planes_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",
|
|
clipping_planes_pars_fragment: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",
|
|
clipping_planes_pars_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",
|
|
clipping_planes_vertex: "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",
|
|
color_fragment: "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",
|
|
color_pars_fragment: "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",
|
|
color_pars_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",
|
|
color_vertex: "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",
|
|
common: "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",
|
|
cube_uv_reflection_fragment: "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",
|
|
defaultnormal_vertex: "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",
|
|
displacementmap_pars_vertex: "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",
|
|
displacementmap_vertex: "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",
|
|
emissivemap_fragment: "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",
|
|
emissivemap_pars_fragment: "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",
|
|
encodings_fragment: "gl_FragColor = linearToOutputTexel( gl_FragColor );",
|
|
encodings_pars_fragment: "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",
|
|
envmap_fragment: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",
|
|
envmap_common_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",
|
|
envmap_pars_fragment: "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",
|
|
envmap_pars_vertex: "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",
|
|
envmap_physical_pars_fragment: "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",
|
|
envmap_vertex: "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",
|
|
fog_vertex: "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif",
|
|
fog_pars_vertex: "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",
|
|
fog_fragment: "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",
|
|
fog_pars_fragment: "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",
|
|
gradientmap_pars_fragment: "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",
|
|
lightmap_fragment: "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",
|
|
lightmap_pars_fragment: "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",
|
|
lights_lambert_vertex: "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",
|
|
lights_pars_begin: "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",
|
|
lights_toon_fragment: "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",
|
|
lights_toon_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",
|
|
lights_phong_fragment: "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",
|
|
lights_phong_pars_fragment: "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",
|
|
lights_physical_fragment: "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",
|
|
lights_physical_pars_fragment: "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",
|
|
lights_fragment_begin: "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",
|
|
lights_fragment_maps: "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",
|
|
lights_fragment_end: "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",
|
|
logdepthbuf_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",
|
|
logdepthbuf_pars_fragment: "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",
|
|
logdepthbuf_pars_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",
|
|
logdepthbuf_vertex: "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",
|
|
map_fragment: "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",
|
|
map_pars_fragment: "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",
|
|
map_particle_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",
|
|
map_particle_pars_fragment: "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",
|
|
metalnessmap_fragment: "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",
|
|
metalnessmap_pars_fragment: "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",
|
|
morphnormal_vertex: "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",
|
|
morphtarget_pars_vertex: "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",
|
|
morphtarget_vertex: "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",
|
|
normal_fragment_begin: "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",
|
|
normal_fragment_maps: "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",
|
|
normalmap_pars_fragment: "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",
|
|
clearcoat_normal_fragment_begin: "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",
|
|
clearcoat_normal_fragment_maps: "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",
|
|
clearcoat_pars_fragment: "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",
|
|
packing: "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",
|
|
premultiplied_alpha_fragment: "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",
|
|
project_vertex: "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",
|
|
dithering_fragment: "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",
|
|
dithering_pars_fragment: "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",
|
|
roughnessmap_fragment: "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",
|
|
roughnessmap_pars_fragment: "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",
|
|
shadowmap_pars_fragment: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",
|
|
shadowmap_pars_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",
|
|
shadowmap_vertex: "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",
|
|
shadowmask_pars_fragment: "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",
|
|
skinbase_vertex: "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",
|
|
skinning_pars_vertex: "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",
|
|
skinning_vertex: "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",
|
|
skinnormal_vertex: "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",
|
|
specularmap_fragment: "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",
|
|
specularmap_pars_fragment: "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",
|
|
tonemapping_fragment: "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",
|
|
tonemapping_pars_fragment: "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",
|
|
transmissionmap_fragment: "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif",
|
|
transmissionmap_pars_fragment: "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif",
|
|
uv_pars_fragment: "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",
|
|
uv_pars_vertex: "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",
|
|
uv_vertex: "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",
|
|
uv2_pars_fragment: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",
|
|
uv2_pars_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",
|
|
uv2_vertex: "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",
|
|
worldpos_vertex: "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",
|
|
background_frag: "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
|
|
background_vert: "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",
|
|
cube_frag: "#include <envmap_common_pars_fragment>\nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include <envmap_fragment>\n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
|
|
cube_vert: "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}",
|
|
depth_frag: "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",
|
|
depth_vert: "#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}",
|
|
distanceRGBA_frag: "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",
|
|
distanceRGBA_vert: "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}",
|
|
equirect_frag: "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}",
|
|
equirect_vert: "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}",
|
|
linedashed_frag: "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",
|
|
linedashed_vert: "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}",
|
|
meshbasic_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshbasic_vert: "#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
meshlambert_frag: "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshlambert_vert: "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
meshmatcap_frag: "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshmatcap_vert: "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}",
|
|
meshtoon_frag: "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshtoon_vert: "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
meshphong_frag: "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshphong_vert: "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
meshphysical_frag: "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <transmissionmap_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <transmissionmap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}",
|
|
meshphysical_vert: "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
normal_frag: "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",
|
|
normal_vert: "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",
|
|
points_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}",
|
|
points_vert: "uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}",
|
|
shadow_frag: "uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",
|
|
shadow_vert: "#include <common>\n#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}",
|
|
sprite_frag: "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}",
|
|
sprite_vert: "uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}"
|
|
},
|
|
an = {
|
|
common: {
|
|
diffuse: {
|
|
value: new Yt(15658734)
|
|
},
|
|
opacity: {
|
|
value: 1
|
|
},
|
|
map: {
|
|
value: null
|
|
},
|
|
uvTransform: {
|
|
value: new y
|
|
},
|
|
uv2Transform: {
|
|
value: new y
|
|
},
|
|
alphaMap: {
|
|
value: null
|
|
}
|
|
},
|
|
specularmap: {
|
|
specularMap: {
|
|
value: null
|
|
}
|
|
},
|
|
envmap: {
|
|
envMap: {
|
|
value: null
|
|
},
|
|
flipEnvMap: {
|
|
value: -1
|
|
},
|
|
reflectivity: {
|
|
value: 1
|
|
},
|
|
refractionRatio: {
|
|
value: .98
|
|
},
|
|
maxMipLevel: {
|
|
value: 0
|
|
}
|
|
},
|
|
aomap: {
|
|
aoMap: {
|
|
value: null
|
|
},
|
|
aoMapIntensity: {
|
|
value: 1
|
|
}
|
|
},
|
|
lightmap: {
|
|
lightMap: {
|
|
value: null
|
|
},
|
|
lightMapIntensity: {
|
|
value: 1
|
|
}
|
|
},
|
|
emissivemap: {
|
|
emissiveMap: {
|
|
value: null
|
|
}
|
|
},
|
|
bumpmap: {
|
|
bumpMap: {
|
|
value: null
|
|
},
|
|
bumpScale: {
|
|
value: 1
|
|
}
|
|
},
|
|
normalmap: {
|
|
normalMap: {
|
|
value: null
|
|
},
|
|
normalScale: {
|
|
value: new v(1, 1)
|
|
}
|
|
},
|
|
displacementmap: {
|
|
displacementMap: {
|
|
value: null
|
|
},
|
|
displacementScale: {
|
|
value: 1
|
|
},
|
|
displacementBias: {
|
|
value: 0
|
|
}
|
|
},
|
|
roughnessmap: {
|
|
roughnessMap: {
|
|
value: null
|
|
}
|
|
},
|
|
metalnessmap: {
|
|
metalnessMap: {
|
|
value: null
|
|
}
|
|
},
|
|
gradientmap: {
|
|
gradientMap: {
|
|
value: null
|
|
}
|
|
},
|
|
fog: {
|
|
fogDensity: {
|
|
value: 25e-5
|
|
},
|
|
fogNear: {
|
|
value: 1
|
|
},
|
|
fogFar: {
|
|
value: 2e3
|
|
},
|
|
fogColor: {
|
|
value: new Yt(16777215)
|
|
}
|
|
},
|
|
lights: {
|
|
ambientLightColor: {
|
|
value: []
|
|
},
|
|
lightProbe: {
|
|
value: []
|
|
},
|
|
directionalLights: {
|
|
value: [],
|
|
properties: {
|
|
direction: {},
|
|
color: {}
|
|
}
|
|
},
|
|
directionalLightShadows: {
|
|
value: [],
|
|
properties: {
|
|
shadowBias: {},
|
|
shadowNormalBias: {},
|
|
shadowRadius: {},
|
|
shadowMapSize: {}
|
|
}
|
|
},
|
|
directionalShadowMap: {
|
|
value: []
|
|
},
|
|
directionalShadowMatrix: {
|
|
value: []
|
|
},
|
|
spotLights: {
|
|
value: [],
|
|
properties: {
|
|
color: {},
|
|
position: {},
|
|
direction: {},
|
|
distance: {},
|
|
coneCos: {},
|
|
penumbraCos: {},
|
|
decay: {}
|
|
}
|
|
},
|
|
spotLightShadows: {
|
|
value: [],
|
|
properties: {
|
|
shadowBias: {},
|
|
shadowNormalBias: {},
|
|
shadowRadius: {},
|
|
shadowMapSize: {}
|
|
}
|
|
},
|
|
spotShadowMap: {
|
|
value: []
|
|
},
|
|
spotShadowMatrix: {
|
|
value: []
|
|
},
|
|
pointLights: {
|
|
value: [],
|
|
properties: {
|
|
color: {},
|
|
position: {},
|
|
decay: {},
|
|
distance: {}
|
|
}
|
|
},
|
|
pointLightShadows: {
|
|
value: [],
|
|
properties: {
|
|
shadowBias: {},
|
|
shadowNormalBias: {},
|
|
shadowRadius: {},
|
|
shadowMapSize: {},
|
|
shadowCameraNear: {},
|
|
shadowCameraFar: {}
|
|
}
|
|
},
|
|
pointShadowMap: {
|
|
value: []
|
|
},
|
|
pointShadowMatrix: {
|
|
value: []
|
|
},
|
|
hemisphereLights: {
|
|
value: [],
|
|
properties: {
|
|
direction: {},
|
|
skyColor: {},
|
|
groundColor: {}
|
|
}
|
|
},
|
|
rectAreaLights: {
|
|
value: [],
|
|
properties: {
|
|
color: {},
|
|
position: {},
|
|
width: {},
|
|
height: {}
|
|
}
|
|
},
|
|
ltc_1: {
|
|
value: null
|
|
},
|
|
ltc_2: {
|
|
value: null
|
|
}
|
|
},
|
|
points: {
|
|
diffuse: {
|
|
value: new Yt(15658734)
|
|
},
|
|
opacity: {
|
|
value: 1
|
|
},
|
|
size: {
|
|
value: 1
|
|
},
|
|
scale: {
|
|
value: 1
|
|
},
|
|
map: {
|
|
value: null
|
|
},
|
|
alphaMap: {
|
|
value: null
|
|
},
|
|
uvTransform: {
|
|
value: new y
|
|
}
|
|
},
|
|
sprite: {
|
|
diffuse: {
|
|
value: new Yt(15658734)
|
|
},
|
|
opacity: {
|
|
value: 1
|
|
},
|
|
center: {
|
|
value: new v(.5, .5)
|
|
},
|
|
rotation: {
|
|
value: 0
|
|
},
|
|
map: {
|
|
value: null
|
|
},
|
|
alphaMap: {
|
|
value: null
|
|
},
|
|
uvTransform: {
|
|
value: new y
|
|
}
|
|
}
|
|
},
|
|
ln = {
|
|
basic: {
|
|
uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.fog]),
|
|
vertexShader: sn.meshbasic_vert,
|
|
fragmentShader: sn.meshbasic_frag
|
|
},
|
|
lambert: {
|
|
uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.fog, an.lights, {
|
|
emissive: {
|
|
value: new Yt(0)
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshlambert_vert,
|
|
fragmentShader: sn.meshlambert_frag
|
|
},
|
|
phong: {
|
|
uniforms: We([an.common, an.specularmap, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.fog, an.lights, {
|
|
emissive: {
|
|
value: new Yt(0)
|
|
},
|
|
specular: {
|
|
value: new Yt(1118481)
|
|
},
|
|
shininess: {
|
|
value: 30
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshphong_vert,
|
|
fragmentShader: sn.meshphong_frag
|
|
},
|
|
standard: {
|
|
uniforms: We([an.common, an.envmap, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.roughnessmap, an.metalnessmap, an.fog, an.lights, {
|
|
emissive: {
|
|
value: new Yt(0)
|
|
},
|
|
roughness: {
|
|
value: 1
|
|
},
|
|
metalness: {
|
|
value: 0
|
|
},
|
|
envMapIntensity: {
|
|
value: 1
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshphysical_vert,
|
|
fragmentShader: sn.meshphysical_frag
|
|
},
|
|
toon: {
|
|
uniforms: We([an.common, an.aomap, an.lightmap, an.emissivemap, an.bumpmap, an.normalmap, an.displacementmap, an.gradientmap, an.fog, an.lights, {
|
|
emissive: {
|
|
value: new Yt(0)
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshtoon_vert,
|
|
fragmentShader: sn.meshtoon_frag
|
|
},
|
|
matcap: {
|
|
uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, an.fog, {
|
|
matcap: {
|
|
value: null
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshmatcap_vert,
|
|
fragmentShader: sn.meshmatcap_frag
|
|
},
|
|
points: {
|
|
uniforms: We([an.points, an.fog]),
|
|
vertexShader: sn.points_vert,
|
|
fragmentShader: sn.points_frag
|
|
},
|
|
dashed: {
|
|
uniforms: We([an.common, an.fog, {
|
|
scale: {
|
|
value: 1
|
|
},
|
|
dashSize: {
|
|
value: 1
|
|
},
|
|
totalSize: {
|
|
value: 2
|
|
}
|
|
}]),
|
|
vertexShader: sn.linedashed_vert,
|
|
fragmentShader: sn.linedashed_frag
|
|
},
|
|
depth: {
|
|
uniforms: We([an.common, an.displacementmap]),
|
|
vertexShader: sn.depth_vert,
|
|
fragmentShader: sn.depth_frag
|
|
},
|
|
normal: {
|
|
uniforms: We([an.common, an.bumpmap, an.normalmap, an.displacementmap, {
|
|
opacity: {
|
|
value: 1
|
|
}
|
|
}]),
|
|
vertexShader: sn.normal_vert,
|
|
fragmentShader: sn.normal_frag
|
|
},
|
|
sprite: {
|
|
uniforms: We([an.sprite, an.fog]),
|
|
vertexShader: sn.sprite_vert,
|
|
fragmentShader: sn.sprite_frag
|
|
},
|
|
background: {
|
|
uniforms: {
|
|
uvTransform: {
|
|
value: new y
|
|
},
|
|
t2D: {
|
|
value: null
|
|
}
|
|
},
|
|
vertexShader: sn.background_vert,
|
|
fragmentShader: sn.background_frag
|
|
},
|
|
cube: {
|
|
uniforms: We([an.envmap, {
|
|
opacity: {
|
|
value: 1
|
|
}
|
|
}]),
|
|
vertexShader: sn.cube_vert,
|
|
fragmentShader: sn.cube_frag
|
|
},
|
|
equirect: {
|
|
uniforms: {
|
|
tEquirect: {
|
|
value: null
|
|
}
|
|
},
|
|
vertexShader: sn.equirect_vert,
|
|
fragmentShader: sn.equirect_frag
|
|
},
|
|
distanceRGBA: {
|
|
uniforms: We([an.common, an.displacementmap, {
|
|
referencePosition: {
|
|
value: new T
|
|
},
|
|
nearDistance: {
|
|
value: 1
|
|
},
|
|
farDistance: {
|
|
value: 1e3
|
|
}
|
|
}]),
|
|
vertexShader: sn.distanceRGBA_vert,
|
|
fragmentShader: sn.distanceRGBA_frag
|
|
},
|
|
shadow: {
|
|
uniforms: We([an.lights, an.fog, {
|
|
color: {
|
|
value: new Yt(0)
|
|
},
|
|
opacity: {
|
|
value: 1
|
|
}
|
|
}]),
|
|
vertexShader: sn.shadow_vert,
|
|
fragmentShader: sn.shadow_frag
|
|
}
|
|
};
|
|
|
|
function cn(t, e, n, i, r) {
|
|
const o = new Yt(0);
|
|
let s, a, l = 0,
|
|
c = null,
|
|
h = 0,
|
|
u = null;
|
|
|
|
function d(t, e) {
|
|
n.buffers.color.setClear(t.r, t.g, t.b, e, r)
|
|
}
|
|
return {
|
|
getClearColor: function() {
|
|
return o
|
|
},
|
|
setClearColor: function(t, e = 1) {
|
|
o.set(t), l = e, d(o, l)
|
|
},
|
|
getClearAlpha: function() {
|
|
return l
|
|
},
|
|
setClearAlpha: function(t) {
|
|
l = t, d(o, l)
|
|
},
|
|
render: function(n, r, p, f) {
|
|
let m = !0 === r.isScene ? r.background : null;
|
|
m && m.isTexture && (m = e.get(m));
|
|
const g = t.xr,
|
|
v = g.getSession && g.getSession();
|
|
v && "additive" === v.environmentBlendMode && (m = null), null === m ? d(o, l) : m && m.isColor && (d(m, 1), f = !0), (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), m && (m.isCubeTexture || m.isWebGLCubeRenderTarget || 306 === m.mapping) ? (void 0 === a && (a = new He(new Ve(1, 1, 1), new Xe({
|
|
name: "BackgroundCubeMaterial",
|
|
uniforms: ke(ln.cube.uniforms),
|
|
vertexShader: ln.cube.vertexShader,
|
|
fragmentShader: ln.cube.fragmentShader,
|
|
side: 1,
|
|
depthTest: !1,
|
|
depthWrite: !1,
|
|
fog: !1
|
|
})), a.geometry.deleteAttribute("normal"), a.geometry.deleteAttribute("uv"), a.onBeforeRender = function(t, e, n) {
|
|
this.matrixWorld.copyPosition(n.matrixWorld)
|
|
}, Object.defineProperty(a.material, "envMap", {
|
|
get: function() {
|
|
return this.uniforms.envMap.value
|
|
}
|
|
}), i.update(a)), m.isWebGLCubeRenderTarget && (m = m.texture), a.material.uniforms.envMap.value = m, a.material.uniforms.flipEnvMap.value = m.isCubeTexture && m._needsFlipEnvMap ? -1 : 1, c === m && h === m.version && u === t.toneMapping || (a.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(a, a.geometry, a.material, 0, 0, null)) : m && m.isTexture && (void 0 === s && (s = new He(new on(2, 2), new Xe({
|
|
name: "BackgroundMaterial",
|
|
uniforms: ke(ln.background.uniforms),
|
|
vertexShader: ln.background.vertexShader,
|
|
fragmentShader: ln.background.fragmentShader,
|
|
side: 0,
|
|
depthTest: !1,
|
|
depthWrite: !1,
|
|
fog: !1
|
|
})), s.geometry.deleteAttribute("normal"), Object.defineProperty(s.material, "map", {
|
|
get: function() {
|
|
return this.uniforms.t2D.value
|
|
}
|
|
}), i.update(s)), s.material.uniforms.t2D.value = m, !0 === m.matrixAutoUpdate && m.updateMatrix(), s.material.uniforms.uvTransform.value.copy(m.matrix), c === m && h === m.version && u === t.toneMapping || (s.material.needsUpdate = !0, c = m, h = m.version, u = t.toneMapping), n.unshift(s, s.geometry, s.material, 0, 0, null))
|
|
}
|
|
}
|
|
}
|
|
|
|
function hn(t, e, n, i) {
|
|
const r = t.getParameter(34921),
|
|
o = i.isWebGL2 ? null : e.get("OES_vertex_array_object"),
|
|
s = i.isWebGL2 || null !== o,
|
|
a = {},
|
|
l = d(null);
|
|
let c = l;
|
|
|
|
function h(e) {
|
|
return i.isWebGL2 ? t.bindVertexArray(e) : o.bindVertexArrayOES(e)
|
|
}
|
|
|
|
function u(e) {
|
|
return i.isWebGL2 ? t.deleteVertexArray(e) : o.deleteVertexArrayOES(e)
|
|
}
|
|
|
|
function d(t) {
|
|
const e = [],
|
|
n = [],
|
|
i = [];
|
|
for (let t = 0; t < r; t++) e[t] = 0, n[t] = 0, i[t] = 0;
|
|
return {
|
|
geometry: null,
|
|
program: null,
|
|
wireframe: !1,
|
|
newAttributes: e,
|
|
enabledAttributes: n,
|
|
attributeDivisors: i,
|
|
object: t,
|
|
attributes: {},
|
|
index: null
|
|
}
|
|
}
|
|
|
|
function p() {
|
|
const t = c.newAttributes;
|
|
for (let e = 0, n = t.length; e < n; e++) t[e] = 0
|
|
}
|
|
|
|
function f(t) {
|
|
m(t, 0)
|
|
}
|
|
|
|
function m(n, r) {
|
|
const o = c.newAttributes,
|
|
s = c.enabledAttributes,
|
|
a = c.attributeDivisors;
|
|
if (o[n] = 1, 0 === s[n] && (t.enableVertexAttribArray(n), s[n] = 1), a[n] !== r) {
|
|
(i.isWebGL2 ? t : e.get("ANGLE_instanced_arrays"))[i.isWebGL2 ? "vertexAttribDivisor" : "vertexAttribDivisorANGLE"](n, r), a[n] = r
|
|
}
|
|
}
|
|
|
|
function g() {
|
|
const e = c.newAttributes,
|
|
n = c.enabledAttributes;
|
|
for (let i = 0, r = n.length; i < r; i++) n[i] !== e[i] && (t.disableVertexAttribArray(i), n[i] = 0)
|
|
}
|
|
|
|
function v(e, n, r, o, s, a) {
|
|
!0 !== i.isWebGL2 || 5124 !== r && 5125 !== r ? t.vertexAttribPointer(e, n, r, o, s, a) : t.vertexAttribIPointer(e, n, r, s, a)
|
|
}
|
|
|
|
function y() {
|
|
A(), c !== l && (c = l, h(c.object))
|
|
}
|
|
|
|
function A() {
|
|
l.geometry = null, l.program = null, l.wireframe = !1
|
|
}
|
|
return {
|
|
setup: function(r, l, u, y, A) {
|
|
let x = !1;
|
|
if (s) {
|
|
const e = function(e, n, r) {
|
|
const s = !0 === r.wireframe;
|
|
let l = a[e.id];
|
|
void 0 === l && (l = {}, a[e.id] = l);
|
|
let c = l[n.id];
|
|
void 0 === c && (c = {}, l[n.id] = c);
|
|
let h = c[s];
|
|
void 0 === h && (h = d(i.isWebGL2 ? t.createVertexArray() : o.createVertexArrayOES()), c[s] = h);
|
|
return h
|
|
}(y, u, l);
|
|
c !== e && (c = e, h(c.object)), x = function(t, e) {
|
|
const n = c.attributes,
|
|
i = t.attributes;
|
|
let r = 0;
|
|
for (const t in i) {
|
|
const e = n[t],
|
|
o = i[t];
|
|
if (void 0 === e) return !0;
|
|
if (e.attribute !== o) return !0;
|
|
if (e.data !== o.data) return !0;
|
|
r++
|
|
}
|
|
return c.attributesNum !== r || c.index !== e
|
|
}(y, A), x && function(t, e) {
|
|
const n = {},
|
|
i = t.attributes;
|
|
let r = 0;
|
|
for (const t in i) {
|
|
const e = i[t],
|
|
o = {};
|
|
o.attribute = e, e.data && (o.data = e.data), n[t] = o, r++
|
|
}
|
|
c.attributes = n, c.attributesNum = r, c.index = e
|
|
}(y, A)
|
|
} else {
|
|
const t = !0 === l.wireframe;
|
|
c.geometry === y.id && c.program === u.id && c.wireframe === t || (c.geometry = y.id, c.program = u.id, c.wireframe = t, x = !0)
|
|
}!0 === r.isInstancedMesh && (x = !0), null !== A && n.update(A, 34963), x && (! function(r, o, s, a) {
|
|
if (!1 === i.isWebGL2 && (r.isInstancedMesh || a.isInstancedBufferGeometry) && null === e.get("ANGLE_instanced_arrays")) return;
|
|
p();
|
|
const l = a.attributes,
|
|
c = s.getAttributes(),
|
|
h = o.defaultAttributeValues;
|
|
for (const e in c) {
|
|
const i = c[e];
|
|
if (i >= 0) {
|
|
const o = l[e];
|
|
if (void 0 !== o) {
|
|
const e = o.normalized,
|
|
r = o.itemSize,
|
|
s = n.get(o);
|
|
if (void 0 === s) continue;
|
|
const l = s.buffer,
|
|
c = s.type,
|
|
h = s.bytesPerElement;
|
|
if (o.isInterleavedBufferAttribute) {
|
|
const n = o.data,
|
|
s = n.stride,
|
|
u = o.offset;
|
|
n && n.isInstancedInterleavedBuffer ? (m(i, n.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = n.meshPerAttribute * n.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, s * h, u * h)
|
|
} else o.isInstancedBufferAttribute ? (m(i, o.meshPerAttribute), void 0 === a._maxInstanceCount && (a._maxInstanceCount = o.meshPerAttribute * o.count)) : f(i), t.bindBuffer(34962, l), v(i, r, c, e, 0, 0)
|
|
} else if ("instanceMatrix" === e) {
|
|
const e = n.get(r.instanceMatrix);
|
|
if (void 0 === e) continue;
|
|
const o = e.buffer,
|
|
s = e.type;
|
|
m(i + 0, 1), m(i + 1, 1), m(i + 2, 1), m(i + 3, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i + 0, 4, s, !1, 64, 0), t.vertexAttribPointer(i + 1, 4, s, !1, 64, 16), t.vertexAttribPointer(i + 2, 4, s, !1, 64, 32), t.vertexAttribPointer(i + 3, 4, s, !1, 64, 48)
|
|
} else if ("instanceColor" === e) {
|
|
const e = n.get(r.instanceColor);
|
|
if (void 0 === e) continue;
|
|
const o = e.buffer,
|
|
s = e.type;
|
|
m(i, 1), t.bindBuffer(34962, o), t.vertexAttribPointer(i, 3, s, !1, 12, 0)
|
|
} else if (void 0 !== h) {
|
|
const n = h[e];
|
|
if (void 0 !== n) switch (n.length) {
|
|
case 2:
|
|
t.vertexAttrib2fv(i, n);
|
|
break;
|
|
case 3:
|
|
t.vertexAttrib3fv(i, n);
|
|
break;
|
|
case 4:
|
|
t.vertexAttrib4fv(i, n);
|
|
break;
|
|
default:
|
|
t.vertexAttrib1fv(i, n)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
g()
|
|
}(r, l, u, y), null !== A && t.bindBuffer(34963, n.get(A).buffer))
|
|
},
|
|
reset: y,
|
|
resetDefaultState: A,
|
|
dispose: function() {
|
|
y();
|
|
for (const t in a) {
|
|
const e = a[t];
|
|
for (const t in e) {
|
|
const n = e[t];
|
|
for (const t in n) u(n[t].object), delete n[t];
|
|
delete e[t]
|
|
}
|
|
delete a[t]
|
|
}
|
|
},
|
|
releaseStatesOfGeometry: function(t) {
|
|
if (void 0 === a[t.id]) return;
|
|
const e = a[t.id];
|
|
for (const t in e) {
|
|
const n = e[t];
|
|
for (const t in n) u(n[t].object), delete n[t];
|
|
delete e[t]
|
|
}
|
|
delete a[t.id]
|
|
},
|
|
releaseStatesOfProgram: function(t) {
|
|
for (const e in a) {
|
|
const n = a[e];
|
|
if (void 0 === n[t.id]) continue;
|
|
const i = n[t.id];
|
|
for (const t in i) u(i[t].object), delete i[t];
|
|
delete n[t.id]
|
|
}
|
|
},
|
|
initAttributes: p,
|
|
enableAttribute: f,
|
|
disableUnusedAttributes: g
|
|
}
|
|
}
|
|
|
|
function un(t, e, n, i) {
|
|
const r = i.isWebGL2;
|
|
let o;
|
|
this.setMode = function(t) {
|
|
o = t
|
|
}, this.render = function(e, i) {
|
|
t.drawArrays(o, e, i), n.update(i, o, 1)
|
|
}, this.renderInstances = function(i, s, a) {
|
|
if (0 === a) return;
|
|
let l, c;
|
|
if (r) l = t, c = "drawArraysInstanced";
|
|
else if (l = e.get("ANGLE_instanced_arrays"), c = "drawArraysInstancedANGLE", null === l) return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
|
|
l[c](o, i, s, a), n.update(s, o, a)
|
|
}
|
|
}
|
|
|
|
function dn(t, e, n) {
|
|
let i;
|
|
|
|
function r(e) {
|
|
if ("highp" === e) {
|
|
if (t.getShaderPrecisionFormat(35633, 36338).precision > 0 && t.getShaderPrecisionFormat(35632, 36338).precision > 0) return "highp";
|
|
e = "mediump"
|
|
}
|
|
return "mediump" === e && t.getShaderPrecisionFormat(35633, 36337).precision > 0 && t.getShaderPrecisionFormat(35632, 36337).precision > 0 ? "mediump" : "lowp"
|
|
}
|
|
const o = "undefined" != typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext || "undefined" != typeof WebGL2ComputeRenderingContext && t instanceof WebGL2ComputeRenderingContext;
|
|
let s = void 0 !== n.precision ? n.precision : "highp";
|
|
const a = r(s);
|
|
a !== s && (console.warn("THREE.WebGLRenderer:", s, "not supported, using", a, "instead."), s = a);
|
|
const l = !0 === n.logarithmicDepthBuffer,
|
|
c = t.getParameter(34930),
|
|
h = t.getParameter(35660),
|
|
u = t.getParameter(3379),
|
|
d = t.getParameter(34076),
|
|
p = t.getParameter(34921),
|
|
f = t.getParameter(36347),
|
|
m = t.getParameter(36348),
|
|
g = t.getParameter(36349),
|
|
v = h > 0,
|
|
y = o || !!e.get("OES_texture_float");
|
|
return {
|
|
isWebGL2: o,
|
|
getMaxAnisotropy: function() {
|
|
if (void 0 !== i) return i;
|
|
const n = e.get("EXT_texture_filter_anisotropic");
|
|
return i = null !== n ? t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, i
|
|
},
|
|
getMaxPrecision: r,
|
|
precision: s,
|
|
logarithmicDepthBuffer: l,
|
|
maxTextures: c,
|
|
maxVertexTextures: h,
|
|
maxTextureSize: u,
|
|
maxCubemapSize: d,
|
|
maxAttributes: p,
|
|
maxVertexUniforms: f,
|
|
maxVaryings: m,
|
|
maxFragmentUniforms: g,
|
|
vertexTextures: v,
|
|
floatFragmentTextures: y,
|
|
floatVertexTextures: v && y,
|
|
maxSamples: o ? t.getParameter(36183) : 0
|
|
}
|
|
}
|
|
|
|
function pn(t) {
|
|
const e = this;
|
|
let n = null,
|
|
i = 0,
|
|
r = !1,
|
|
o = !1;
|
|
const s = new Ct,
|
|
a = new y,
|
|
l = {
|
|
value: null,
|
|
needsUpdate: !1
|
|
};
|
|
|
|
function c() {
|
|
l.value !== n && (l.value = n, l.needsUpdate = i > 0), e.numPlanes = i, e.numIntersection = 0
|
|
}
|
|
|
|
function h(t, n, i, r) {
|
|
const o = null !== t ? t.length : 0;
|
|
let c = null;
|
|
if (0 !== o) {
|
|
if (c = l.value, !0 !== r || null === c) {
|
|
const e = i + 4 * o,
|
|
r = n.matrixWorldInverse;
|
|
a.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e));
|
|
for (let e = 0, n = i; e !== o; ++e, n += 4) s.copy(t[e]).applyMatrix4(r, a), s.normal.toArray(c, n), c[n + 3] = s.constant
|
|
}
|
|
l.value = c, l.needsUpdate = !0
|
|
}
|
|
return e.numPlanes = o, e.numIntersection = 0, c
|
|
}
|
|
this.uniform = l, this.numPlanes = 0, this.numIntersection = 0, this.init = function(t, e, o) {
|
|
const s = 0 !== t.length || e || 0 !== i || r;
|
|
return r = e, n = h(t, o, 0), i = t.length, s
|
|
}, this.beginShadows = function() {
|
|
o = !0, h(null)
|
|
}, this.endShadows = function() {
|
|
o = !1, c()
|
|
}, this.setState = function(e, s, a) {
|
|
const u = e.clippingPlanes,
|
|
d = e.clipIntersection,
|
|
p = e.clipShadows,
|
|
f = t.get(e);
|
|
if (!r || null === u || 0 === u.length || o && !p) o ? h(null) : c();
|
|
else {
|
|
const t = o ? 0 : i,
|
|
e = 4 * t;
|
|
let r = f.clippingState || null;
|
|
l.value = r, r = h(u, s, e, a);
|
|
for (let t = 0; t !== e; ++t) r[t] = n[t];
|
|
f.clippingState = r, this.numIntersection = d ? this.numPlanes : 0, this.numPlanes += t
|
|
}
|
|
}
|
|
}
|
|
|
|
function fn(t) {
|
|
let e = new WeakMap;
|
|
|
|
function n(t, e) {
|
|
return 303 === e ? t.mapping = 301 : 304 === e && (t.mapping = 302), t
|
|
}
|
|
|
|
function i(t) {
|
|
const n = t.target;
|
|
n.removeEventListener("dispose", i);
|
|
const r = e.get(n);
|
|
void 0 !== r && (e.delete(n), r.dispose())
|
|
}
|
|
return {
|
|
get: function(r) {
|
|
if (r && r.isTexture) {
|
|
const o = r.mapping;
|
|
if (303 === o || 304 === o) {
|
|
if (e.has(r)) {
|
|
return n(e.get(r).texture, r.mapping)
|
|
} {
|
|
const o = r.image;
|
|
if (o && o.height > 0) {
|
|
const s = t.getRenderList(),
|
|
a = t.getRenderTarget(),
|
|
l = new Je(o.height / 2);
|
|
return l.fromEquirectangularTexture(t, r), e.set(r, l), t.setRenderTarget(a), t.setRenderList(s), r.addEventListener("dispose", i), n(l.texture, r.mapping)
|
|
}
|
|
return null
|
|
}
|
|
}
|
|
}
|
|
return r
|
|
},
|
|
dispose: function() {
|
|
e = new WeakMap
|
|
}
|
|
}
|
|
}
|
|
|
|
function mn(t) {
|
|
const e = {};
|
|
|
|
function n(n) {
|
|
if (void 0 !== e[n]) return e[n];
|
|
let i;
|
|
switch (n) {
|
|
case "WEBGL_depth_texture":
|
|
i = t.getExtension("WEBGL_depth_texture") || t.getExtension("MOZ_WEBGL_depth_texture") || t.getExtension("WEBKIT_WEBGL_depth_texture");
|
|
break;
|
|
case "EXT_texture_filter_anisotropic":
|
|
i = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");
|
|
break;
|
|
case "WEBGL_compressed_texture_s3tc":
|
|
i = t.getExtension("WEBGL_compressed_texture_s3tc") || t.getExtension("MOZ_WEBGL_compressed_texture_s3tc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
|
|
break;
|
|
case "WEBGL_compressed_texture_pvrtc":
|
|
i = t.getExtension("WEBGL_compressed_texture_pvrtc") || t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");
|
|
break;
|
|
default:
|
|
i = t.getExtension(n)
|
|
}
|
|
return e[n] = i, i
|
|
}
|
|
return {
|
|
has: function(t) {
|
|
return null !== n(t)
|
|
},
|
|
init: function(t) {
|
|
t.isWebGL2 ? n("EXT_color_buffer_float") : (n("WEBGL_depth_texture"), n("OES_texture_float"), n("OES_texture_half_float"), n("OES_texture_half_float_linear"), n("OES_standard_derivatives"), n("OES_element_index_uint"), n("OES_vertex_array_object"), n("ANGLE_instanced_arrays")), n("OES_texture_float_linear"), n("EXT_color_buffer_half_float")
|
|
},
|
|
get: function(t) {
|
|
const e = n(t);
|
|
return null === e && console.warn("THREE.WebGLRenderer: " + t + " extension not supported."), e
|
|
}
|
|
}
|
|
}
|
|
|
|
function gn(t, e, n, i) {
|
|
const r = {},
|
|
o = new WeakMap;
|
|
|
|
function s(t) {
|
|
const a = t.target;
|
|
null !== a.index && e.remove(a.index);
|
|
for (const t in a.attributes) e.remove(a.attributes[t]);
|
|
a.removeEventListener("dispose", s), delete r[a.id];
|
|
const l = o.get(a);
|
|
l && (e.remove(l), o.delete(a)), i.releaseStatesOfGeometry(a), !0 === a.isInstancedBufferGeometry && delete a._maxInstanceCount, n.memory.geometries--
|
|
}
|
|
|
|
function a(t) {
|
|
const n = [],
|
|
i = t.index,
|
|
r = t.attributes.position;
|
|
let s = 0;
|
|
if (null !== i) {
|
|
const t = i.array;
|
|
s = i.version;
|
|
for (let e = 0, i = t.length; e < i; e += 3) {
|
|
const i = t[e + 0],
|
|
r = t[e + 1],
|
|
o = t[e + 2];
|
|
n.push(i, r, r, o, o, i)
|
|
}
|
|
} else {
|
|
const t = r.array;
|
|
s = r.version;
|
|
for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) {
|
|
const t = e + 0,
|
|
i = e + 1,
|
|
r = e + 2;
|
|
n.push(t, i, i, r, r, t)
|
|
}
|
|
}
|
|
const a = new(de(n) > 65535 ? le : se)(n, 1);
|
|
a.version = s;
|
|
const l = o.get(t);
|
|
l && e.remove(l), o.set(t, a)
|
|
}
|
|
return {
|
|
get: function(t, e) {
|
|
return !0 === r[e.id] || (e.addEventListener("dispose", s), r[e.id] = !0, n.memory.geometries++), e
|
|
},
|
|
update: function(t) {
|
|
const n = t.attributes;
|
|
for (const t in n) e.update(n[t], 34962);
|
|
const i = t.morphAttributes;
|
|
for (const t in i) {
|
|
const n = i[t];
|
|
for (let t = 0, i = n.length; t < i; t++) e.update(n[t], 34962)
|
|
}
|
|
},
|
|
getWireframeAttribute: function(t) {
|
|
const e = o.get(t);
|
|
if (e) {
|
|
const n = t.index;
|
|
null !== n && e.version < n.version && a(t)
|
|
} else a(t);
|
|
return o.get(t)
|
|
}
|
|
}
|
|
}
|
|
|
|
function vn(t, e, n, i) {
|
|
const r = i.isWebGL2;
|
|
let o, s, a;
|
|
this.setMode = function(t) {
|
|
o = t
|
|
}, this.setIndex = function(t) {
|
|
s = t.type, a = t.bytesPerElement
|
|
}, this.render = function(e, i) {
|
|
t.drawElements(o, i, s, e * a), n.update(i, o, 1)
|
|
}, this.renderInstances = function(i, l, c) {
|
|
if (0 === c) return;
|
|
let h, u;
|
|
if (r) h = t, u = "drawElementsInstanced";
|
|
else if (h = e.get("ANGLE_instanced_arrays"), u = "drawElementsInstancedANGLE", null === h) return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
|
|
h[u](o, l, s, i * a, c), n.update(l, o, c)
|
|
}
|
|
}
|
|
|
|
function yn(t) {
|
|
const e = {
|
|
frame: 0,
|
|
calls: 0,
|
|
triangles: 0,
|
|
points: 0,
|
|
lines: 0
|
|
};
|
|
return {
|
|
memory: {
|
|
geometries: 0,
|
|
textures: 0
|
|
},
|
|
render: e,
|
|
programs: null,
|
|
autoReset: !0,
|
|
reset: function() {
|
|
e.frame++, e.calls = 0, e.triangles = 0, e.points = 0, e.lines = 0
|
|
},
|
|
update: function(t, n, i) {
|
|
switch (e.calls++, n) {
|
|
case 4:
|
|
e.triangles += i * (t / 3);
|
|
break;
|
|
case 1:
|
|
e.lines += i * (t / 2);
|
|
break;
|
|
case 3:
|
|
e.lines += i * (t - 1);
|
|
break;
|
|
case 2:
|
|
e.lines += i * t;
|
|
break;
|
|
case 0:
|
|
e.points += i * t;
|
|
break;
|
|
default:
|
|
console.error("THREE.WebGLInfo: Unknown draw mode:", n)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function An(t, e) {
|
|
return t[0] - e[0]
|
|
}
|
|
|
|
function xn(t, e) {
|
|
return Math.abs(e[1]) - Math.abs(t[1])
|
|
}
|
|
|
|
function _n(t) {
|
|
const e = {},
|
|
n = new Float32Array(8),
|
|
i = [];
|
|
for (let t = 0; t < 8; t++) i[t] = [t, 0];
|
|
return {
|
|
update: function(r, o, s, a) {
|
|
const l = r.morphTargetInfluences,
|
|
c = void 0 === l ? 0 : l.length;
|
|
let h = e[o.id];
|
|
if (void 0 === h) {
|
|
h = [];
|
|
for (let t = 0; t < c; t++) h[t] = [t, 0];
|
|
e[o.id] = h
|
|
}
|
|
for (let t = 0; t < c; t++) {
|
|
const e = h[t];
|
|
e[0] = t, e[1] = l[t]
|
|
}
|
|
h.sort(xn);
|
|
for (let t = 0; t < 8; t++) t < c && h[t][1] ? (i[t][0] = h[t][0], i[t][1] = h[t][1]) : (i[t][0] = Number.MAX_SAFE_INTEGER, i[t][1] = 0);
|
|
i.sort(An);
|
|
const u = s.morphTargets && o.morphAttributes.position,
|
|
d = s.morphNormals && o.morphAttributes.normal;
|
|
let p = 0;
|
|
for (let t = 0; t < 8; t++) {
|
|
const e = i[t],
|
|
r = e[0],
|
|
s = e[1];
|
|
r !== Number.MAX_SAFE_INTEGER && s ? (u && o.getAttribute("morphTarget" + t) !== u[r] && o.setAttribute("morphTarget" + t, u[r]), d && o.getAttribute("morphNormal" + t) !== d[r] && o.setAttribute("morphNormal" + t, d[r]), n[t] = s, p += s) : (u && !0 === o.hasAttribute("morphTarget" + t) && o.deleteAttribute("morphTarget" + t), d && !0 === o.hasAttribute("morphNormal" + t) && o.deleteAttribute("morphNormal" + t), n[t] = 0)
|
|
}
|
|
const f = o.morphTargetsRelative ? 1 : 1 - p;
|
|
a.getUniforms().setValue(t, "morphTargetBaseInfluence", f), a.getUniforms().setValue(t, "morphTargetInfluences", n)
|
|
}
|
|
}
|
|
}
|
|
|
|
function bn(t, e, n, i) {
|
|
let r = new WeakMap;
|
|
|
|
function o(t) {
|
|
const e = t.target;
|
|
e.removeEventListener("dispose", o), n.remove(e.instanceMatrix), null !== e.instanceColor && n.remove(e.instanceColor)
|
|
}
|
|
return {
|
|
update: function(t) {
|
|
const s = i.render.frame,
|
|
a = t.geometry,
|
|
l = e.get(t, a);
|
|
return r.get(l) !== s && (e.update(l), r.set(l, s)), t.isInstancedMesh && (!1 === t.hasEventListener("dispose", o) && t.addEventListener("dispose", o), n.update(t.instanceMatrix, 34962), null !== t.instanceColor && n.update(t.instanceColor, 34962)), l
|
|
},
|
|
dispose: function() {
|
|
r = new WeakMap
|
|
}
|
|
}
|
|
}
|
|
|
|
function wn(t = null, e = 1, n = 1, i = 1) {
|
|
b.call(this, null), this.image = {
|
|
data: t,
|
|
width: e,
|
|
height: n,
|
|
depth: i
|
|
}, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0
|
|
}
|
|
|
|
function Mn(t = null, e = 1, n = 1, i = 1) {
|
|
b.call(this, null), this.image = {
|
|
data: t,
|
|
width: e,
|
|
height: n,
|
|
depth: i
|
|
}, this.magFilter = 1003, this.minFilter = 1003, this.wrapR = 1001, this.generateMipmaps = !1, this.flipY = !1, this.needsUpdate = !0
|
|
}
|
|
ln.physical = {
|
|
uniforms: We([ln.standard.uniforms, {
|
|
clearcoat: {
|
|
value: 0
|
|
},
|
|
clearcoatMap: {
|
|
value: null
|
|
},
|
|
clearcoatRoughness: {
|
|
value: 0
|
|
},
|
|
clearcoatRoughnessMap: {
|
|
value: null
|
|
},
|
|
clearcoatNormalScale: {
|
|
value: new v(1, 1)
|
|
},
|
|
clearcoatNormalMap: {
|
|
value: null
|
|
},
|
|
sheen: {
|
|
value: new Yt(0)
|
|
},
|
|
transmission: {
|
|
value: 0
|
|
},
|
|
transmissionMap: {
|
|
value: null
|
|
}
|
|
}]),
|
|
vertexShader: sn.meshphysical_vert,
|
|
fragmentShader: sn.meshphysical_frag
|
|
}, wn.prototype = Object.create(b.prototype), wn.prototype.constructor = wn, wn.prototype.isDataTexture2DArray = !0, Mn.prototype = Object.create(b.prototype), Mn.prototype.constructor = Mn, Mn.prototype.isDataTexture3D = !0;
|
|
const En = new b,
|
|
Sn = new wn,
|
|
Tn = new Mn,
|
|
Ln = new Ze,
|
|
Rn = [],
|
|
Cn = [],
|
|
Pn = new Float32Array(16),
|
|
Dn = new Float32Array(9),
|
|
In = new Float32Array(4);
|
|
|
|
function On(t, e, n) {
|
|
const i = t[0];
|
|
if (i <= 0 || i > 0) return t;
|
|
const r = e * n;
|
|
let o = Rn[r];
|
|
if (void 0 === o && (o = new Float32Array(r), Rn[r] = o), 0 !== e) {
|
|
i.toArray(o, 0);
|
|
for (let i = 1, r = 0; i !== e; ++i) r += n, t[i].toArray(o, r)
|
|
}
|
|
return o
|
|
}
|
|
|
|
function Nn(t, e) {
|
|
if (t.length !== e.length) return !1;
|
|
for (let n = 0, i = t.length; n < i; n++)
|
|
if (t[n] !== e[n]) return !1;
|
|
return !0
|
|
}
|
|
|
|
function Bn(t, e) {
|
|
for (let n = 0, i = e.length; n < i; n++) t[n] = e[n]
|
|
}
|
|
|
|
function Fn(t, e) {
|
|
let n = Cn[e];
|
|
void 0 === n && (n = new Int32Array(e), Cn[e] = n);
|
|
for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit();
|
|
return n
|
|
}
|
|
|
|
function zn(t, e) {
|
|
const n = this.cache;
|
|
n[0] !== e && (t.uniform1f(this.addr, e), n[0] = e)
|
|
}
|
|
|
|
function Un(t, e) {
|
|
const n = this.cache;
|
|
if (void 0 !== e.x) n[0] === e.x && n[1] === e.y || (t.uniform2f(this.addr, e.x, e.y), n[0] = e.x, n[1] = e.y);
|
|
else {
|
|
if (Nn(n, e)) return;
|
|
t.uniform2fv(this.addr, e), Bn(n, e)
|
|
}
|
|
}
|
|
|
|
function Hn(t, e) {
|
|
const n = this.cache;
|
|
if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z || (t.uniform3f(this.addr, e.x, e.y, e.z), n[0] = e.x, n[1] = e.y, n[2] = e.z);
|
|
else if (void 0 !== e.r) n[0] === e.r && n[1] === e.g && n[2] === e.b || (t.uniform3f(this.addr, e.r, e.g, e.b), n[0] = e.r, n[1] = e.g, n[2] = e.b);
|
|
else {
|
|
if (Nn(n, e)) return;
|
|
t.uniform3fv(this.addr, e), Bn(n, e)
|
|
}
|
|
}
|
|
|
|
function Gn(t, e) {
|
|
const n = this.cache;
|
|
if (void 0 !== e.x) n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w || (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), n[0] = e.x, n[1] = e.y, n[2] = e.z, n[3] = e.w);
|
|
else {
|
|
if (Nn(n, e)) return;
|
|
t.uniform4fv(this.addr, e), Bn(n, e)
|
|
}
|
|
}
|
|
|
|
function Vn(t, e) {
|
|
const n = this.cache,
|
|
i = e.elements;
|
|
if (void 0 === i) {
|
|
if (Nn(n, e)) return;
|
|
t.uniformMatrix2fv(this.addr, !1, e), Bn(n, e)
|
|
} else {
|
|
if (Nn(n, i)) return;
|
|
In.set(i), t.uniformMatrix2fv(this.addr, !1, In), Bn(n, i)
|
|
}
|
|
}
|
|
|
|
function kn(t, e) {
|
|
const n = this.cache,
|
|
i = e.elements;
|
|
if (void 0 === i) {
|
|
if (Nn(n, e)) return;
|
|
t.uniformMatrix3fv(this.addr, !1, e), Bn(n, e)
|
|
} else {
|
|
if (Nn(n, i)) return;
|
|
Dn.set(i), t.uniformMatrix3fv(this.addr, !1, Dn), Bn(n, i)
|
|
}
|
|
}
|
|
|
|
function Wn(t, e) {
|
|
const n = this.cache,
|
|
i = e.elements;
|
|
if (void 0 === i) {
|
|
if (Nn(n, e)) return;
|
|
t.uniformMatrix4fv(this.addr, !1, e), Bn(n, e)
|
|
} else {
|
|
if (Nn(n, i)) return;
|
|
Pn.set(i), t.uniformMatrix4fv(this.addr, !1, Pn), Bn(n, i)
|
|
}
|
|
}
|
|
|
|
function jn(t, e, n) {
|
|
const i = this.cache,
|
|
r = n.allocateTextureUnit();
|
|
i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTexture2D(e || En, r)
|
|
}
|
|
|
|
function Xn(t, e, n) {
|
|
const i = this.cache,
|
|
r = n.allocateTextureUnit();
|
|
i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture2DArray(e || Sn, r)
|
|
}
|
|
|
|
function qn(t, e, n) {
|
|
const i = this.cache,
|
|
r = n.allocateTextureUnit();
|
|
i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.setTexture3D(e || Tn, r)
|
|
}
|
|
|
|
function Yn(t, e, n) {
|
|
const i = this.cache,
|
|
r = n.allocateTextureUnit();
|
|
i[0] !== r && (t.uniform1i(this.addr, r), i[0] = r), n.safeSetTextureCube(e || Ln, r)
|
|
}
|
|
|
|
function Qn(t, e) {
|
|
const n = this.cache;
|
|
n[0] !== e && (t.uniform1i(this.addr, e), n[0] = e)
|
|
}
|
|
|
|
function Zn(t, e) {
|
|
const n = this.cache;
|
|
Nn(n, e) || (t.uniform2iv(this.addr, e), Bn(n, e))
|
|
}
|
|
|
|
function Jn(t, e) {
|
|
const n = this.cache;
|
|
Nn(n, e) || (t.uniform3iv(this.addr, e), Bn(n, e))
|
|
}
|
|
|
|
function Kn(t, e) {
|
|
const n = this.cache;
|
|
Nn(n, e) || (t.uniform4iv(this.addr, e), Bn(n, e))
|
|
}
|
|
|
|
function $n(t, e) {
|
|
const n = this.cache;
|
|
n[0] !== e && (t.uniform1ui(this.addr, e), n[0] = e)
|
|
}
|
|
|
|
function ti(t, e) {
|
|
t.uniform1fv(this.addr, e)
|
|
}
|
|
|
|
function ei(t, e) {
|
|
t.uniform1iv(this.addr, e)
|
|
}
|
|
|
|
function ni(t, e) {
|
|
t.uniform2iv(this.addr, e)
|
|
}
|
|
|
|
function ii(t, e) {
|
|
t.uniform3iv(this.addr, e)
|
|
}
|
|
|
|
function ri(t, e) {
|
|
t.uniform4iv(this.addr, e)
|
|
}
|
|
|
|
function oi(t, e) {
|
|
const n = On(e, this.size, 2);
|
|
t.uniform2fv(this.addr, n)
|
|
}
|
|
|
|
function si(t, e) {
|
|
const n = On(e, this.size, 3);
|
|
t.uniform3fv(this.addr, n)
|
|
}
|
|
|
|
function ai(t, e) {
|
|
const n = On(e, this.size, 4);
|
|
t.uniform4fv(this.addr, n)
|
|
}
|
|
|
|
function li(t, e) {
|
|
const n = On(e, this.size, 4);
|
|
t.uniformMatrix2fv(this.addr, !1, n)
|
|
}
|
|
|
|
function ci(t, e) {
|
|
const n = On(e, this.size, 9);
|
|
t.uniformMatrix3fv(this.addr, !1, n)
|
|
}
|
|
|
|
function hi(t, e) {
|
|
const n = On(e, this.size, 16);
|
|
t.uniformMatrix4fv(this.addr, !1, n)
|
|
}
|
|
|
|
function ui(t, e, n) {
|
|
const i = e.length,
|
|
r = Fn(n, i);
|
|
t.uniform1iv(this.addr, r);
|
|
for (let t = 0; t !== i; ++t) n.safeSetTexture2D(e[t] || En, r[t])
|
|
}
|
|
|
|
function di(t, e, n) {
|
|
const i = e.length,
|
|
r = Fn(n, i);
|
|
t.uniform1iv(this.addr, r);
|
|
for (let t = 0; t !== i; ++t) n.safeSetTextureCube(e[t] || Ln, r[t])
|
|
}
|
|
|
|
function pi(t, e, n) {
|
|
this.id = t, this.addr = n, this.cache = [], this.setValue = function(t) {
|
|
switch (t) {
|
|
case 5126:
|
|
return zn;
|
|
case 35664:
|
|
return Un;
|
|
case 35665:
|
|
return Hn;
|
|
case 35666:
|
|
return Gn;
|
|
case 35674:
|
|
return Vn;
|
|
case 35675:
|
|
return kn;
|
|
case 35676:
|
|
return Wn;
|
|
case 5124:
|
|
case 35670:
|
|
return Qn;
|
|
case 35667:
|
|
case 35671:
|
|
return Zn;
|
|
case 35668:
|
|
case 35672:
|
|
return Jn;
|
|
case 35669:
|
|
case 35673:
|
|
return Kn;
|
|
case 5125:
|
|
return $n;
|
|
case 35678:
|
|
case 36198:
|
|
case 36298:
|
|
case 36306:
|
|
case 35682:
|
|
return jn;
|
|
case 35679:
|
|
case 36299:
|
|
case 36307:
|
|
return qn;
|
|
case 35680:
|
|
case 36300:
|
|
case 36308:
|
|
case 36293:
|
|
return Yn;
|
|
case 36289:
|
|
case 36303:
|
|
case 36311:
|
|
case 36292:
|
|
return Xn
|
|
}
|
|
}(e.type)
|
|
}
|
|
|
|
function fi(t, e, n) {
|
|
this.id = t, this.addr = n, this.cache = [], this.size = e.size, this.setValue = function(t) {
|
|
switch (t) {
|
|
case 5126:
|
|
return ti;
|
|
case 35664:
|
|
return oi;
|
|
case 35665:
|
|
return si;
|
|
case 35666:
|
|
return ai;
|
|
case 35674:
|
|
return li;
|
|
case 35675:
|
|
return ci;
|
|
case 35676:
|
|
return hi;
|
|
case 5124:
|
|
case 35670:
|
|
return ei;
|
|
case 35667:
|
|
case 35671:
|
|
return ni;
|
|
case 35668:
|
|
case 35672:
|
|
return ii;
|
|
case 35669:
|
|
case 35673:
|
|
return ri;
|
|
case 35678:
|
|
case 36198:
|
|
case 36298:
|
|
case 36306:
|
|
case 35682:
|
|
return ui;
|
|
case 35680:
|
|
case 36300:
|
|
case 36308:
|
|
case 36293:
|
|
return di
|
|
}
|
|
}(e.type)
|
|
}
|
|
|
|
function mi(t) {
|
|
this.id = t, this.seq = [], this.map = {}
|
|
}
|
|
fi.prototype.updateCache = function(t) {
|
|
const e = this.cache;
|
|
t instanceof Float32Array && e.length !== t.length && (this.cache = new Float32Array(t.length)), Bn(e, t)
|
|
}, mi.prototype.setValue = function(t, e, n) {
|
|
const i = this.seq;
|
|
for (let r = 0, o = i.length; r !== o; ++r) {
|
|
const o = i[r];
|
|
o.setValue(t, e[o.id], n)
|
|
}
|
|
};
|
|
const gi = /(\w+)(\])?(\[|\.)?/g;
|
|
|
|
function vi(t, e) {
|
|
t.seq.push(e), t.map[e.id] = e
|
|
}
|
|
|
|
function yi(t, e, n) {
|
|
const i = t.name,
|
|
r = i.length;
|
|
for (gi.lastIndex = 0;;) {
|
|
const o = gi.exec(i),
|
|
s = gi.lastIndex;
|
|
let a = o[1];
|
|
const l = "]" === o[2],
|
|
c = o[3];
|
|
if (l && (a |= 0), void 0 === c || "[" === c && s + 2 === r) {
|
|
vi(n, void 0 === c ? new pi(a, t, e) : new fi(a, t, e));
|
|
break
|
|
} {
|
|
let t = n.map[a];
|
|
void 0 === t && (t = new mi(a), vi(n, t)), n = t
|
|
}
|
|
}
|
|
}
|
|
|
|
function Ai(t, e) {
|
|
this.seq = [], this.map = {};
|
|
const n = t.getProgramParameter(e, 35718);
|
|
for (let i = 0; i < n; ++i) {
|
|
const n = t.getActiveUniform(e, i);
|
|
yi(n, t.getUniformLocation(e, n.name), this)
|
|
}
|
|
}
|
|
|
|
function xi(t, e, n) {
|
|
const i = t.createShader(e);
|
|
return t.shaderSource(i, n), t.compileShader(i), i
|
|
}
|
|
Ai.prototype.setValue = function(t, e, n, i) {
|
|
const r = this.map[e];
|
|
void 0 !== r && r.setValue(t, n, i)
|
|
}, Ai.prototype.setOptional = function(t, e, n) {
|
|
const i = e[n];
|
|
void 0 !== i && this.setValue(t, n, i)
|
|
}, Ai.upload = function(t, e, n, i) {
|
|
for (let r = 0, o = e.length; r !== o; ++r) {
|
|
const o = e[r],
|
|
s = n[o.id];
|
|
!1 !== s.needsUpdate && o.setValue(t, s.value, i)
|
|
}
|
|
}, Ai.seqWithValue = function(t, e) {
|
|
const n = [];
|
|
for (let i = 0, r = t.length; i !== r; ++i) {
|
|
const r = t[i];
|
|
r.id in e && n.push(r)
|
|
}
|
|
return n
|
|
};
|
|
let _i = 0;
|
|
|
|
function bi(t) {
|
|
switch (t) {
|
|
case 3e3:
|
|
return ["Linear", "( value )"];
|
|
case 3001:
|
|
return ["sRGB", "( value )"];
|
|
case 3002:
|
|
return ["RGBE", "( value )"];
|
|
case 3004:
|
|
return ["RGBM", "( value, 7.0 )"];
|
|
case 3005:
|
|
return ["RGBM", "( value, 16.0 )"];
|
|
case 3006:
|
|
return ["RGBD", "( value, 256.0 )"];
|
|
case 3007:
|
|
return ["Gamma", "( value, float( GAMMA_FACTOR ) )"];
|
|
case 3003:
|
|
return ["LogLuv", "( value )"];
|
|
default:
|
|
return console.warn("THREE.WebGLProgram: Unsupported encoding:", t), ["Linear", "( value )"]
|
|
}
|
|
}
|
|
|
|
function wi(t, e, n) {
|
|
const i = t.getShaderParameter(e, 35713),
|
|
r = t.getShaderInfoLog(e).trim();
|
|
if (i && "" === r) return "";
|
|
return "THREE.WebGLShader: gl.getShaderInfoLog() " + n + "\n" + r + function(t) {
|
|
const e = t.split("\n");
|
|
for (let t = 0; t < e.length; t++) e[t] = t + 1 + ": " + e[t];
|
|
return e.join("\n")
|
|
}(t.getShaderSource(e))
|
|
}
|
|
|
|
function Mi(t, e) {
|
|
const n = bi(e);
|
|
return "vec4 " + t + "( vec4 value ) { return " + n[0] + "ToLinear" + n[1] + "; }"
|
|
}
|
|
|
|
function Ei(t, e) {
|
|
const n = bi(e);
|
|
return "vec4 " + t + "( vec4 value ) { return LinearTo" + n[0] + n[1] + "; }"
|
|
}
|
|
|
|
function Si(t, e) {
|
|
let n;
|
|
switch (e) {
|
|
case 1:
|
|
n = "Linear";
|
|
break;
|
|
case 2:
|
|
n = "Reinhard";
|
|
break;
|
|
case 3:
|
|
n = "OptimizedCineon";
|
|
break;
|
|
case 4:
|
|
n = "ACESFilmic";
|
|
break;
|
|
case 5:
|
|
n = "Custom";
|
|
break;
|
|
default:
|
|
console.warn("THREE.WebGLProgram: Unsupported toneMapping:", e), n = "Linear"
|
|
}
|
|
return "vec3 " + t + "( vec3 color ) { return " + n + "ToneMapping( color ); }"
|
|
}
|
|
|
|
function Ti(t) {
|
|
return "" !== t
|
|
}
|
|
|
|
function Li(t, e) {
|
|
return t.replace(/NUM_DIR_LIGHTS/g, e.numDirLights).replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, e.numPointLights).replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows)
|
|
}
|
|
|
|
function Ri(t, e) {
|
|
return t.replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection)
|
|
}
|
|
const Ci = /^[ \t]*#include +<([\w\d./]+)>/gm;
|
|
|
|
function Pi(t) {
|
|
return t.replace(Ci, Di)
|
|
}
|
|
|
|
function Di(t, e) {
|
|
const n = sn[e];
|
|
if (void 0 === n) throw new Error("Can not resolve #include <" + e + ">");
|
|
return Pi(n)
|
|
}
|
|
const Ii = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,
|
|
Oi = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
|
|
|
|
function Ni(t) {
|
|
return t.replace(Oi, Fi).replace(Ii, Bi)
|
|
}
|
|
|
|
function Bi(t, e, n, i) {
|
|
return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."), Fi(t, e, n, i)
|
|
}
|
|
|
|
function Fi(t, e, n, i) {
|
|
let r = "";
|
|
for (let t = parseInt(e); t < parseInt(n); t++) r += i.replace(/\[\s*i\s*\]/g, "[ " + t + " ]").replace(/UNROLLED_LOOP_INDEX/g, t);
|
|
return r
|
|
}
|
|
|
|
function zi(t) {
|
|
let e = "precision " + t.precision + " float;\nprecision " + t.precision + " int;";
|
|
return "highp" === t.precision ? e += "\n#define HIGH_PRECISION" : "mediump" === t.precision ? e += "\n#define MEDIUM_PRECISION" : "lowp" === t.precision && (e += "\n#define LOW_PRECISION"), e
|
|
}
|
|
|
|
function Ui(t, e, n, i) {
|
|
const r = t.getContext(),
|
|
o = n.defines;
|
|
let s = n.vertexShader,
|
|
a = n.fragmentShader;
|
|
const l = function(t) {
|
|
let e = "SHADOWMAP_TYPE_BASIC";
|
|
return 1 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF" : 2 === t.shadowMapType ? e = "SHADOWMAP_TYPE_PCF_SOFT" : 3 === t.shadowMapType && (e = "SHADOWMAP_TYPE_VSM"), e
|
|
}(n),
|
|
c = function(t) {
|
|
let e = "ENVMAP_TYPE_CUBE";
|
|
if (t.envMap) switch (t.envMapMode) {
|
|
case 301:
|
|
case 302:
|
|
e = "ENVMAP_TYPE_CUBE";
|
|
break;
|
|
case 306:
|
|
case 307:
|
|
e = "ENVMAP_TYPE_CUBE_UV"
|
|
}
|
|
return e
|
|
}(n),
|
|
h = function(t) {
|
|
let e = "ENVMAP_MODE_REFLECTION";
|
|
if (t.envMap) switch (t.envMapMode) {
|
|
case 302:
|
|
case 307:
|
|
e = "ENVMAP_MODE_REFRACTION"
|
|
}
|
|
return e
|
|
}(n),
|
|
u = function(t) {
|
|
let e = "ENVMAP_BLENDING_NONE";
|
|
if (t.envMap) switch (t.combine) {
|
|
case 0:
|
|
e = "ENVMAP_BLENDING_MULTIPLY";
|
|
break;
|
|
case 1:
|
|
e = "ENVMAP_BLENDING_MIX";
|
|
break;
|
|
case 2:
|
|
e = "ENVMAP_BLENDING_ADD"
|
|
}
|
|
return e
|
|
}(n),
|
|
d = t.gammaFactor > 0 ? t.gammaFactor : 1,
|
|
p = n.isWebGL2 ? "" : function(t) {
|
|
return [t.extensionDerivatives || t.envMapCubeUV || t.bumpMap || t.tangentSpaceNormalMap || t.clearcoatNormalMap || t.flatShading || "physical" === t.shaderID ? "#extension GL_OES_standard_derivatives : enable" : "", (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth ? "#extension GL_EXT_frag_depth : enable" : "", t.extensionDrawBuffers && t.rendererExtensionDrawBuffers ? "#extension GL_EXT_draw_buffers : require" : "", (t.extensionShaderTextureLOD || t.envMap) && t.rendererExtensionShaderTextureLod ? "#extension GL_EXT_shader_texture_lod : enable" : ""].filter(Ti).join("\n")
|
|
}(n),
|
|
f = function(t) {
|
|
const e = [];
|
|
for (const n in t) {
|
|
const i = t[n];
|
|
!1 !== i && e.push("#define " + n + " " + i)
|
|
}
|
|
return e.join("\n")
|
|
}(o),
|
|
m = r.createProgram();
|
|
let g, v, y = n.glslVersion ? "#version " + n.glslVersion + "\n" : "";
|
|
n.isRawShaderMaterial ? (g = [f].filter(Ti).join("\n"), g.length > 0 && (g += "\n"), v = [p, f].filter(Ti).join("\n"), v.length > 0 && (v += "\n")) : (g = [zi(n), "#define SHADER_NAME " + n.shaderName, f, n.instancing ? "#define USE_INSTANCING" : "", n.instancingColor ? "#define USE_INSTANCING_COLOR" : "", n.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", "#define GAMMA_FACTOR " + d, "#define MAX_BONES " + n.maxBones, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + h : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.displacementMap && n.supportsVertexTextures ? "#define USE_DISPLACEMENTMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.skinning ? "#define USE_SKINNING" : "", n.useVertexTexture ? "#define BONE_TEXTURE" : "", n.morphTargets ? "#define USE_MORPHTARGETS" : "", n.morphNormals && !1 === n.flatShading ? "#define USE_MORPHNORMALS" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", "uniform mat4 modelMatrix;", "uniform mat4 modelViewMatrix;", "uniform mat4 projectionMatrix;", "uniform mat4 viewMatrix;", "uniform mat3 normalMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", "#ifdef USE_INSTANCING", "\tattribute mat4 instanceMatrix;", "#endif", "#ifdef USE_INSTANCING_COLOR", "\tattribute vec3 instanceColor;", "#endif", "attribute vec3 position;", "attribute vec3 normal;", "attribute vec2 uv;", "#ifdef USE_TANGENT", "\tattribute vec4 tangent;", "#endif", "#ifdef USE_COLOR", "\tattribute vec3 color;", "#endif", "#ifdef USE_MORPHTARGETS", "\tattribute vec3 morphTarget0;", "\tattribute vec3 morphTarget1;", "\tattribute vec3 morphTarget2;", "\tattribute vec3 morphTarget3;", "\t#ifdef USE_MORPHNORMALS", "\t\tattribute vec3 morphNormal0;", "\t\tattribute vec3 morphNormal1;", "\t\tattribute vec3 morphNormal2;", "\t\tattribute vec3 morphNormal3;", "\t#else", "\t\tattribute vec3 morphTarget4;", "\t\tattribute vec3 morphTarget5;", "\t\tattribute vec3 morphTarget6;", "\t\tattribute vec3 morphTarget7;", "\t#endif", "#endif", "#ifdef USE_SKINNING", "\tattribute vec4 skinIndex;", "\tattribute vec4 skinWeight;", "#endif", "\n"].filter(Ti).join("\n"), v = [p, zi(n), "#define SHADER_NAME " + n.shaderName, f, n.alphaTest ? "#define ALPHATEST " + n.alphaTest + (n.alphaTest % 1 ? "" : ".0") : "", "#define GAMMA_FACTOR " + d, n.useFog && n.fog ? "#define USE_FOG" : "", n.useFog && n.fogExp2 ? "#define FOG_EXP2" : "", n.map ? "#define USE_MAP" : "", n.matcap ? "#define USE_MATCAP" : "", n.envMap ? "#define USE_ENVMAP" : "", n.envMap ? "#define " + c : "", n.envMap ? "#define " + h : "", n.envMap ? "#define " + u : "", n.lightMap ? "#define USE_LIGHTMAP" : "", n.aoMap ? "#define USE_AOMAP" : "", n.emissiveMap ? "#define USE_EMISSIVEMAP" : "", n.bumpMap ? "#define USE_BUMPMAP" : "", n.normalMap ? "#define USE_NORMALMAP" : "", n.normalMap && n.objectSpaceNormalMap ? "#define OBJECTSPACE_NORMALMAP" : "", n.normalMap && n.tangentSpaceNormalMap ? "#define TANGENTSPACE_NORMALMAP" : "", n.clearcoatMap ? "#define USE_CLEARCOATMAP" : "", n.clearcoatRoughnessMap ? "#define USE_CLEARCOAT_ROUGHNESSMAP" : "", n.clearcoatNormalMap ? "#define USE_CLEARCOAT_NORMALMAP" : "", n.specularMap ? "#define USE_SPECULARMAP" : "", n.roughnessMap ? "#define USE_ROUGHNESSMAP" : "", n.metalnessMap ? "#define USE_METALNESSMAP" : "", n.alphaMap ? "#define USE_ALPHAMAP" : "", n.sheen ? "#define USE_SHEEN" : "", n.transmissionMap ? "#define USE_TRANSMISSIONMAP" : "", n.vertexTangents ? "#define USE_TANGENT" : "", n.vertexColors || n.instancingColor ? "#define USE_COLOR" : "", n.vertexUvs ? "#define USE_UV" : "", n.uvsVertexOnly ? "#define UVS_VERTEX_ONLY" : "", n.gradientMap ? "#define USE_GRADIENTMAP" : "", n.flatShading ? "#define FLAT_SHADED" : "", n.doubleSided ? "#define DOUBLE_SIDED" : "", n.flipSided ? "#define FLIP_SIDED" : "", n.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", n.shadowMapEnabled ? "#define " + l : "", n.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : "", n.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : "", n.logarithmicDepthBuffer ? "#define USE_LOGDEPTHBUF" : "", n.logarithmicDepthBuffer && n.rendererExtensionFragDepth ? "#define USE_LOGDEPTHBUF_EXT" : "", (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod ? "#define TEXTURE_LOD_EXT" : "", "uniform mat4 viewMatrix;", "uniform vec3 cameraPosition;", "uniform bool isOrthographic;", 0 !== n.toneMapping ? "#define TONE_MAPPING" : "", 0 !== n.toneMapping ? sn.tonemapping_pars_fragment : "", 0 !== n.toneMapping ? Si("toneMapping", n.toneMapping) : "", n.dithering ? "#define DITHERING" : "", sn.encodings_pars_fragment, n.map ? Mi("mapTexelToLinear", n.mapEncoding) : "", n.matcap ? Mi("matcapTexelToLinear", n.matcapEncoding) : "", n.envMap ? Mi("envMapTexelToLinear", n.envMapEncoding) : "", n.emissiveMap ? Mi("emissiveMapTexelToLinear", n.emissiveMapEncoding) : "", n.lightMap ? Mi("lightMapTexelToLinear", n.lightMapEncoding) : "", Ei("linearToOutputTexel", n.outputEncoding), n.depthPacking ? "#define DEPTH_PACKING " + n.depthPacking : "", "\n"].filter(Ti).join("\n")), s = Pi(s), s = Li(s, n), s = Ri(s, n), a = Pi(a), a = Li(a, n), a = Ri(a, n), s = Ni(s), a = Ni(a), n.isWebGL2 && !0 !== n.isRawShaderMaterial && (y = "#version 300 es\n", g = ["#define attribute in", "#define varying out", "#define texture2D texture"].join("\n") + "\n" + g, v = ["#define varying in", "300 es" === n.glslVersion ? "" : "out highp vec4 pc_fragColor;", "300 es" === n.glslVersion ? "" : "#define gl_FragColor pc_fragColor", "#define gl_FragDepthEXT gl_FragDepth", "#define texture2D texture", "#define textureCube texture", "#define texture2DProj textureProj", "#define texture2DLodEXT textureLod", "#define texture2DProjLodEXT textureProjLod", "#define textureCubeLodEXT textureLod", "#define texture2DGradEXT textureGrad", "#define texture2DProjGradEXT textureProjGrad", "#define textureCubeGradEXT textureGrad"].join("\n") + "\n" + v);
|
|
const A = y + v + a,
|
|
x = xi(r, 35633, y + g + s),
|
|
_ = xi(r, 35632, A);
|
|
if (r.attachShader(m, x), r.attachShader(m, _), void 0 !== n.index0AttributeName ? r.bindAttribLocation(m, 0, n.index0AttributeName) : !0 === n.morphTargets && r.bindAttribLocation(m, 0, "position"), r.linkProgram(m), t.debug.checkShaderErrors) {
|
|
const t = r.getProgramInfoLog(m).trim(),
|
|
e = r.getShaderInfoLog(x).trim(),
|
|
n = r.getShaderInfoLog(_).trim();
|
|
let i = !0,
|
|
o = !0;
|
|
if (!1 === r.getProgramParameter(m, 35714)) {
|
|
i = !1;
|
|
const e = wi(r, x, "vertex"),
|
|
n = wi(r, _, "fragment");
|
|
console.error("THREE.WebGLProgram: shader error: ", r.getError(), "35715", r.getProgramParameter(m, 35715), "gl.getProgramInfoLog", t, e, n)
|
|
} else "" !== t ? console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()", t) : "" !== e && "" !== n || (o = !1);
|
|
o && (this.diagnostics = {
|
|
runnable: i,
|
|
programLog: t,
|
|
vertexShader: {
|
|
log: e,
|
|
prefix: g
|
|
},
|
|
fragmentShader: {
|
|
log: n,
|
|
prefix: v
|
|
}
|
|
})
|
|
}
|
|
let b, w;
|
|
return r.deleteShader(x), r.deleteShader(_), this.getUniforms = function() {
|
|
return void 0 === b && (b = new Ai(r, m)), b
|
|
}, this.getAttributes = function() {
|
|
return void 0 === w && (w = function(t, e) {
|
|
const n = {},
|
|
i = t.getProgramParameter(e, 35721);
|
|
for (let r = 0; r < i; r++) {
|
|
const i = t.getActiveAttrib(e, r).name;
|
|
n[i] = t.getAttribLocation(e, i)
|
|
}
|
|
return n
|
|
}(r, m)), w
|
|
}, this.destroy = function() {
|
|
i.releaseStatesOfProgram(this), r.deleteProgram(m), this.program = void 0
|
|
}, this.name = n.shaderName, this.id = _i++, this.cacheKey = e, this.usedTimes = 1, this.program = m, this.vertexShader = x, this.fragmentShader = _, this
|
|
}
|
|
|
|
function Hi(t, e, n, i, r, o) {
|
|
const s = [],
|
|
a = i.isWebGL2,
|
|
l = i.logarithmicDepthBuffer,
|
|
c = i.floatVertexTextures,
|
|
h = i.maxVertexUniforms,
|
|
u = i.vertexTextures;
|
|
let d = i.precision;
|
|
const p = {
|
|
MeshDepthMaterial: "depth",
|
|
MeshDistanceMaterial: "distanceRGBA",
|
|
MeshNormalMaterial: "normal",
|
|
MeshBasicMaterial: "basic",
|
|
MeshLambertMaterial: "lambert",
|
|
MeshPhongMaterial: "phong",
|
|
MeshToonMaterial: "toon",
|
|
MeshStandardMaterial: "physical",
|
|
MeshPhysicalMaterial: "physical",
|
|
MeshMatcapMaterial: "matcap",
|
|
LineBasicMaterial: "basic",
|
|
LineDashedMaterial: "dashed",
|
|
PointsMaterial: "points",
|
|
ShadowMaterial: "shadow",
|
|
SpriteMaterial: "sprite"
|
|
},
|
|
f = ["precision", "isWebGL2", "supportsVertexTextures", "outputEncoding", "instancing", "instancingColor", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding", "envMapCubeUV", "lightMap", "lightMapEncoding", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatMap", "clearcoatRoughnessMap", "clearcoatNormalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "gradientMap", "alphaMap", "combine", "vertexColors", "vertexTangents", "vertexUvs", "uvsVertexOnly", "fog", "useFog", "fogExp2", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", "maxBones", "useVertexTexture", "morphTargets", "morphNormals", "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", "numDirLightShadows", "numPointLightShadows", "numSpotLightShadows", "shadowMapEnabled", "shadowMapType", "toneMapping", "physicallyCorrectLights", "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering", "sheen", "transmissionMap"];
|
|
|
|
function m(t) {
|
|
let e;
|
|
return t && t.isTexture ? e = t.encoding : t && t.isWebGLRenderTarget ? (console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."), e = t.texture.encoding) : e = 3e3, e
|
|
}
|
|
return {
|
|
getParameters: function(r, s, f, g, v) {
|
|
const y = g.fog,
|
|
A = r.isMeshStandardMaterial ? g.environment : null,
|
|
x = e.get(r.envMap || A),
|
|
_ = p[r.type],
|
|
b = v.isSkinnedMesh ? function(t) {
|
|
const e = t.skeleton.bones;
|
|
if (c) return 1024; {
|
|
const t = h,
|
|
n = Math.floor((t - 20) / 4),
|
|
i = Math.min(n, e.length);
|
|
return i < e.length ? (console.warn("THREE.WebGLRenderer: Skeleton has " + e.length + " bones. This GPU supports " + i + "."), 0) : i
|
|
}
|
|
}(v) : 0;
|
|
let w, M;
|
|
if (null !== r.precision && (d = i.getMaxPrecision(r.precision), d !== r.precision && console.warn("THREE.WebGLProgram.getParameters:", r.precision, "not supported, using", d, "instead.")), _) {
|
|
const t = ln[_];
|
|
w = t.vertexShader, M = t.fragmentShader
|
|
} else w = r.vertexShader, M = r.fragmentShader;
|
|
const E = t.getRenderTarget();
|
|
return {
|
|
isWebGL2: a,
|
|
shaderID: _,
|
|
shaderName: r.type,
|
|
vertexShader: w,
|
|
fragmentShader: M,
|
|
defines: r.defines,
|
|
isRawShaderMaterial: !0 === r.isRawShaderMaterial,
|
|
glslVersion: r.glslVersion,
|
|
precision: d,
|
|
instancing: !0 === v.isInstancedMesh,
|
|
instancingColor: !0 === v.isInstancedMesh && null !== v.instanceColor,
|
|
supportsVertexTextures: u,
|
|
outputEncoding: null !== E ? m(E.texture) : t.outputEncoding,
|
|
map: !!r.map,
|
|
mapEncoding: m(r.map),
|
|
matcap: !!r.matcap,
|
|
matcapEncoding: m(r.matcap),
|
|
envMap: !!x,
|
|
envMapMode: x && x.mapping,
|
|
envMapEncoding: m(x),
|
|
envMapCubeUV: !!x && (306 === x.mapping || 307 === x.mapping),
|
|
lightMap: !!r.lightMap,
|
|
lightMapEncoding: m(r.lightMap),
|
|
aoMap: !!r.aoMap,
|
|
emissiveMap: !!r.emissiveMap,
|
|
emissiveMapEncoding: m(r.emissiveMap),
|
|
bumpMap: !!r.bumpMap,
|
|
normalMap: !!r.normalMap,
|
|
objectSpaceNormalMap: 1 === r.normalMapType,
|
|
tangentSpaceNormalMap: 0 === r.normalMapType,
|
|
clearcoatMap: !!r.clearcoatMap,
|
|
clearcoatRoughnessMap: !!r.clearcoatRoughnessMap,
|
|
clearcoatNormalMap: !!r.clearcoatNormalMap,
|
|
displacementMap: !!r.displacementMap,
|
|
roughnessMap: !!r.roughnessMap,
|
|
metalnessMap: !!r.metalnessMap,
|
|
specularMap: !!r.specularMap,
|
|
alphaMap: !!r.alphaMap,
|
|
gradientMap: !!r.gradientMap,
|
|
sheen: !!r.sheen,
|
|
transmissionMap: !!r.transmissionMap,
|
|
combine: r.combine,
|
|
vertexTangents: r.normalMap && r.vertexTangents,
|
|
vertexColors: r.vertexColors,
|
|
vertexUvs: !!(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatMap || r.clearcoatRoughnessMap || r.clearcoatNormalMap || r.displacementMap || r.transmissionMap),
|
|
uvsVertexOnly: !(r.map || r.bumpMap || r.normalMap || r.specularMap || r.alphaMap || r.emissiveMap || r.roughnessMap || r.metalnessMap || r.clearcoatNormalMap || r.transmissionMap || !r.displacementMap),
|
|
fog: !!y,
|
|
useFog: r.fog,
|
|
fogExp2: y && y.isFogExp2,
|
|
flatShading: r.flatShading,
|
|
sizeAttenuation: r.sizeAttenuation,
|
|
logarithmicDepthBuffer: l,
|
|
skinning: r.skinning && b > 0,
|
|
maxBones: b,
|
|
useVertexTexture: c,
|
|
morphTargets: r.morphTargets,
|
|
morphNormals: r.morphNormals,
|
|
maxMorphTargets: t.maxMorphTargets,
|
|
maxMorphNormals: t.maxMorphNormals,
|
|
numDirLights: s.directional.length,
|
|
numPointLights: s.point.length,
|
|
numSpotLights: s.spot.length,
|
|
numRectAreaLights: s.rectArea.length,
|
|
numHemiLights: s.hemi.length,
|
|
numDirLightShadows: s.directionalShadowMap.length,
|
|
numPointLightShadows: s.pointShadowMap.length,
|
|
numSpotLightShadows: s.spotShadowMap.length,
|
|
numClippingPlanes: o.numPlanes,
|
|
numClipIntersection: o.numIntersection,
|
|
dithering: r.dithering,
|
|
shadowMapEnabled: t.shadowMap.enabled && f.length > 0,
|
|
shadowMapType: t.shadowMap.type,
|
|
toneMapping: r.toneMapped ? t.toneMapping : 0,
|
|
physicallyCorrectLights: t.physicallyCorrectLights,
|
|
premultipliedAlpha: r.premultipliedAlpha,
|
|
alphaTest: r.alphaTest,
|
|
doubleSided: 2 === r.side,
|
|
flipSided: 1 === r.side,
|
|
depthPacking: void 0 !== r.depthPacking && r.depthPacking,
|
|
index0AttributeName: r.index0AttributeName,
|
|
extensionDerivatives: r.extensions && r.extensions.derivatives,
|
|
extensionFragDepth: r.extensions && r.extensions.fragDepth,
|
|
extensionDrawBuffers: r.extensions && r.extensions.drawBuffers,
|
|
extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD,
|
|
rendererExtensionFragDepth: a || n.has("EXT_frag_depth"),
|
|
rendererExtensionDrawBuffers: a || n.has("WEBGL_draw_buffers"),
|
|
rendererExtensionShaderTextureLod: a || n.has("EXT_shader_texture_lod"),
|
|
customProgramCacheKey: r.customProgramCacheKey()
|
|
}
|
|
},
|
|
getProgramCacheKey: function(e) {
|
|
const n = [];
|
|
if (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), void 0 !== e.defines)
|
|
for (const t in e.defines) n.push(t), n.push(e.defines[t]);
|
|
if (!1 === e.isRawShaderMaterial) {
|
|
for (let t = 0; t < f.length; t++) n.push(e[f[t]]);
|
|
n.push(t.outputEncoding), n.push(t.gammaFactor)
|
|
}
|
|
return n.push(e.customProgramCacheKey), n.join()
|
|
},
|
|
getUniforms: function(t) {
|
|
const e = p[t.type];
|
|
let n;
|
|
if (e) {
|
|
const t = ln[e];
|
|
n = je.clone(t.uniforms)
|
|
} else n = t.uniforms;
|
|
return n
|
|
},
|
|
acquireProgram: function(e, n) {
|
|
let i;
|
|
for (let t = 0, e = s.length; t < e; t++) {
|
|
const e = s[t];
|
|
if (e.cacheKey === n) {
|
|
i = e, ++i.usedTimes;
|
|
break
|
|
}
|
|
}
|
|
return void 0 === i && (i = new Ui(t, n, e, r), s.push(i)), i
|
|
},
|
|
releaseProgram: function(t) {
|
|
if (0 == --t.usedTimes) {
|
|
const e = s.indexOf(t);
|
|
s[e] = s[s.length - 1], s.pop(), t.destroy()
|
|
}
|
|
},
|
|
programs: s
|
|
}
|
|
}
|
|
|
|
function Gi() {
|
|
let t = new WeakMap;
|
|
return {
|
|
get: function(e) {
|
|
let n = t.get(e);
|
|
return void 0 === n && (n = {}, t.set(e, n)), n
|
|
},
|
|
remove: function(e) {
|
|
t.delete(e)
|
|
},
|
|
update: function(e, n, i) {
|
|
t.get(e)[n] = i
|
|
},
|
|
dispose: function() {
|
|
t = new WeakMap
|
|
}
|
|
}
|
|
}
|
|
|
|
function Vi(t, e) {
|
|
return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.program !== e.program ? t.program.id - e.program.id : t.material.id !== e.material.id ? t.material.id - e.material.id : t.z !== e.z ? t.z - e.z : t.id - e.id
|
|
}
|
|
|
|
function ki(t, e) {
|
|
return t.groupOrder !== e.groupOrder ? t.groupOrder - e.groupOrder : t.renderOrder !== e.renderOrder ? t.renderOrder - e.renderOrder : t.z !== e.z ? e.z - t.z : t.id - e.id
|
|
}
|
|
|
|
function Wi(t) {
|
|
const e = [];
|
|
let n = 0;
|
|
const i = [],
|
|
r = [],
|
|
o = {
|
|
id: -1
|
|
};
|
|
|
|
function s(i, r, s, a, l, c) {
|
|
let h = e[n];
|
|
const u = t.get(s);
|
|
return void 0 === h ? (h = {
|
|
id: i.id,
|
|
object: i,
|
|
geometry: r,
|
|
material: s,
|
|
program: u.program || o,
|
|
groupOrder: a,
|
|
renderOrder: i.renderOrder,
|
|
z: l,
|
|
group: c
|
|
}, e[n] = h) : (h.id = i.id, h.object = i, h.geometry = r, h.material = s, h.program = u.program || o, h.groupOrder = a, h.renderOrder = i.renderOrder, h.z = l, h.group = c), n++, h
|
|
}
|
|
return {
|
|
opaque: i,
|
|
transparent: r,
|
|
init: function() {
|
|
n = 0, i.length = 0, r.length = 0
|
|
},
|
|
push: function(t, e, n, o, a, l) {
|
|
const c = s(t, e, n, o, a, l);
|
|
(!0 === n.transparent ? r : i).push(c)
|
|
},
|
|
unshift: function(t, e, n, o, a, l) {
|
|
const c = s(t, e, n, o, a, l);
|
|
(!0 === n.transparent ? r : i).unshift(c)
|
|
},
|
|
finish: function() {
|
|
for (let t = n, i = e.length; t < i; t++) {
|
|
const n = e[t];
|
|
if (null === n.id) break;
|
|
n.id = null, n.object = null, n.geometry = null, n.material = null, n.program = null, n.group = null
|
|
}
|
|
},
|
|
sort: function(t, e) {
|
|
i.length > 1 && i.sort(t || Vi), r.length > 1 && r.sort(e || ki)
|
|
}
|
|
}
|
|
}
|
|
|
|
function ji(t) {
|
|
let e = new WeakMap;
|
|
return {
|
|
get: function(n, i) {
|
|
const r = e.get(n);
|
|
let o;
|
|
return void 0 === r ? (o = new Wi(t), e.set(n, new WeakMap), e.get(n).set(i, o)) : (o = r.get(i), void 0 === o && (o = new Wi(t), r.set(i, o))), o
|
|
},
|
|
dispose: function() {
|
|
e = new WeakMap
|
|
}
|
|
}
|
|
}
|
|
|
|
function Xi() {
|
|
const t = {};
|
|
return {
|
|
get: function(e) {
|
|
if (void 0 !== t[e.id]) return t[e.id];
|
|
let n;
|
|
switch (e.type) {
|
|
case "DirectionalLight":
|
|
n = {
|
|
direction: new T,
|
|
color: new Yt
|
|
};
|
|
break;
|
|
case "SpotLight":
|
|
n = {
|
|
position: new T,
|
|
direction: new T,
|
|
color: new Yt,
|
|
distance: 0,
|
|
coneCos: 0,
|
|
penumbraCos: 0,
|
|
decay: 0
|
|
};
|
|
break;
|
|
case "PointLight":
|
|
n = {
|
|
position: new T,
|
|
color: new Yt,
|
|
distance: 0,
|
|
decay: 0
|
|
};
|
|
break;
|
|
case "HemisphereLight":
|
|
n = {
|
|
direction: new T,
|
|
skyColor: new Yt,
|
|
groundColor: new Yt
|
|
};
|
|
break;
|
|
case "RectAreaLight":
|
|
n = {
|
|
color: new Yt,
|
|
position: new T,
|
|
halfWidth: new T,
|
|
halfHeight: new T
|
|
}
|
|
}
|
|
return t[e.id] = n, n
|
|
}
|
|
}
|
|
}
|
|
let qi = 0;
|
|
|
|
function Yi(t, e) {
|
|
return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0)
|
|
}
|
|
|
|
function Qi(t, e) {
|
|
const n = new Xi,
|
|
i = function() {
|
|
const t = {};
|
|
return {
|
|
get: function(e) {
|
|
if (void 0 !== t[e.id]) return t[e.id];
|
|
let n;
|
|
switch (e.type) {
|
|
case "DirectionalLight":
|
|
case "SpotLight":
|
|
n = {
|
|
shadowBias: 0,
|
|
shadowNormalBias: 0,
|
|
shadowRadius: 1,
|
|
shadowMapSize: new v
|
|
};
|
|
break;
|
|
case "PointLight":
|
|
n = {
|
|
shadowBias: 0,
|
|
shadowNormalBias: 0,
|
|
shadowRadius: 1,
|
|
shadowMapSize: new v,
|
|
shadowCameraNear: 1,
|
|
shadowCameraFar: 1e3
|
|
}
|
|
}
|
|
return t[e.id] = n, n
|
|
}
|
|
}
|
|
}(),
|
|
r = {
|
|
version: 0,
|
|
hash: {
|
|
directionalLength: -1,
|
|
pointLength: -1,
|
|
spotLength: -1,
|
|
rectAreaLength: -1,
|
|
hemiLength: -1,
|
|
numDirectionalShadows: -1,
|
|
numPointShadows: -1,
|
|
numSpotShadows: -1
|
|
},
|
|
ambient: [0, 0, 0],
|
|
probe: [],
|
|
directional: [],
|
|
directionalShadow: [],
|
|
directionalShadowMap: [],
|
|
directionalShadowMatrix: [],
|
|
spot: [],
|
|
spotShadow: [],
|
|
spotShadowMap: [],
|
|
spotShadowMatrix: [],
|
|
rectArea: [],
|
|
rectAreaLTC1: null,
|
|
rectAreaLTC2: null,
|
|
point: [],
|
|
pointShadow: [],
|
|
pointShadowMap: [],
|
|
pointShadowMatrix: [],
|
|
hemi: []
|
|
};
|
|
for (let t = 0; t < 9; t++) r.probe.push(new T);
|
|
const o = new T,
|
|
s = new et,
|
|
a = new et;
|
|
return {
|
|
setup: function(o) {
|
|
let s = 0,
|
|
a = 0,
|
|
l = 0;
|
|
for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0);
|
|
let c = 0,
|
|
h = 0,
|
|
u = 0,
|
|
d = 0,
|
|
p = 0,
|
|
f = 0,
|
|
m = 0,
|
|
g = 0;
|
|
o.sort(Yi);
|
|
for (let t = 0, e = o.length; t < e; t++) {
|
|
const e = o[t],
|
|
v = e.color,
|
|
y = e.intensity,
|
|
A = e.distance,
|
|
x = e.shadow && e.shadow.map ? e.shadow.map.texture : null;
|
|
if (e.isAmbientLight) s += v.r * y, a += v.g * y, l += v.b * y;
|
|
else if (e.isLightProbe)
|
|
for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y);
|
|
else if (e.isDirectionalLight) {
|
|
const t = n.get(e);
|
|
if (t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow) {
|
|
const t = e.shadow,
|
|
n = i.get(e);
|
|
n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.directionalShadow[c] = n, r.directionalShadowMap[c] = x, r.directionalShadowMatrix[c] = e.shadow.matrix, f++
|
|
}
|
|
r.directional[c] = t, c++
|
|
} else if (e.isSpotLight) {
|
|
const t = n.get(e);
|
|
if (t.position.setFromMatrixPosition(e.matrixWorld), t.color.copy(v).multiplyScalar(y), t.distance = A, t.coneCos = Math.cos(e.angle), t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra)), t.decay = e.decay, e.castShadow) {
|
|
const t = e.shadow,
|
|
n = i.get(e);
|
|
n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, r.spotShadow[u] = n, r.spotShadowMap[u] = x, r.spotShadowMatrix[u] = e.shadow.matrix, g++
|
|
}
|
|
r.spot[u] = t, u++
|
|
} else if (e.isRectAreaLight) {
|
|
const t = n.get(e);
|
|
t.color.copy(v).multiplyScalar(y), t.halfWidth.set(.5 * e.width, 0, 0), t.halfHeight.set(0, .5 * e.height, 0), r.rectArea[d] = t, d++
|
|
} else if (e.isPointLight) {
|
|
const t = n.get(e);
|
|
if (t.color.copy(e.color).multiplyScalar(e.intensity), t.distance = e.distance, t.decay = e.decay, e.castShadow) {
|
|
const t = e.shadow,
|
|
n = i.get(e);
|
|
n.shadowBias = t.bias, n.shadowNormalBias = t.normalBias, n.shadowRadius = t.radius, n.shadowMapSize = t.mapSize, n.shadowCameraNear = t.camera.near, n.shadowCameraFar = t.camera.far, r.pointShadow[h] = n, r.pointShadowMap[h] = x, r.pointShadowMatrix[h] = e.shadow.matrix, m++
|
|
}
|
|
r.point[h] = t, h++
|
|
} else if (e.isHemisphereLight) {
|
|
const t = n.get(e);
|
|
t.skyColor.copy(e.color).multiplyScalar(y), t.groundColor.copy(e.groundColor).multiplyScalar(y), r.hemi[p] = t, p++
|
|
}
|
|
}
|
|
d > 0 && (e.isWebGL2 || !0 === t.has("OES_texture_float_linear") ? (r.rectAreaLTC1 = an.LTC_FLOAT_1, r.rectAreaLTC2 = an.LTC_FLOAT_2) : !0 === t.has("OES_texture_half_float_linear") ? (r.rectAreaLTC1 = an.LTC_HALF_1, r.rectAreaLTC2 = an.LTC_HALF_2) : console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")), r.ambient[0] = s, r.ambient[1] = a, r.ambient[2] = l;
|
|
const v = r.hash;
|
|
v.directionalLength === c && v.pointLength === h && v.spotLength === u && v.rectAreaLength === d && v.hemiLength === p && v.numDirectionalShadows === f && v.numPointShadows === m && v.numSpotShadows === g || (r.directional.length = c, r.spot.length = u, r.rectArea.length = d, r.point.length = h, r.hemi.length = p, r.directionalShadow.length = f, r.directionalShadowMap.length = f, r.pointShadow.length = m, r.pointShadowMap.length = m, r.spotShadow.length = g, r.spotShadowMap.length = g, r.directionalShadowMatrix.length = f, r.pointShadowMatrix.length = m, r.spotShadowMatrix.length = g, v.directionalLength = c, v.pointLength = h, v.spotLength = u, v.rectAreaLength = d, v.hemiLength = p, v.numDirectionalShadows = f, v.numPointShadows = m, v.numSpotShadows = g, r.version = qi++)
|
|
},
|
|
setupView: function(t, e) {
|
|
let n = 0,
|
|
i = 0,
|
|
l = 0,
|
|
c = 0,
|
|
h = 0;
|
|
const u = e.matrixWorldInverse;
|
|
for (let e = 0, d = t.length; e < d; e++) {
|
|
const d = t[e];
|
|
if (d.isDirectionalLight) {
|
|
const t = r.directional[n];
|
|
t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), n++
|
|
} else if (d.isSpotLight) {
|
|
const t = r.spot[l];
|
|
t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), t.direction.setFromMatrixPosition(d.matrixWorld), o.setFromMatrixPosition(d.target.matrixWorld), t.direction.sub(o), t.direction.transformDirection(u), l++
|
|
} else if (d.isRectAreaLight) {
|
|
const t = r.rectArea[c];
|
|
t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), a.identity(), s.copy(d.matrixWorld), s.premultiply(u), a.extractRotation(s), t.halfWidth.set(.5 * d.width, 0, 0), t.halfHeight.set(0, .5 * d.height, 0), t.halfWidth.applyMatrix4(a), t.halfHeight.applyMatrix4(a), c++
|
|
} else if (d.isPointLight) {
|
|
const t = r.point[i];
|
|
t.position.setFromMatrixPosition(d.matrixWorld), t.position.applyMatrix4(u), i++
|
|
} else if (d.isHemisphereLight) {
|
|
const t = r.hemi[h];
|
|
t.direction.setFromMatrixPosition(d.matrixWorld), t.direction.transformDirection(u), t.direction.normalize(), h++
|
|
}
|
|
}
|
|
},
|
|
state: r
|
|
}
|
|
}
|
|
|
|
function Zi(t, e) {
|
|
const n = new Qi(t, e),
|
|
i = [],
|
|
r = [];
|
|
return {
|
|
init: function() {
|
|
i.length = 0, r.length = 0
|
|
},
|
|
state: {
|
|
lightsArray: i,
|
|
shadowsArray: r,
|
|
lights: n
|
|
},
|
|
setupLights: function() {
|
|
n.setup(i)
|
|
},
|
|
setupLightsView: function(t) {
|
|
n.setupView(i, t)
|
|
},
|
|
pushLight: function(t) {
|
|
i.push(t)
|
|
},
|
|
pushShadow: function(t) {
|
|
r.push(t)
|
|
}
|
|
}
|
|
}
|
|
|
|
function Ji(t, e) {
|
|
let n = new WeakMap;
|
|
return {
|
|
get: function(i, r = 0) {
|
|
let o;
|
|
return !1 === n.has(i) ? (o = new Zi(t, e), n.set(i, []), n.get(i).push(o)) : r >= n.get(i).length ? (o = new Zi(t, e), n.get(i).push(o)) : o = n.get(i)[r], o
|
|
},
|
|
dispose: function() {
|
|
n = new WeakMap
|
|
}
|
|
}
|
|
}
|
|
|
|
function Ki(t) {
|
|
Jt.call(this), this.type = "MeshDepthMaterial", this.depthPacking = 3200, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.setValues(t)
|
|
}
|
|
|
|
function $i(t) {
|
|
Jt.call(this), this.type = "MeshDistanceMaterial", this.referencePosition = new T, this.nearDistance = 1, this.farDistance = 1e3, this.skinning = !1, this.morphTargets = !1, this.map = null, this.alphaMap = null, this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.fog = !1, this.setValues(t)
|
|
}
|
|
Ki.prototype = Object.create(Jt.prototype), Ki.prototype.constructor = Ki, Ki.prototype.isMeshDepthMaterial = !0, Ki.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.depthPacking = t.depthPacking, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this
|
|
}, $i.prototype = Object.create(Jt.prototype), $i.prototype.constructor = $i, $i.prototype.isMeshDistanceMaterial = !0, $i.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.referencePosition.copy(t.referencePosition), this.nearDistance = t.nearDistance, this.farDistance = t.farDistance, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.map = t.map, this.alphaMap = t.alphaMap, this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this
|
|
};
|
|
|
|
function tr(t, e, n) {
|
|
let i = new en;
|
|
const r = new v,
|
|
o = new v,
|
|
s = new M,
|
|
a = [],
|
|
l = [],
|
|
c = {},
|
|
h = {
|
|
0: 1,
|
|
1: 0,
|
|
2: 2
|
|
},
|
|
u = new Xe({
|
|
defines: {
|
|
SAMPLE_RATE: 2 / 8,
|
|
HALF_SAMPLE_RATE: 1 / 8
|
|
},
|
|
uniforms: {
|
|
shadow_pass: {
|
|
value: null
|
|
},
|
|
resolution: {
|
|
value: new v
|
|
},
|
|
radius: {
|
|
value: 4
|
|
}
|
|
},
|
|
vertexShader: "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",
|
|
fragmentShader: "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"
|
|
}),
|
|
d = u.clone();
|
|
d.defines.HORIZONTAL_PASS = 1;
|
|
const p = new be;
|
|
p.setAttribute("position", new ee(new Float32Array([-1, -1, .5, 3, -1, .5, -1, 3, .5]), 3));
|
|
const f = new He(p, u),
|
|
m = this;
|
|
|
|
function g(n, i) {
|
|
const r = e.update(f);
|
|
u.uniforms.shadow_pass.value = n.map.texture, u.uniforms.resolution.value = n.mapSize, u.uniforms.radius.value = n.radius, t.setRenderTarget(n.mapPass), t.clear(), t.renderBufferDirect(i, null, r, u, f, null), d.uniforms.shadow_pass.value = n.mapPass.texture, d.uniforms.resolution.value = n.mapSize, d.uniforms.radius.value = n.radius, t.setRenderTarget(n.map), t.clear(), t.renderBufferDirect(i, null, r, d, f, null)
|
|
}
|
|
|
|
function y(t, e, n) {
|
|
const i = t << 0 | e << 1 | n << 2;
|
|
let r = a[i];
|
|
return void 0 === r && (r = new Ki({
|
|
depthPacking: 3201,
|
|
morphTargets: t,
|
|
skinning: e
|
|
}), a[i] = r), r
|
|
}
|
|
|
|
function A(t, e, n) {
|
|
const i = t << 0 | e << 1 | n << 2;
|
|
let r = l[i];
|
|
return void 0 === r && (r = new $i({
|
|
morphTargets: t,
|
|
skinning: e
|
|
}), l[i] = r), r
|
|
}
|
|
|
|
function x(e, n, i, r, o, s, a) {
|
|
let l = null,
|
|
u = y,
|
|
d = e.customDepthMaterial;
|
|
if (!0 === r.isPointLight && (u = A, d = e.customDistanceMaterial), void 0 === d) {
|
|
let t = !1;
|
|
!0 === i.morphTargets && (t = n.morphAttributes && n.morphAttributes.position && n.morphAttributes.position.length > 0);
|
|
let r = !1;
|
|
!0 === e.isSkinnedMesh && (!0 === i.skinning ? r = !0 : console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:", e));
|
|
l = u(t, r, !0 === e.isInstancedMesh)
|
|
} else l = d;
|
|
if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) {
|
|
const t = l.uuid,
|
|
e = i.uuid;
|
|
let n = c[t];
|
|
void 0 === n && (n = {}, c[t] = n);
|
|
let r = n[e];
|
|
void 0 === r && (r = l.clone(), n[e] = r), l = r
|
|
}
|
|
return l.visible = i.visible, l.wireframe = i.wireframe, l.side = 3 === a ? null !== i.shadowSide ? i.shadowSide : i.side : null !== i.shadowSide ? i.shadowSide : h[i.side], l.clipShadows = i.clipShadows, l.clippingPlanes = i.clippingPlanes, l.clipIntersection = i.clipIntersection, l.wireframeLinewidth = i.wireframeLinewidth, l.linewidth = i.linewidth, !0 === r.isPointLight && !0 === l.isMeshDistanceMaterial && (l.referencePosition.setFromMatrixPosition(r.matrixWorld), l.nearDistance = o, l.farDistance = s), l
|
|
}
|
|
|
|
function _(n, r, o, s, a) {
|
|
if (!1 === n.visible) return;
|
|
if (n.layers.test(r.layers) && (n.isMesh || n.isLine || n.isPoints) && (n.castShadow || n.receiveShadow && 3 === a) && (!n.frustumCulled || i.intersectsObject(n))) {
|
|
n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse, n.matrixWorld);
|
|
const i = e.update(n),
|
|
r = n.material;
|
|
if (Array.isArray(r)) {
|
|
const e = i.groups;
|
|
for (let l = 0, c = e.length; l < c; l++) {
|
|
const c = e[l],
|
|
h = r[c.materialIndex];
|
|
if (h && h.visible) {
|
|
const e = x(n, i, h, s, o.near, o.far, a);
|
|
t.renderBufferDirect(o, null, i, e, n, c)
|
|
}
|
|
}
|
|
} else if (r.visible) {
|
|
const e = x(n, i, r, s, o.near, o.far, a);
|
|
t.renderBufferDirect(o, null, i, e, n, null)
|
|
}
|
|
}
|
|
const l = n.children;
|
|
for (let t = 0, e = l.length; t < e; t++) _(l[t], r, o, s, a)
|
|
}
|
|
this.enabled = !1, this.autoUpdate = !0, this.needsUpdate = !1, this.type = 1, this.render = function(e, a, l) {
|
|
if (!1 === m.enabled) return;
|
|
if (!1 === m.autoUpdate && !1 === m.needsUpdate) return;
|
|
if (0 === e.length) return;
|
|
const c = t.getRenderTarget(),
|
|
h = t.getActiveCubeFace(),
|
|
u = t.getActiveMipmapLevel(),
|
|
d = t.state;
|
|
d.setBlending(0), d.buffers.color.setClear(1, 1, 1, 1), d.buffers.depth.setTest(!0), d.setScissorTest(!1);
|
|
for (let c = 0, h = e.length; c < h; c++) {
|
|
const h = e[c],
|
|
u = h.shadow;
|
|
if (void 0 === u) {
|
|
console.warn("THREE.WebGLShadowMap:", h, "has no shadow.");
|
|
continue
|
|
}
|
|
if (!1 === u.autoUpdate && !1 === u.needsUpdate) continue;
|
|
r.copy(u.mapSize);
|
|
const p = u.getFrameExtents();
|
|
if (r.multiply(p), o.copy(u.mapSize), (r.x > n || r.y > n) && (r.x > n && (o.x = Math.floor(n / p.x), r.x = o.x * p.x, u.mapSize.x = o.x), r.y > n && (o.y = Math.floor(n / p.y), r.y = o.y * p.y, u.mapSize.y = o.y)), null === u.map && !u.isPointLightShadow && 3 === this.type) {
|
|
const t = {
|
|
minFilter: 1006,
|
|
magFilter: 1006,
|
|
format: 1023
|
|
};
|
|
u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.mapPass = new E(r.x, r.y, t), u.camera.updateProjectionMatrix()
|
|
}
|
|
if (null === u.map) {
|
|
const t = {
|
|
minFilter: 1003,
|
|
magFilter: 1003,
|
|
format: 1023
|
|
};
|
|
u.map = new E(r.x, r.y, t), u.map.texture.name = h.name + ".shadowMap", u.camera.updateProjectionMatrix()
|
|
}
|
|
t.setRenderTarget(u.map), t.clear();
|
|
const f = u.getViewportCount();
|
|
for (let t = 0; t < f; t++) {
|
|
const e = u.getViewport(t);
|
|
s.set(o.x * e.x, o.y * e.y, o.x * e.z, o.y * e.w), d.viewport(s), u.updateMatrices(h, t), i = u.getFrustum(), _(a, l, u.camera, h, this.type)
|
|
}
|
|
u.isPointLightShadow || 3 !== this.type || g(u, l), u.needsUpdate = !1
|
|
}
|
|
m.needsUpdate = !1, t.setRenderTarget(c, h, u)
|
|
}
|
|
}
|
|
|
|
function er(t, e, n) {
|
|
const i = n.isWebGL2;
|
|
const r = new function() {
|
|
let e = !1;
|
|
const n = new M;
|
|
let i = null;
|
|
const r = new M(0, 0, 0, 0);
|
|
return {
|
|
setMask: function(n) {
|
|
i === n || e || (t.colorMask(n, n, n, n), i = n)
|
|
},
|
|
setLocked: function(t) {
|
|
e = t
|
|
},
|
|
setClear: function(e, i, o, s, a) {
|
|
!0 === a && (e *= s, i *= s, o *= s), n.set(e, i, o, s), !1 === r.equals(n) && (t.clearColor(e, i, o, s), r.copy(n))
|
|
},
|
|
reset: function() {
|
|
e = !1, i = null, r.set(-1, 0, 0, 0)
|
|
}
|
|
}
|
|
},
|
|
o = new function() {
|
|
let e = !1,
|
|
n = null,
|
|
i = null,
|
|
r = null;
|
|
return {
|
|
setTest: function(t) {
|
|
t ? O(2929) : N(2929)
|
|
},
|
|
setMask: function(i) {
|
|
n === i || e || (t.depthMask(i), n = i)
|
|
},
|
|
setFunc: function(e) {
|
|
if (i !== e) {
|
|
if (e) switch (e) {
|
|
case 0:
|
|
t.depthFunc(512);
|
|
break;
|
|
case 1:
|
|
t.depthFunc(519);
|
|
break;
|
|
case 2:
|
|
t.depthFunc(513);
|
|
break;
|
|
case 3:
|
|
t.depthFunc(515);
|
|
break;
|
|
case 4:
|
|
t.depthFunc(514);
|
|
break;
|
|
case 5:
|
|
t.depthFunc(518);
|
|
break;
|
|
case 6:
|
|
t.depthFunc(516);
|
|
break;
|
|
case 7:
|
|
t.depthFunc(517);
|
|
break;
|
|
default:
|
|
t.depthFunc(515)
|
|
} else t.depthFunc(515);
|
|
i = e
|
|
}
|
|
},
|
|
setLocked: function(t) {
|
|
e = t
|
|
},
|
|
setClear: function(e) {
|
|
r !== e && (t.clearDepth(e), r = e)
|
|
},
|
|
reset: function() {
|
|
e = !1, n = null, i = null, r = null
|
|
}
|
|
}
|
|
},
|
|
s = new function() {
|
|
let e = !1,
|
|
n = null,
|
|
i = null,
|
|
r = null,
|
|
o = null,
|
|
s = null,
|
|
a = null,
|
|
l = null,
|
|
c = null;
|
|
return {
|
|
setTest: function(t) {
|
|
e || (t ? O(2960) : N(2960))
|
|
},
|
|
setMask: function(i) {
|
|
n === i || e || (t.stencilMask(i), n = i)
|
|
},
|
|
setFunc: function(e, n, s) {
|
|
i === e && r === n && o === s || (t.stencilFunc(e, n, s), i = e, r = n, o = s)
|
|
},
|
|
setOp: function(e, n, i) {
|
|
s === e && a === n && l === i || (t.stencilOp(e, n, i), s = e, a = n, l = i)
|
|
},
|
|
setLocked: function(t) {
|
|
e = t
|
|
},
|
|
setClear: function(e) {
|
|
c !== e && (t.clearStencil(e), c = e)
|
|
},
|
|
reset: function() {
|
|
e = !1, n = null, i = null, r = null, o = null, s = null, a = null, l = null, c = null
|
|
}
|
|
}
|
|
};
|
|
let a = {},
|
|
l = null,
|
|
c = null,
|
|
h = null,
|
|
u = null,
|
|
d = null,
|
|
p = null,
|
|
f = null,
|
|
m = null,
|
|
g = null,
|
|
v = !1,
|
|
y = null,
|
|
A = null,
|
|
x = null,
|
|
_ = null,
|
|
b = null;
|
|
const w = t.getParameter(35661);
|
|
let E = !1,
|
|
S = 0;
|
|
const T = t.getParameter(7938); - 1 !== T.indexOf("WebGL") ? (S = parseFloat(/^WebGL (\d)/.exec(T)[1]), E = S >= 1) : -1 !== T.indexOf("OpenGL ES") && (S = parseFloat(/^OpenGL ES (\d)/.exec(T)[1]), E = S >= 2);
|
|
let L = null,
|
|
R = {};
|
|
const C = new M,
|
|
P = new M;
|
|
|
|
function D(e, n, i) {
|
|
const r = new Uint8Array(4),
|
|
o = t.createTexture();
|
|
t.bindTexture(e, o), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728);
|
|
for (let e = 0; e < i; e++) t.texImage2D(n + e, 0, 6408, 1, 1, 0, 6408, 5121, r);
|
|
return o
|
|
}
|
|
const I = {};
|
|
|
|
function O(e) {
|
|
!0 !== a[e] && (t.enable(e), a[e] = !0)
|
|
}
|
|
|
|
function N(e) {
|
|
!1 !== a[e] && (t.disable(e), a[e] = !1)
|
|
}
|
|
I[3553] = D(3553, 3553, 1), I[34067] = D(34067, 34069, 6), r.setClear(0, 0, 0, 1), o.setClear(1), s.setClear(0), O(2929), o.setFunc(3), U(!1), H(1), O(2884), z(0);
|
|
const B = {
|
|
100: 32774,
|
|
101: 32778,
|
|
102: 32779
|
|
};
|
|
if (i) B[103] = 32775, B[104] = 32776;
|
|
else {
|
|
const t = e.get("EXT_blend_minmax");
|
|
null !== t && (B[103] = t.MIN_EXT, B[104] = t.MAX_EXT)
|
|
}
|
|
const F = {
|
|
200: 0,
|
|
201: 1,
|
|
202: 768,
|
|
204: 770,
|
|
210: 776,
|
|
208: 774,
|
|
206: 772,
|
|
203: 769,
|
|
205: 771,
|
|
209: 775,
|
|
207: 773
|
|
};
|
|
|
|
function z(e, n, i, r, o, s, a, l) {
|
|
if (0 !== e) {
|
|
if (c || (O(3042), c = !0), 5 === e) o = o || n, s = s || i, a = a || r, n === u && o === f || (t.blendEquationSeparate(B[n], B[o]), u = n, f = o), i === d && r === p && s === m && a === g || (t.blendFuncSeparate(F[i], F[r], F[s], F[a]), d = i, p = r, m = s, g = a), h = e, v = null;
|
|
else if (e !== h || l !== v) {
|
|
if (100 === u && 100 === f || (t.blendEquation(32774), u = 100, f = 100), l) switch (e) {
|
|
case 1:
|
|
t.blendFuncSeparate(1, 771, 1, 771);
|
|
break;
|
|
case 2:
|
|
t.blendFunc(1, 1);
|
|
break;
|
|
case 3:
|
|
t.blendFuncSeparate(0, 0, 769, 771);
|
|
break;
|
|
case 4:
|
|
t.blendFuncSeparate(0, 768, 0, 770);
|
|
break;
|
|
default:
|
|
console.error("THREE.WebGLState: Invalid blending: ", e)
|
|
} else switch (e) {
|
|
case 1:
|
|
t.blendFuncSeparate(770, 771, 1, 771);
|
|
break;
|
|
case 2:
|
|
t.blendFunc(770, 1);
|
|
break;
|
|
case 3:
|
|
t.blendFunc(0, 769);
|
|
break;
|
|
case 4:
|
|
t.blendFunc(0, 768);
|
|
break;
|
|
default:
|
|
console.error("THREE.WebGLState: Invalid blending: ", e)
|
|
}
|
|
d = null, p = null, m = null, g = null, h = e, v = l
|
|
}
|
|
} else c && (N(3042), c = !1)
|
|
}
|
|
|
|
function U(e) {
|
|
y !== e && (e ? t.frontFace(2304) : t.frontFace(2305), y = e)
|
|
}
|
|
|
|
function H(e) {
|
|
0 !== e ? (O(2884), e !== A && (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) : N(2884), A = e
|
|
}
|
|
|
|
function G(e, n, i) {
|
|
e ? (O(32823), _ === n && b === i || (t.polygonOffset(n, i), _ = n, b = i)) : N(32823)
|
|
}
|
|
|
|
function V(e) {
|
|
void 0 === e && (e = 33984 + w - 1), L !== e && (t.activeTexture(e), L = e)
|
|
}
|
|
return {
|
|
buffers: {
|
|
color: r,
|
|
depth: o,
|
|
stencil: s
|
|
},
|
|
enable: O,
|
|
disable: N,
|
|
useProgram: function(e) {
|
|
return l !== e && (t.useProgram(e), l = e, !0)
|
|
},
|
|
setBlending: z,
|
|
setMaterial: function(t, e) {
|
|
2 === t.side ? N(2884) : O(2884);
|
|
let n = 1 === t.side;
|
|
e && (n = !n), U(n), 1 === t.blending && !1 === t.transparent ? z(0) : z(t.blending, t.blendEquation, t.blendSrc, t.blendDst, t.blendEquationAlpha, t.blendSrcAlpha, t.blendDstAlpha, t.premultipliedAlpha), o.setFunc(t.depthFunc), o.setTest(t.depthTest), o.setMask(t.depthWrite), r.setMask(t.colorWrite);
|
|
const i = t.stencilWrite;
|
|
s.setTest(i), i && (s.setMask(t.stencilWriteMask), s.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), s.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), G(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits)
|
|
},
|
|
setFlipSided: U,
|
|
setCullFace: H,
|
|
setLineWidth: function(e) {
|
|
e !== x && (E && t.lineWidth(e), x = e)
|
|
},
|
|
setPolygonOffset: G,
|
|
setScissorTest: function(t) {
|
|
t ? O(3089) : N(3089)
|
|
},
|
|
activeTexture: V,
|
|
bindTexture: function(e, n) {
|
|
null === L && V();
|
|
let i = R[L];
|
|
void 0 === i && (i = {
|
|
type: void 0,
|
|
texture: void 0
|
|
}, R[L] = i), i.type === e && i.texture === n || (t.bindTexture(e, n || I[e]), i.type = e, i.texture = n)
|
|
},
|
|
unbindTexture: function() {
|
|
const e = R[L];
|
|
void 0 !== e && void 0 !== e.type && (t.bindTexture(e.type, null), e.type = void 0, e.texture = void 0)
|
|
},
|
|
compressedTexImage2D: function() {
|
|
try {
|
|
t.compressedTexImage2D.apply(t, arguments)
|
|
} catch (t) {
|
|
console.error("THREE.WebGLState:", t)
|
|
}
|
|
},
|
|
texImage2D: function() {
|
|
try {
|
|
t.texImage2D.apply(t, arguments)
|
|
} catch (t) {
|
|
console.error("THREE.WebGLState:", t)
|
|
}
|
|
},
|
|
texImage3D: function() {
|
|
try {
|
|
t.texImage3D.apply(t, arguments)
|
|
} catch (t) {
|
|
console.error("THREE.WebGLState:", t)
|
|
}
|
|
},
|
|
scissor: function(e) {
|
|
!1 === C.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), C.copy(e))
|
|
},
|
|
viewport: function(e) {
|
|
!1 === P.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), P.copy(e))
|
|
},
|
|
reset: function() {
|
|
a = {}, L = null, R = {}, l = null, c = null, h = null, u = null, d = null, p = null, f = null, m = null, g = null, v = !1, y = null, A = null, x = null, _ = null, b = null, r.reset(), o.reset(), s.reset()
|
|
}
|
|
}
|
|
}
|
|
|
|
function nr(t, e, n, i, r, o, s) {
|
|
const a = r.isWebGL2,
|
|
l = r.maxTextures,
|
|
c = r.maxCubemapSize,
|
|
h = r.maxTextureSize,
|
|
u = r.maxSamples,
|
|
d = new WeakMap;
|
|
let p, f = !1;
|
|
try {
|
|
f = "undefined" != typeof OffscreenCanvas && null !== new OffscreenCanvas(1, 1).getContext("2d")
|
|
} catch (t) {}
|
|
|
|
function m(t, e) {
|
|
return f ? new OffscreenCanvas(t, e) : document.createElementNS("http://www.w3.org/1999/xhtml", "canvas")
|
|
}
|
|
|
|
function v(t, e, n, i) {
|
|
let r = 1;
|
|
if ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), r < 1 || !0 === e) {
|
|
if ("undefined" != typeof HTMLImageElement && t instanceof HTMLImageElement || "undefined" != typeof HTMLCanvasElement && t instanceof HTMLCanvasElement || "undefined" != typeof ImageBitmap && t instanceof ImageBitmap) {
|
|
const i = e ? g.floorPowerOfTwo : Math.floor,
|
|
o = i(r * t.width),
|
|
s = i(r * t.height);
|
|
void 0 === p && (p = m(o, s));
|
|
const a = n ? m(o, s) : p;
|
|
a.width = o, a.height = s;
|
|
return a.getContext("2d").drawImage(t, 0, 0, o, s), console.warn("THREE.WebGLRenderer: Texture has been resized from (" + t.width + "x" + t.height + ") to (" + o + "x" + s + ")."), a
|
|
}
|
|
return "data" in t && console.warn("THREE.WebGLRenderer: Image in DataTexture is too big (" + t.width + "x" + t.height + ")."), t
|
|
}
|
|
return t
|
|
}
|
|
|
|
function y(t) {
|
|
return g.isPowerOfTwo(t.width) && g.isPowerOfTwo(t.height)
|
|
}
|
|
|
|
function A(t, e) {
|
|
return t.generateMipmaps && e && 1003 !== t.minFilter && 1006 !== t.minFilter
|
|
}
|
|
|
|
function x(e, n, r, o) {
|
|
t.generateMipmap(e);
|
|
i.get(n).__maxMipLevel = Math.log(Math.max(r, o)) * Math.LOG2E
|
|
}
|
|
|
|
function _(n, i, r) {
|
|
if (!1 === a) return i;
|
|
if (null !== n) {
|
|
if (void 0 !== t[n]) return t[n];
|
|
console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'")
|
|
}
|
|
let o = i;
|
|
return 6403 === i && (5126 === r && (o = 33326), 5131 === r && (o = 33325), 5121 === r && (o = 33321)), 6407 === i && (5126 === r && (o = 34837), 5131 === r && (o = 34843), 5121 === r && (o = 32849)), 6408 === i && (5126 === r && (o = 34836), 5131 === r && (o = 34842), 5121 === r && (o = 32856)), 33325 !== o && 33326 !== o && 34842 !== o && 34836 !== o || e.get("EXT_color_buffer_float"), o
|
|
}
|
|
|
|
function b(t) {
|
|
return 1003 === t || 1004 === t || 1005 === t ? 9728 : 9729
|
|
}
|
|
|
|
function w(e) {
|
|
const n = e.target;
|
|
n.removeEventListener("dispose", w),
|
|
function(e) {
|
|
const n = i.get(e);
|
|
if (void 0 === n.__webglInit) return;
|
|
t.deleteTexture(n.__webglTexture), i.remove(e)
|
|
}(n), n.isVideoTexture && d.delete(n), s.memory.textures--
|
|
}
|
|
|
|
function M(e) {
|
|
const n = e.target;
|
|
n.removeEventListener("dispose", M),
|
|
function(e) {
|
|
const n = i.get(e),
|
|
r = i.get(e.texture);
|
|
if (!e) return;
|
|
void 0 !== r.__webglTexture && t.deleteTexture(r.__webglTexture);
|
|
e.depthTexture && e.depthTexture.dispose();
|
|
if (e.isWebGLCubeRenderTarget)
|
|
for (let e = 0; e < 6; e++) t.deleteFramebuffer(n.__webglFramebuffer[e]), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer[e]);
|
|
else t.deleteFramebuffer(n.__webglFramebuffer), n.__webglDepthbuffer && t.deleteRenderbuffer(n.__webglDepthbuffer), n.__webglMultisampledFramebuffer && t.deleteFramebuffer(n.__webglMultisampledFramebuffer), n.__webglColorRenderbuffer && t.deleteRenderbuffer(n.__webglColorRenderbuffer), n.__webglDepthRenderbuffer && t.deleteRenderbuffer(n.__webglDepthRenderbuffer);
|
|
i.remove(e.texture), i.remove(e)
|
|
}(n), s.memory.textures--
|
|
}
|
|
let E = 0;
|
|
|
|
function S(t, e) {
|
|
const r = i.get(t);
|
|
if (t.isVideoTexture && function(t) {
|
|
const e = s.render.frame;
|
|
d.get(t) !== e && (d.set(t, e), t.update())
|
|
}(t), t.version > 0 && r.__version !== t.version) {
|
|
const n = t.image;
|
|
if (void 0 === n) console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");
|
|
else {
|
|
if (!1 !== n.complete) return void D(r, t, e);
|
|
console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")
|
|
}
|
|
}
|
|
n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture)
|
|
}
|
|
|
|
function T(e, r) {
|
|
const s = i.get(e);
|
|
e.version > 0 && s.__version !== e.version ? function(e, i, r) {
|
|
if (6 !== i.image.length) return;
|
|
P(e, i), n.activeTexture(33984 + r), n.bindTexture(34067, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment);
|
|
const s = i && (i.isCompressedTexture || i.image[0].isCompressedTexture),
|
|
l = i.image[0] && i.image[0].isDataTexture,
|
|
h = [];
|
|
for (let t = 0; t < 6; t++) h[t] = s || l ? l ? i.image[t].image : i.image[t] : v(i.image[t], !1, !0, c);
|
|
const u = h[0],
|
|
d = y(u) || a,
|
|
p = o.convert(i.format),
|
|
f = o.convert(i.type),
|
|
m = _(i.internalFormat, p, f);
|
|
let g;
|
|
if (C(34067, i, d), s) {
|
|
for (let t = 0; t < 6; t++) {
|
|
g = h[t].mipmaps;
|
|
for (let e = 0; e < g.length; e++) {
|
|
const r = g[e];
|
|
1023 !== i.format && 1022 !== i.format ? null !== p ? n.compressedTexImage2D(34069 + t, e, m, r.width, r.height, 0, r.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()") : n.texImage2D(34069 + t, e, m, r.width, r.height, 0, p, f, r.data)
|
|
}
|
|
}
|
|
e.__maxMipLevel = g.length - 1
|
|
} else {
|
|
g = i.mipmaps;
|
|
for (let t = 0; t < 6; t++)
|
|
if (l) {
|
|
n.texImage2D(34069 + t, 0, m, h[t].width, h[t].height, 0, p, f, h[t].data);
|
|
for (let e = 0; e < g.length; e++) {
|
|
const i = g[e].image[t].image;
|
|
n.texImage2D(34069 + t, e + 1, m, i.width, i.height, 0, p, f, i.data)
|
|
}
|
|
} else {
|
|
n.texImage2D(34069 + t, 0, m, p, f, h[t]);
|
|
for (let e = 0; e < g.length; e++) {
|
|
const i = g[e];
|
|
n.texImage2D(34069 + t, e + 1, m, p, f, i.image[t])
|
|
}
|
|
} e.__maxMipLevel = g.length
|
|
}
|
|
A(i, d) && x(34067, i, u.width, u.height);
|
|
e.__version = i.version, i.onUpdate && i.onUpdate(i)
|
|
}(s, e, r) : (n.activeTexture(33984 + r), n.bindTexture(34067, s.__webglTexture))
|
|
}
|
|
const L = {
|
|
1e3: 10497,
|
|
1001: 33071,
|
|
1002: 33648
|
|
},
|
|
R = {
|
|
1003: 9728,
|
|
1004: 9984,
|
|
1005: 9986,
|
|
1006: 9729,
|
|
1007: 9985,
|
|
1008: 9987
|
|
};
|
|
|
|
function C(n, o, s) {
|
|
s ? (t.texParameteri(n, 10242, L[o.wrapS]), t.texParameteri(n, 10243, L[o.wrapT]), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, L[o.wrapR]), t.texParameteri(n, 10240, R[o.magFilter]), t.texParameteri(n, 10241, R[o.minFilter])) : (t.texParameteri(n, 10242, 33071), t.texParameteri(n, 10243, 33071), 32879 !== n && 35866 !== n || t.texParameteri(n, 32882, 33071), 1001 === o.wrapS && 1001 === o.wrapT || console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."), t.texParameteri(n, 10240, b(o.magFilter)), t.texParameteri(n, 10241, b(o.minFilter)), 1003 !== o.minFilter && 1006 !== o.minFilter && console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));
|
|
const l = e.get("EXT_texture_filter_anisotropic");
|
|
if (l) {
|
|
if (1015 === o.type && null === e.get("OES_texture_float_linear")) return;
|
|
if (1016 === o.type && null === (a || e.get("OES_texture_half_float_linear"))) return;
|
|
(o.anisotropy > 1 || i.get(o).__currentAnisotropy) && (t.texParameterf(n, l.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o.anisotropy, r.getMaxAnisotropy())), i.get(o).__currentAnisotropy = o.anisotropy)
|
|
}
|
|
}
|
|
|
|
function P(e, n) {
|
|
void 0 === e.__webglInit && (e.__webglInit = !0, n.addEventListener("dispose", w), e.__webglTexture = t.createTexture(), s.memory.textures++)
|
|
}
|
|
|
|
function D(e, i, r) {
|
|
let s = 3553;
|
|
i.isDataTexture2DArray && (s = 35866), i.isDataTexture3D && (s = 32879), P(e, i), n.activeTexture(33984 + r), n.bindTexture(s, e.__webglTexture), t.pixelStorei(37440, i.flipY), t.pixelStorei(37441, i.premultiplyAlpha), t.pixelStorei(3317, i.unpackAlignment);
|
|
const l = function(t) {
|
|
return !a && (1001 !== t.wrapS || 1001 !== t.wrapT || 1003 !== t.minFilter && 1006 !== t.minFilter)
|
|
}(i) && !1 === y(i.image),
|
|
c = v(i.image, l, !1, h),
|
|
u = y(c) || a,
|
|
d = o.convert(i.format);
|
|
let p, f = o.convert(i.type),
|
|
m = _(i.internalFormat, d, f);
|
|
C(s, i, u);
|
|
const g = i.mipmaps;
|
|
if (i.isDepthTexture) m = 6402, a ? m = 1015 === i.type ? 36012 : 1014 === i.type ? 33190 : 1020 === i.type ? 35056 : 33189 : 1015 === i.type && console.error("WebGLRenderer: Floating point depth texture requires WebGL2."), 1026 === i.format && 6402 === m && 1012 !== i.type && 1014 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."), i.type = 1012, f = o.convert(i.type)), 1027 === i.format && 6402 === m && (m = 34041, 1020 !== i.type && (console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."), i.type = 1020, f = o.convert(i.type))), n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, null);
|
|
else if (i.isDataTexture)
|
|
if (g.length > 0 && u) {
|
|
for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data);
|
|
i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1
|
|
} else n.texImage2D(3553, 0, m, c.width, c.height, 0, d, f, c.data), e.__maxMipLevel = 0;
|
|
else if (i.isCompressedTexture) {
|
|
for (let t = 0, e = g.length; t < e; t++) p = g[t], 1023 !== i.format && 1022 !== i.format ? null !== d ? n.compressedTexImage2D(3553, t, m, p.width, p.height, 0, p.data) : console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()") : n.texImage2D(3553, t, m, p.width, p.height, 0, d, f, p.data);
|
|
e.__maxMipLevel = g.length - 1
|
|
} else if (i.isDataTexture2DArray) n.texImage3D(35866, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0;
|
|
else if (i.isDataTexture3D) n.texImage3D(32879, 0, m, c.width, c.height, c.depth, 0, d, f, c.data), e.__maxMipLevel = 0;
|
|
else if (g.length > 0 && u) {
|
|
for (let t = 0, e = g.length; t < e; t++) p = g[t], n.texImage2D(3553, t, m, d, f, p);
|
|
i.generateMipmaps = !1, e.__maxMipLevel = g.length - 1
|
|
} else n.texImage2D(3553, 0, m, d, f, c), e.__maxMipLevel = 0;
|
|
A(i, u) && x(s, i, c.width, c.height), e.__version = i.version, i.onUpdate && i.onUpdate(i)
|
|
}
|
|
|
|
function I(e, r, s, a) {
|
|
const l = o.convert(r.texture.format),
|
|
c = o.convert(r.texture.type),
|
|
h = _(r.texture.internalFormat, l, c);
|
|
n.texImage2D(a, 0, h, r.width, r.height, 0, l, c, null), t.bindFramebuffer(36160, e), t.framebufferTexture2D(36160, s, a, i.get(r.texture).__webglTexture, 0), t.bindFramebuffer(36160, null)
|
|
}
|
|
|
|
function O(e, n, i) {
|
|
if (t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer) {
|
|
let r = 33189;
|
|
if (i) {
|
|
const e = n.depthTexture;
|
|
e && e.isDepthTexture && (1015 === e.type ? r = 36012 : 1014 === e.type && (r = 33190));
|
|
const i = B(n);
|
|
t.renderbufferStorageMultisample(36161, i, r, n.width, n.height)
|
|
} else t.renderbufferStorage(36161, r, n.width, n.height);
|
|
t.framebufferRenderbuffer(36160, 36096, 36161, e)
|
|
} else if (n.depthBuffer && n.stencilBuffer) {
|
|
if (i) {
|
|
const e = B(n);
|
|
t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height)
|
|
} else t.renderbufferStorage(36161, 34041, n.width, n.height);
|
|
t.framebufferRenderbuffer(36160, 33306, 36161, e)
|
|
} else {
|
|
const e = o.convert(n.texture.format),
|
|
r = o.convert(n.texture.type),
|
|
s = _(n.texture.internalFormat, e, r);
|
|
if (i) {
|
|
const e = B(n);
|
|
t.renderbufferStorageMultisample(36161, e, s, n.width, n.height)
|
|
} else t.renderbufferStorage(36161, s, n.width, n.height)
|
|
}
|
|
t.bindRenderbuffer(36161, null)
|
|
}
|
|
|
|
function N(e) {
|
|
const n = i.get(e),
|
|
r = !0 === e.isWebGLCubeRenderTarget;
|
|
if (e.depthTexture) {
|
|
if (r) throw new Error("target.depthTexture not supported in Cube render targets");
|
|
! function(e, n) {
|
|
if (n && n.isWebGLCubeRenderTarget) throw new Error("Depth Texture with cube render targets is not supported");
|
|
if (t.bindFramebuffer(36160, e), !n.depthTexture || !n.depthTexture.isDepthTexture) throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");
|
|
i.get(n.depthTexture).__webglTexture && n.depthTexture.image.width === n.width && n.depthTexture.image.height === n.height || (n.depthTexture.image.width = n.width, n.depthTexture.image.height = n.height, n.depthTexture.needsUpdate = !0), S(n.depthTexture, 0);
|
|
const r = i.get(n.depthTexture).__webglTexture;
|
|
if (1026 === n.depthTexture.format) t.framebufferTexture2D(36160, 36096, 3553, r, 0);
|
|
else {
|
|
if (1027 !== n.depthTexture.format) throw new Error("Unknown depthTexture format");
|
|
t.framebufferTexture2D(36160, 33306, 3553, r, 0)
|
|
}
|
|
}(n.__webglFramebuffer, e)
|
|
} else if (r) {
|
|
n.__webglDepthbuffer = [];
|
|
for (let i = 0; i < 6; i++) t.bindFramebuffer(36160, n.__webglFramebuffer[i]), n.__webglDepthbuffer[i] = t.createRenderbuffer(), O(n.__webglDepthbuffer[i], e, !1)
|
|
} else t.bindFramebuffer(36160, n.__webglFramebuffer), n.__webglDepthbuffer = t.createRenderbuffer(), O(n.__webglDepthbuffer, e, !1);
|
|
t.bindFramebuffer(36160, null)
|
|
}
|
|
|
|
function B(t) {
|
|
return a && t.isWebGLMultisampleRenderTarget ? Math.min(u, t.samples) : 0
|
|
}
|
|
let F = !1,
|
|
z = !1;
|
|
this.allocateTextureUnit = function() {
|
|
const t = E;
|
|
return t >= l && console.warn("THREE.WebGLTextures: Trying to use " + t + " texture units while this GPU supports only " + l), E += 1, t
|
|
}, this.resetTextureUnits = function() {
|
|
E = 0
|
|
}, this.setTexture2D = S, this.setTexture2DArray = function(t, e) {
|
|
const r = i.get(t);
|
|
t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture))
|
|
}, this.setTexture3D = function(t, e) {
|
|
const r = i.get(t);
|
|
t.version > 0 && r.__version !== t.version ? D(r, t, e) : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture))
|
|
}, this.setTextureCube = T, this.setupRenderTarget = function(e) {
|
|
const r = i.get(e),
|
|
l = i.get(e.texture);
|
|
e.addEventListener("dispose", M), l.__webglTexture = t.createTexture(), s.memory.textures++;
|
|
const c = !0 === e.isWebGLCubeRenderTarget,
|
|
h = !0 === e.isWebGLMultisampleRenderTarget,
|
|
u = y(e) || a;
|
|
if (!a || 1022 !== e.texture.format || 1015 !== e.texture.type && 1016 !== e.texture.type || (e.texture.format = 1023, console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")), c) {
|
|
r.__webglFramebuffer = [];
|
|
for (let e = 0; e < 6; e++) r.__webglFramebuffer[e] = t.createFramebuffer()
|
|
} else if (r.__webglFramebuffer = t.createFramebuffer(), h)
|
|
if (a) {
|
|
r.__webglMultisampledFramebuffer = t.createFramebuffer(), r.__webglColorRenderbuffer = t.createRenderbuffer(), t.bindRenderbuffer(36161, r.__webglColorRenderbuffer);
|
|
const n = o.convert(e.texture.format),
|
|
i = o.convert(e.texture.type),
|
|
s = _(e.texture.internalFormat, n, i),
|
|
a = B(e);
|
|
t.renderbufferStorageMultisample(36161, a, s, e.width, e.height), t.bindFramebuffer(36160, r.__webglMultisampledFramebuffer), t.framebufferRenderbuffer(36160, 36064, 36161, r.__webglColorRenderbuffer), t.bindRenderbuffer(36161, null), e.depthBuffer && (r.__webglDepthRenderbuffer = t.createRenderbuffer(), O(r.__webglDepthRenderbuffer, e, !0)), t.bindFramebuffer(36160, null)
|
|
} else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");
|
|
if (c) {
|
|
n.bindTexture(34067, l.__webglTexture), C(34067, e.texture, u);
|
|
for (let t = 0; t < 6; t++) I(r.__webglFramebuffer[t], e, 36064, 34069 + t);
|
|
A(e.texture, u) && x(34067, e.texture, e.width, e.height), n.bindTexture(34067, null)
|
|
} else n.bindTexture(3553, l.__webglTexture), C(3553, e.texture, u), I(r.__webglFramebuffer, e, 36064, 3553), A(e.texture, u) && x(3553, e.texture, e.width, e.height), n.bindTexture(3553, null);
|
|
e.depthBuffer && N(e)
|
|
}, this.updateRenderTargetMipmap = function(t) {
|
|
const e = t.texture;
|
|
if (A(e, y(t) || a)) {
|
|
const r = t.isWebGLCubeRenderTarget ? 34067 : 3553,
|
|
o = i.get(e).__webglTexture;
|
|
n.bindTexture(r, o), x(r, e, t.width, t.height), n.bindTexture(r, null)
|
|
}
|
|
}, this.updateMultisampleRenderTarget = function(e) {
|
|
if (e.isWebGLMultisampleRenderTarget)
|
|
if (a) {
|
|
const n = i.get(e);
|
|
t.bindFramebuffer(36008, n.__webglMultisampledFramebuffer), t.bindFramebuffer(36009, n.__webglFramebuffer);
|
|
const r = e.width,
|
|
o = e.height;
|
|
let s = 16384;
|
|
e.depthBuffer && (s |= 256), e.stencilBuffer && (s |= 1024), t.blitFramebuffer(0, 0, r, o, 0, 0, r, o, s, 9728), t.bindFramebuffer(36160, n.__webglMultisampledFramebuffer)
|
|
} else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")
|
|
}, this.safeSetTexture2D = function(t, e) {
|
|
t && t.isWebGLRenderTarget && (!1 === F && (console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."), F = !0), t = t.texture), S(t, e)
|
|
}, this.safeSetTextureCube = function(t, e) {
|
|
t && t.isWebGLCubeRenderTarget && (!1 === z && (console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."), z = !0), t = t.texture), T(t, e)
|
|
}
|
|
}
|
|
|
|
function ir(t, e, n) {
|
|
const i = n.isWebGL2;
|
|
return {
|
|
convert: function(t) {
|
|
let n;
|
|
if (1009 === t) return 5121;
|
|
if (1017 === t) return 32819;
|
|
if (1018 === t) return 32820;
|
|
if (1019 === t) return 33635;
|
|
if (1010 === t) return 5120;
|
|
if (1011 === t) return 5122;
|
|
if (1012 === t) return 5123;
|
|
if (1013 === t) return 5124;
|
|
if (1014 === t) return 5125;
|
|
if (1015 === t) return 5126;
|
|
if (1016 === t) return i ? 5131 : (n = e.get("OES_texture_half_float"), null !== n ? n.HALF_FLOAT_OES : null);
|
|
if (1021 === t) return 6406;
|
|
if (1022 === t) return 6407;
|
|
if (1023 === t) return 6408;
|
|
if (1024 === t) return 6409;
|
|
if (1025 === t) return 6410;
|
|
if (1026 === t) return 6402;
|
|
if (1027 === t) return 34041;
|
|
if (1028 === t) return 6403;
|
|
if (1029 === t) return 36244;
|
|
if (1030 === t) return 33319;
|
|
if (1031 === t) return 33320;
|
|
if (1032 === t) return 36248;
|
|
if (1033 === t) return 36249;
|
|
if (33776 === t || 33777 === t || 33778 === t || 33779 === t) {
|
|
if (n = e.get("WEBGL_compressed_texture_s3tc"), null === n) return null;
|
|
if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT;
|
|
if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;
|
|
if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;
|
|
if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT
|
|
}
|
|
if (35840 === t || 35841 === t || 35842 === t || 35843 === t) {
|
|
if (n = e.get("WEBGL_compressed_texture_pvrtc"), null === n) return null;
|
|
if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
|
|
if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
|
|
if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
|
|
if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
|
|
}
|
|
if (36196 === t) return n = e.get("WEBGL_compressed_texture_etc1"), null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null;
|
|
if ((37492 === t || 37496 === t) && (n = e.get("WEBGL_compressed_texture_etc"), null !== n)) {
|
|
if (37492 === t) return n.COMPRESSED_RGB8_ETC2;
|
|
if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC
|
|
}
|
|
return 37808 === t || 37809 === t || 37810 === t || 37811 === t || 37812 === t || 37813 === t || 37814 === t || 37815 === t || 37816 === t || 37817 === t || 37818 === t || 37819 === t || 37820 === t || 37821 === t || 37840 === t || 37841 === t || 37842 === t || 37843 === t || 37844 === t || 37845 === t || 37846 === t || 37847 === t || 37848 === t || 37849 === t || 37850 === t || 37851 === t || 37852 === t || 37853 === t ? (n = e.get("WEBGL_compressed_texture_astc"), null !== n ? t : null) : 36492 === t ? (n = e.get("EXT_texture_compression_bptc"), null !== n ? t : null) : 1020 === t ? i ? 34042 : (n = e.get("WEBGL_depth_texture"), null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) : void 0
|
|
}
|
|
}
|
|
}
|
|
|
|
function rr(t = []) {
|
|
Ye.call(this), this.cameras = t
|
|
}
|
|
|
|
function or() {
|
|
St.call(this), this.type = "Group"
|
|
}
|
|
|
|
function sr() {
|
|
this._targetRay = null, this._grip = null, this._hand = null
|
|
}
|
|
|
|
function ar(t, e) {
|
|
const n = this;
|
|
let i = null,
|
|
r = 1,
|
|
o = null,
|
|
s = "local-floor",
|
|
a = null;
|
|
const l = [],
|
|
c = new Map,
|
|
h = new Ye;
|
|
h.layers.enable(1), h.viewport = new M;
|
|
const u = new Ye;
|
|
u.layers.enable(2), u.viewport = new M;
|
|
const d = [h, u],
|
|
p = new rr;
|
|
p.layers.enable(1), p.layers.enable(2);
|
|
let f = null,
|
|
m = null;
|
|
|
|
function g(t) {
|
|
const e = c.get(t.inputSource);
|
|
e && e.dispatchEvent({
|
|
type: t.type,
|
|
data: t.inputSource
|
|
})
|
|
}
|
|
|
|
function v() {
|
|
c.forEach((function(t, e) {
|
|
t.disconnect(e)
|
|
})), c.clear(), f = null, m = null, t.setFramebuffer(null), t.setRenderTarget(t.getRenderTarget()), w.stop(), n.isPresenting = !1, n.dispatchEvent({
|
|
type: "sessionend"
|
|
})
|
|
}
|
|
|
|
function y(t) {
|
|
const e = i.inputSources;
|
|
for (let t = 0; t < l.length; t++) c.set(e[t], l[t]);
|
|
for (let e = 0; e < t.removed.length; e++) {
|
|
const n = t.removed[e],
|
|
i = c.get(n);
|
|
i && (i.dispatchEvent({
|
|
type: "disconnected",
|
|
data: n
|
|
}), c.delete(n))
|
|
}
|
|
for (let e = 0; e < t.added.length; e++) {
|
|
const n = t.added[e],
|
|
i = c.get(n);
|
|
i && i.dispatchEvent({
|
|
type: "connected",
|
|
data: n
|
|
})
|
|
}
|
|
}
|
|
this.enabled = !1, this.isPresenting = !1, this.getController = function(t) {
|
|
let e = l[t];
|
|
return void 0 === e && (e = new sr, l[t] = e), e.getTargetRaySpace()
|
|
}, this.getControllerGrip = function(t) {
|
|
let e = l[t];
|
|
return void 0 === e && (e = new sr, l[t] = e), e.getGripSpace()
|
|
}, this.getHand = function(t) {
|
|
let e = l[t];
|
|
return void 0 === e && (e = new sr, l[t] = e), e.getHandSpace()
|
|
}, this.setFramebufferScaleFactor = function(t) {
|
|
r = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")
|
|
}, this.setReferenceSpaceType = function(t) {
|
|
s = t, !0 === n.isPresenting && console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")
|
|
}, this.getReferenceSpace = function() {
|
|
return o
|
|
}, this.getSession = function() {
|
|
return i
|
|
}, this.setSession = async function(t) {
|
|
if (i = t, null !== i) {
|
|
i.addEventListener("select", g), i.addEventListener("selectstart", g), i.addEventListener("selectend", g), i.addEventListener("squeeze", g), i.addEventListener("squeezestart", g), i.addEventListener("squeezeend", g), i.addEventListener("end", v), i.addEventListener("inputsourceschange", y);
|
|
const t = e.getContextAttributes();
|
|
!0 !== t.xrCompatible && await e.makeXRCompatible();
|
|
const a = {
|
|
antialias: t.antialias,
|
|
alpha: t.alpha,
|
|
depth: t.depth,
|
|
stencil: t.stencil,
|
|
framebufferScaleFactor: r
|
|
},
|
|
l = new XRWebGLLayer(i, e, a);
|
|
i.updateRenderState({
|
|
baseLayer: l
|
|
}), o = await i.requestReferenceSpace(s), w.setContext(i), w.start(), n.isPresenting = !0, n.dispatchEvent({
|
|
type: "sessionstart"
|
|
})
|
|
}
|
|
};
|
|
const A = new T,
|
|
x = new T;
|
|
|
|
function _(t, e) {
|
|
null === e ? t.matrixWorld.copy(t.matrix) : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), t.matrixWorldInverse.copy(t.matrixWorld).invert()
|
|
}
|
|
this.getCamera = function(t) {
|
|
p.near = u.near = h.near = t.near, p.far = u.far = h.far = t.far, f === p.near && m === p.far || (i.updateRenderState({
|
|
depthNear: p.near,
|
|
depthFar: p.far
|
|
}), f = p.near, m = p.far);
|
|
const e = t.parent,
|
|
n = p.cameras;
|
|
_(p, e);
|
|
for (let t = 0; t < n.length; t++) _(n[t], e);
|
|
t.matrixWorld.copy(p.matrixWorld), t.matrix.copy(p.matrix), t.matrix.decompose(t.position, t.quaternion, t.scale);
|
|
const r = t.children;
|
|
for (let t = 0, e = r.length; t < e; t++) r[t].updateMatrixWorld(!0);
|
|
return 2 === n.length ? function(t, e, n) {
|
|
A.setFromMatrixPosition(e.matrixWorld), x.setFromMatrixPosition(n.matrixWorld);
|
|
const i = A.distanceTo(x),
|
|
r = e.projectionMatrix.elements,
|
|
o = n.projectionMatrix.elements,
|
|
s = r[14] / (r[10] - 1),
|
|
a = r[14] / (r[10] + 1),
|
|
l = (r[9] + 1) / r[5],
|
|
c = (r[9] - 1) / r[5],
|
|
h = (r[8] - 1) / r[0],
|
|
u = (o[8] + 1) / o[0],
|
|
d = s * h,
|
|
p = s * u,
|
|
f = i / (-h + u),
|
|
m = f * -h;
|
|
e.matrixWorld.decompose(t.position, t.quaternion, t.scale), t.translateX(m), t.translateZ(f), t.matrixWorld.compose(t.position, t.quaternion, t.scale), t.matrixWorldInverse.copy(t.matrixWorld).invert();
|
|
const g = s + f,
|
|
v = a + f,
|
|
y = d - m,
|
|
_ = p + (i - m),
|
|
b = l * a / v * g,
|
|
w = c * a / v * g;
|
|
t.projectionMatrix.makePerspective(y, _, b, w, g, v)
|
|
}(p, h, u) : p.projectionMatrix.copy(h.projectionMatrix), p
|
|
};
|
|
let b = null;
|
|
const w = new nn;
|
|
w.setAnimationLoop((function(e, n) {
|
|
if (a = n.getViewerPose(o), null !== a) {
|
|
const e = a.views,
|
|
n = i.renderState.baseLayer;
|
|
t.setFramebuffer(n.framebuffer);
|
|
let r = !1;
|
|
e.length !== p.cameras.length && (p.cameras.length = 0, r = !0);
|
|
for (let t = 0; t < e.length; t++) {
|
|
const i = e[t],
|
|
o = n.getViewport(i),
|
|
s = d[t];
|
|
s.matrix.fromArray(i.transform.matrix), s.projectionMatrix.fromArray(i.projectionMatrix), s.viewport.set(o.x, o.y, o.width, o.height), 0 === t && p.matrix.copy(s.matrix), !0 === r && p.cameras.push(s)
|
|
}
|
|
}
|
|
const r = i.inputSources;
|
|
for (let t = 0; t < l.length; t++) {
|
|
const e = l[t],
|
|
i = r[t];
|
|
e.update(i, n, o)
|
|
}
|
|
b && b(e, n)
|
|
})), this.setAnimationLoop = function(t) {
|
|
b = t
|
|
}, this.dispose = function() {}
|
|
}
|
|
|
|
function lr(t) {
|
|
function e(e, n) {
|
|
e.opacity.value = n.opacity, n.color && e.diffuse.value.copy(n.color), n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), n.map && (e.map.value = n.map), n.alphaMap && (e.alphaMap.value = n.alphaMap), n.specularMap && (e.specularMap.value = n.specularMap);
|
|
const i = t.get(n).envMap;
|
|
if (i) {
|
|
e.envMap.value = i, e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1, e.reflectivity.value = n.reflectivity, e.refractionRatio.value = n.refractionRatio;
|
|
const r = t.get(i).__maxMipLevel;
|
|
void 0 !== r && (e.maxMipLevel.value = r)
|
|
}
|
|
let r, o;
|
|
n.lightMap && (e.lightMap.value = n.lightMap, e.lightMapIntensity.value = n.lightMapIntensity), n.aoMap && (e.aoMap.value = n.aoMap, e.aoMapIntensity.value = n.aoMapIntensity), n.map ? r = n.map : n.specularMap ? r = n.specularMap : n.displacementMap ? r = n.displacementMap : n.normalMap ? r = n.normalMap : n.bumpMap ? r = n.bumpMap : n.roughnessMap ? r = n.roughnessMap : n.metalnessMap ? r = n.metalnessMap : n.alphaMap ? r = n.alphaMap : n.emissiveMap ? r = n.emissiveMap : n.clearcoatMap ? r = n.clearcoatMap : n.clearcoatNormalMap ? r = n.clearcoatNormalMap : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), void 0 !== r && (r.isWebGLRenderTarget && (r = r.texture), !0 === r.matrixAutoUpdate && r.updateMatrix(), e.uvTransform.value.copy(r.matrix)), n.aoMap ? o = n.aoMap : n.lightMap && (o = n.lightMap), void 0 !== o && (o.isWebGLRenderTarget && (o = o.texture), !0 === o.matrixAutoUpdate && o.updateMatrix(), e.uv2Transform.value.copy(o.matrix))
|
|
}
|
|
|
|
function n(e, n) {
|
|
e.roughness.value = n.roughness, e.metalness.value = n.metalness, n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), n.bumpMap && (e.bumpMap.value = n.bumpMap, e.bumpScale.value = n.bumpScale, 1 === n.side && (e.bumpScale.value *= -1)), n.normalMap && (e.normalMap.value = n.normalMap, e.normalScale.value.copy(n.normalScale), 1 === n.side && e.normalScale.value.negate()), n.displacementMap && (e.displacementMap.value = n.displacementMap, e.displacementScale.value = n.displacementScale, e.displacementBias.value = n.displacementBias);
|
|
t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity)
|
|
}
|
|
return {
|
|
refreshFogUniforms: function(t, e) {
|
|
t.fogColor.value.copy(e.color), e.isFog ? (t.fogNear.value = e.near, t.fogFar.value = e.far) : e.isFogExp2 && (t.fogDensity.value = e.density)
|
|
},
|
|
refreshMaterialUniforms: function(t, i, r, o) {
|
|
i.isMeshBasicMaterial ? e(t, i) : i.isMeshLambertMaterial ? (e(t, i), function(t, e) {
|
|
e.emissiveMap && (t.emissiveMap.value = e.emissiveMap)
|
|
}(t, i)) : i.isMeshToonMaterial ? (e(t, i), function(t, e) {
|
|
e.gradientMap && (t.gradientMap.value = e.gradientMap);
|
|
e.emissiveMap && (t.emissiveMap.value = e.emissiveMap);
|
|
e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
|
|
e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
|
|
}(t, i)) : i.isMeshPhongMaterial ? (e(t, i), function(t, e) {
|
|
t.specular.value.copy(e.specular), t.shininess.value = Math.max(e.shininess, 1e-4), e.emissiveMap && (t.emissiveMap.value = e.emissiveMap);
|
|
e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
|
|
e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
|
|
}(t, i)) : i.isMeshStandardMaterial ? (e(t, i), i.isMeshPhysicalMaterial ? function(t, e) {
|
|
n(t, e), t.reflectivity.value = e.reflectivity, t.clearcoat.value = e.clearcoat, t.clearcoatRoughness.value = e.clearcoatRoughness, e.sheen && t.sheen.value.copy(e.sheen);
|
|
e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap);
|
|
e.clearcoatRoughnessMap && (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap);
|
|
e.clearcoatNormalMap && (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), t.clearcoatNormalMap.value = e.clearcoatNormalMap, 1 === e.side && t.clearcoatNormalScale.value.negate());
|
|
t.transmission.value = e.transmission, e.transmissionMap && (t.transmissionMap.value = e.transmissionMap)
|
|
}(t, i) : n(t, i)) : i.isMeshMatcapMaterial ? (e(t, i), function(t, e) {
|
|
e.matcap && (t.matcap.value = e.matcap);
|
|
e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
|
|
e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
|
|
}(t, i)) : i.isMeshDepthMaterial ? (e(t, i), function(t, e) {
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
|
|
}(t, i)) : i.isMeshDistanceMaterial ? (e(t, i), function(t, e) {
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias);
|
|
t.referencePosition.value.copy(e.referencePosition), t.nearDistance.value = e.nearDistance, t.farDistance.value = e.farDistance
|
|
}(t, i)) : i.isMeshNormalMaterial ? (e(t, i), function(t, e) {
|
|
e.bumpMap && (t.bumpMap.value = e.bumpMap, t.bumpScale.value = e.bumpScale, 1 === e.side && (t.bumpScale.value *= -1));
|
|
e.normalMap && (t.normalMap.value = e.normalMap, t.normalScale.value.copy(e.normalScale), 1 === e.side && t.normalScale.value.negate());
|
|
e.displacementMap && (t.displacementMap.value = e.displacementMap, t.displacementScale.value = e.displacementScale, t.displacementBias.value = e.displacementBias)
|
|
}(t, i)) : i.isLineBasicMaterial ? (function(t, e) {
|
|
t.diffuse.value.copy(e.color), t.opacity.value = e.opacity
|
|
}(t, i), i.isLineDashedMaterial && function(t, e) {
|
|
t.dashSize.value = e.dashSize, t.totalSize.value = e.dashSize + e.gapSize, t.scale.value = e.scale
|
|
}(t, i)) : i.isPointsMaterial ? function(t, e, n, i) {
|
|
t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.size.value = e.size * n, t.scale.value = .5 * i, e.map && (t.map.value = e.map);
|
|
e.alphaMap && (t.alphaMap.value = e.alphaMap);
|
|
let r;
|
|
e.map ? r = e.map : e.alphaMap && (r = e.alphaMap);
|
|
void 0 !== r && (!0 === r.matrixAutoUpdate && r.updateMatrix(), t.uvTransform.value.copy(r.matrix))
|
|
}(t, i, r, o) : i.isSpriteMaterial ? function(t, e) {
|
|
t.diffuse.value.copy(e.color), t.opacity.value = e.opacity, t.rotation.value = e.rotation, e.map && (t.map.value = e.map);
|
|
e.alphaMap && (t.alphaMap.value = e.alphaMap);
|
|
let n;
|
|
e.map ? n = e.map : e.alphaMap && (n = e.alphaMap);
|
|
void 0 !== n && (!0 === n.matrixAutoUpdate && n.updateMatrix(), t.uvTransform.value.copy(n.matrix))
|
|
}(t, i) : i.isShadowMaterial ? (t.color.value.copy(i.color), t.opacity.value = i.opacity) : i.isShaderMaterial && (i.uniformsNeedUpdate = !1)
|
|
}
|
|
}
|
|
}
|
|
|
|
function cr(t) {
|
|
const e = void 0 !== (t = t || {}).canvas ? t.canvas : function() {
|
|
const t = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
|
return t.style.display = "block", t
|
|
}(),
|
|
n = void 0 !== t.context ? t.context : null,
|
|
i = void 0 !== t.alpha && t.alpha,
|
|
r = void 0 === t.depth || t.depth,
|
|
o = void 0 === t.stencil || t.stencil,
|
|
s = void 0 !== t.antialias && t.antialias,
|
|
a = void 0 === t.premultipliedAlpha || t.premultipliedAlpha,
|
|
l = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer,
|
|
c = void 0 !== t.powerPreference ? t.powerPreference : "default",
|
|
h = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat;
|
|
let u = null,
|
|
d = null;
|
|
const p = [];
|
|
this.domElement = e, this.debug = {
|
|
checkShaderErrors: !0
|
|
}, this.autoClear = !0, this.autoClearColor = !0, this.autoClearDepth = !0, this.autoClearStencil = !0, this.sortObjects = !0, this.clippingPlanes = [], this.localClippingEnabled = !1, this.gammaFactor = 2, this.outputEncoding = 3e3, this.physicallyCorrectLights = !1, this.toneMapping = 0, this.toneMappingExposure = 1, this.maxMorphTargets = 8, this.maxMorphNormals = 4;
|
|
const f = this;
|
|
let m = !1,
|
|
y = null,
|
|
A = 0,
|
|
x = 0,
|
|
_ = null,
|
|
b = null,
|
|
w = -1,
|
|
E = null;
|
|
const S = new M,
|
|
L = new M;
|
|
let R = null,
|
|
C = e.width,
|
|
P = e.height,
|
|
D = 1,
|
|
I = null,
|
|
O = null;
|
|
const N = new M(0, 0, C, P),
|
|
B = new M(0, 0, C, P);
|
|
let F = !1;
|
|
const z = new en;
|
|
let U = !1,
|
|
H = !1;
|
|
const G = new et,
|
|
V = new T,
|
|
k = {
|
|
background: null,
|
|
fog: null,
|
|
environment: null,
|
|
overrideMaterial: null,
|
|
isScene: !0
|
|
};
|
|
|
|
function W() {
|
|
return null === _ ? D : 1
|
|
}
|
|
let j, X, q, Y, Q, Z, J, K, $, tt, nt, it, rt, ot, st, at, lt, ct, ht, ut, dt, pt = n;
|
|
|
|
function ft(t, n) {
|
|
for (let i = 0; i < t.length; i++) {
|
|
const r = t[i],
|
|
o = e.getContext(r, n);
|
|
if (null !== o) return o
|
|
}
|
|
return null
|
|
}
|
|
try {
|
|
const t = {
|
|
alpha: i,
|
|
depth: r,
|
|
stencil: o,
|
|
antialias: s,
|
|
premultipliedAlpha: a,
|
|
preserveDrawingBuffer: l,
|
|
powerPreference: c,
|
|
failIfMajorPerformanceCaveat: h
|
|
};
|
|
if (e.addEventListener("webglcontextlost", yt, !1), e.addEventListener("webglcontextrestored", At, !1), null === pt) {
|
|
const e = ["webgl2", "webgl", "experimental-webgl"];
|
|
if (!0 === f.isWebGL1Renderer && e.shift(), pt = ft(e, t), null === pt) throw ft(e) ? new Error("Error creating WebGL context with your selected attributes.") : new Error("Error creating WebGL context.")
|
|
}
|
|
void 0 === pt.getShaderPrecisionFormat && (pt.getShaderPrecisionFormat = function() {
|
|
return {
|
|
rangeMin: 1,
|
|
rangeMax: 1,
|
|
precision: 1
|
|
}
|
|
})
|
|
} catch (t) {
|
|
throw console.error("THREE.WebGLRenderer: " + t.message), t
|
|
}
|
|
|
|
function mt() {
|
|
j = new mn(pt), X = new dn(pt, j, t), j.init(X), ut = new ir(pt, j, X), q = new er(pt, j, X), q.scissor(L.copy(B).multiplyScalar(D).floor()), q.viewport(S.copy(N).multiplyScalar(D).floor()), Y = new yn(pt), Q = new Gi, Z = new nr(pt, j, q, Q, X, ut, Y), J = new fn(f), K = new rn(pt, X), dt = new hn(pt, j, K, X), $ = new gn(pt, K, Y, dt), tt = new bn(pt, $, K, Y), lt = new _n(pt), st = new pn(Q), nt = new Hi(f, J, j, X, dt, st), it = new lr(Q), rt = new ji(Q), ot = new Ji(j, X), at = new cn(f, J, q, tt, a), ct = new un(pt, j, Y, X), ht = new vn(pt, j, Y, X), Y.programs = nt.programs, f.capabilities = X, f.extensions = j, f.properties = Q, f.renderLists = rt, f.state = q, f.info = Y
|
|
}
|
|
mt();
|
|
const gt = new ar(f, pt);
|
|
this.xr = gt;
|
|
const vt = new tr(f, tt, X.maxTextureSize);
|
|
|
|
function yt(t) {
|
|
t.preventDefault(), console.log("THREE.WebGLRenderer: Context Lost."), m = !0
|
|
}
|
|
|
|
function At() {
|
|
console.log("THREE.WebGLRenderer: Context Restored."), m = !1, mt()
|
|
}
|
|
|
|
function xt(t) {
|
|
const e = t.target;
|
|
e.removeEventListener("dispose", xt),
|
|
function(t) {
|
|
_t(t), Q.remove(t)
|
|
}(e)
|
|
}
|
|
|
|
function _t(t) {
|
|
const e = Q.get(t).program;
|
|
void 0 !== e && nt.releaseProgram(e)
|
|
}
|
|
this.shadowMap = vt, this.getContext = function() {
|
|
return pt
|
|
}, this.getContextAttributes = function() {
|
|
return pt.getContextAttributes()
|
|
}, this.forceContextLoss = function() {
|
|
const t = j.get("WEBGL_lose_context");
|
|
t && t.loseContext()
|
|
}, this.forceContextRestore = function() {
|
|
const t = j.get("WEBGL_lose_context");
|
|
t && t.restoreContext()
|
|
}, this.getPixelRatio = function() {
|
|
return D
|
|
}, this.setPixelRatio = function(t) {
|
|
void 0 !== t && (D = t, this.setSize(C, P, !1))
|
|
}, this.getSize = function(t) {
|
|
return void 0 === t && (console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"), t = new v), t.set(C, P)
|
|
}, this.setSize = function(t, n, i) {
|
|
gt.isPresenting ? console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.") : (C = t, P = n, e.width = Math.floor(t * D), e.height = Math.floor(n * D), !1 !== i && (e.style.width = t + "px", e.style.height = n + "px"), this.setViewport(0, 0, t, n))
|
|
}, this.getDrawingBufferSize = function(t) {
|
|
return void 0 === t && (console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"), t = new v), t.set(C * D, P * D).floor()
|
|
}, this.setDrawingBufferSize = function(t, n, i) {
|
|
C = t, P = n, D = i, e.width = Math.floor(t * i), e.height = Math.floor(n * i), this.setViewport(0, 0, t, n)
|
|
}, this.getCurrentViewport = function(t) {
|
|
return void 0 === t && (console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"), t = new M), t.copy(S)
|
|
}, this.getViewport = function(t) {
|
|
return t.copy(N)
|
|
}, this.setViewport = function(t, e, n, i) {
|
|
t.isVector4 ? N.set(t.x, t.y, t.z, t.w) : N.set(t, e, n, i), q.viewport(S.copy(N).multiplyScalar(D).floor())
|
|
}, this.getScissor = function(t) {
|
|
return t.copy(B)
|
|
}, this.setScissor = function(t, e, n, i) {
|
|
t.isVector4 ? B.set(t.x, t.y, t.z, t.w) : B.set(t, e, n, i), q.scissor(L.copy(B).multiplyScalar(D).floor())
|
|
}, this.getScissorTest = function() {
|
|
return F
|
|
}, this.setScissorTest = function(t) {
|
|
q.setScissorTest(F = t)
|
|
}, this.setOpaqueSort = function(t) {
|
|
I = t
|
|
}, this.setTransparentSort = function(t) {
|
|
O = t
|
|
}, this.getClearColor = function(t) {
|
|
return void 0 === t && (console.warn("WebGLRenderer: .getClearColor() now requires a Color as an argument"), t = new Yt), t.copy(at.getClearColor())
|
|
}, this.setClearColor = function() {
|
|
at.setClearColor.apply(at, arguments)
|
|
}, this.getClearAlpha = function() {
|
|
return at.getClearAlpha()
|
|
}, this.setClearAlpha = function() {
|
|
at.setClearAlpha.apply(at, arguments)
|
|
}, this.clear = function(t, e, n) {
|
|
let i = 0;
|
|
(void 0 === t || t) && (i |= 16384), (void 0 === e || e) && (i |= 256), (void 0 === n || n) && (i |= 1024), pt.clear(i)
|
|
}, this.clearColor = function() {
|
|
this.clear(!0, !1, !1)
|
|
}, this.clearDepth = function() {
|
|
this.clear(!1, !0, !1)
|
|
}, this.clearStencil = function() {
|
|
this.clear(!1, !1, !0)
|
|
}, this.dispose = function() {
|
|
e.removeEventListener("webglcontextlost", yt, !1), e.removeEventListener("webglcontextrestored", At, !1), rt.dispose(), ot.dispose(), Q.dispose(), J.dispose(), tt.dispose(), dt.dispose(), gt.dispose(), wt.stop()
|
|
}, this.renderBufferImmediate = function(t, e) {
|
|
dt.initAttributes();
|
|
const n = Q.get(t);
|
|
t.hasPositions && !n.position && (n.position = pt.createBuffer()), t.hasNormals && !n.normal && (n.normal = pt.createBuffer()), t.hasUvs && !n.uv && (n.uv = pt.createBuffer()), t.hasColors && !n.color && (n.color = pt.createBuffer());
|
|
const i = e.getAttributes();
|
|
t.hasPositions && (pt.bindBuffer(34962, n.position), pt.bufferData(34962, t.positionArray, 35048), dt.enableAttribute(i.position), pt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), t.hasNormals && (pt.bindBuffer(34962, n.normal), pt.bufferData(34962, t.normalArray, 35048), dt.enableAttribute(i.normal), pt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), t.hasUvs && (pt.bindBuffer(34962, n.uv), pt.bufferData(34962, t.uvArray, 35048), dt.enableAttribute(i.uv), pt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), t.hasColors && (pt.bindBuffer(34962, n.color), pt.bufferData(34962, t.colorArray, 35048), dt.enableAttribute(i.color), pt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), dt.disableUnusedAttributes(), pt.drawArrays(4, 0, t.count), t.count = 0
|
|
}, this.renderBufferDirect = function(t, e, n, i, r, o) {
|
|
null === e && (e = k);
|
|
const s = r.isMesh && r.matrixWorld.determinant() < 0,
|
|
a = Lt(t, e, i, r);
|
|
q.setMaterial(i, s);
|
|
let l = n.index;
|
|
const c = n.attributes.position;
|
|
if (null === l) {
|
|
if (void 0 === c || 0 === c.count) return
|
|
} else if (0 === l.count) return;
|
|
let h, u = 1;
|
|
!0 === i.wireframe && (l = $.getWireframeAttribute(n), u = 2), (i.morphTargets || i.morphNormals) && lt.update(r, n, i, a), dt.setup(r, i, a, n, l);
|
|
let d = ct;
|
|
null !== l && (h = K.get(l), d = ht, d.setIndex(h));
|
|
const p = null !== l ? l.count : c.count,
|
|
f = n.drawRange.start * u,
|
|
m = n.drawRange.count * u,
|
|
g = null !== o ? o.start * u : 0,
|
|
v = null !== o ? o.count * u : 1 / 0,
|
|
y = Math.max(f, g),
|
|
A = Math.min(p, f + m, g + v) - 1,
|
|
x = Math.max(0, A - y + 1);
|
|
if (0 !== x) {
|
|
if (r.isMesh) !0 === i.wireframe ? (q.setLineWidth(i.wireframeLinewidth * W()), d.setMode(1)) : d.setMode(4);
|
|
else if (r.isLine) {
|
|
let t = i.linewidth;
|
|
void 0 === t && (t = 1), q.setLineWidth(t * W()), r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3)
|
|
} else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4);
|
|
if (r.isInstancedMesh) d.renderInstances(y, x, r.count);
|
|
else if (n.isInstancedBufferGeometry) {
|
|
const t = Math.min(n.instanceCount, n._maxInstanceCount);
|
|
d.renderInstances(y, x, t)
|
|
} else d.render(y, x)
|
|
}
|
|
}, this.compile = function(t, e) {
|
|
d = ot.get(t), d.init(), t.traverseVisible((function(t) {
|
|
t.isLight && t.layers.test(e.layers) && (d.pushLight(t), t.castShadow && d.pushShadow(t))
|
|
})), d.setupLights();
|
|
const n = new WeakMap;
|
|
t.traverse((function(e) {
|
|
const i = e.material;
|
|
if (i)
|
|
if (Array.isArray(i))
|
|
for (let r = 0; r < i.length; r++) {
|
|
const o = i[r];
|
|
!1 === n.has(o) && (Tt(o, t, e), n.set(o))
|
|
} else !1 === n.has(i) && (Tt(i, t, e), n.set(i))
|
|
}))
|
|
};
|
|
let bt = null;
|
|
const wt = new nn;
|
|
|
|
function Mt(t, e, n, i) {
|
|
if (!1 === t.visible) return;
|
|
if (t.layers.test(e.layers))
|
|
if (t.isGroup) n = t.renderOrder;
|
|
else if (t.isLOD) !0 === t.autoUpdate && t.update(e);
|
|
else if (t.isLight) d.pushLight(t), t.castShadow && d.pushShadow(t);
|
|
else if (t.isSprite) {
|
|
if (!t.frustumCulled || z.intersectsSprite(t)) {
|
|
i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G);
|
|
const e = tt.update(t),
|
|
r = t.material;
|
|
r.visible && u.push(t, e, r, n, V.z, null)
|
|
}
|
|
} else if (t.isImmediateRenderObject) i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G), u.push(t, null, t.material, n, V.z, null);
|
|
else if ((t.isMesh || t.isLine || t.isPoints) && (t.isSkinnedMesh && t.skeleton.frame !== Y.render.frame && (t.skeleton.update(), t.skeleton.frame = Y.render.frame), !t.frustumCulled || z.intersectsObject(t))) {
|
|
i && V.setFromMatrixPosition(t.matrixWorld).applyMatrix4(G);
|
|
const e = tt.update(t),
|
|
r = t.material;
|
|
if (Array.isArray(r)) {
|
|
const i = e.groups;
|
|
for (let o = 0, s = i.length; o < s; o++) {
|
|
const s = i[o],
|
|
a = r[s.materialIndex];
|
|
a && a.visible && u.push(t, e, a, n, V.z, s)
|
|
}
|
|
} else r.visible && u.push(t, e, r, n, V.z, null)
|
|
}
|
|
const r = t.children;
|
|
for (let t = 0, o = r.length; t < o; t++) Mt(r[t], e, n, i)
|
|
}
|
|
|
|
function Et(t, e, n) {
|
|
const i = !0 === e.isScene ? e.overrideMaterial : null;
|
|
for (let r = 0, o = t.length; r < o; r++) {
|
|
const o = t[r],
|
|
s = o.object,
|
|
a = o.geometry,
|
|
l = null === i ? o.material : i,
|
|
c = o.group;
|
|
if (n.isArrayCamera) {
|
|
const t = n.cameras;
|
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
const i = t[n];
|
|
s.layers.test(i.layers) && (q.viewport(S.copy(i.viewport)), d.setupLightsView(i), St(s, e, i, a, l, c))
|
|
}
|
|
} else St(s, e, n, a, l, c)
|
|
}
|
|
}
|
|
|
|
function St(t, e, n, i, r, o) {
|
|
if (t.onBeforeRender(f, e, n, i, r, o), t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), t.normalMatrix.getNormalMatrix(t.modelViewMatrix), t.isImmediateRenderObject) {
|
|
const i = Lt(n, e, r, t);
|
|
q.setMaterial(r), dt.reset(),
|
|
function(t, e) {
|
|
t.render((function(t) {
|
|
f.renderBufferImmediate(t, e)
|
|
}))
|
|
}(t, i)
|
|
} else f.renderBufferDirect(n, e, i, r, t, o);
|
|
t.onAfterRender(f, e, n, i, r, o)
|
|
}
|
|
|
|
function Tt(t, e, n) {
|
|
!0 !== e.isScene && (e = k);
|
|
const i = Q.get(t),
|
|
r = d.state.lights,
|
|
o = d.state.shadowsArray,
|
|
s = r.state.version,
|
|
a = nt.getParameters(t, r.state, o, e, n),
|
|
l = nt.getProgramCacheKey(a);
|
|
let c = i.program,
|
|
h = !0;
|
|
if (i.environment = t.isMeshStandardMaterial ? e.environment : null, i.fog = e.fog, i.envMap = J.get(t.envMap || i.environment), void 0 === c) t.addEventListener("dispose", xt);
|
|
else if (c.cacheKey !== l) _t(t);
|
|
else if (i.lightsStateVersion !== s) h = !1;
|
|
else {
|
|
if (void 0 !== a.shaderID) return;
|
|
h = !1
|
|
}
|
|
h && (a.uniforms = nt.getUniforms(t), t.onBeforeCompile(a, f), c = nt.acquireProgram(a, l), i.program = c, i.uniforms = a.uniforms, i.outputEncoding = a.outputEncoding);
|
|
const u = i.uniforms;
|
|
(t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping || (i.numClippingPlanes = st.numPlanes, i.numIntersection = st.numIntersection, u.clippingPlanes = st.uniform), i.needsLights = function(t) {
|
|
return t.isMeshLambertMaterial || t.isMeshToonMaterial || t.isMeshPhongMaterial || t.isMeshStandardMaterial || t.isShadowMaterial || t.isShaderMaterial && !0 === t.lights
|
|
}(t), i.lightsStateVersion = s, i.needsLights && (u.ambientLightColor.value = r.state.ambient, u.lightProbe.value = r.state.probe, u.directionalLights.value = r.state.directional, u.directionalLightShadows.value = r.state.directionalShadow, u.spotLights.value = r.state.spot, u.spotLightShadows.value = r.state.spotShadow, u.rectAreaLights.value = r.state.rectArea, u.ltc_1.value = r.state.rectAreaLTC1, u.ltc_2.value = r.state.rectAreaLTC2, u.pointLights.value = r.state.point, u.pointLightShadows.value = r.state.pointShadow, u.hemisphereLights.value = r.state.hemi, u.directionalShadowMap.value = r.state.directionalShadowMap, u.directionalShadowMatrix.value = r.state.directionalShadowMatrix, u.spotShadowMap.value = r.state.spotShadowMap, u.spotShadowMatrix.value = r.state.spotShadowMatrix, u.pointShadowMap.value = r.state.pointShadowMap, u.pointShadowMatrix.value = r.state.pointShadowMatrix);
|
|
const p = i.program.getUniforms(),
|
|
m = Ai.seqWithValue(p.seq, u);
|
|
i.uniformsList = m
|
|
}
|
|
|
|
function Lt(t, e, n, i) {
|
|
!0 !== e.isScene && (e = k), Z.resetTextureUnits();
|
|
const r = e.fog,
|
|
o = n.isMeshStandardMaterial ? e.environment : null,
|
|
s = null === _ ? f.outputEncoding : _.texture.encoding,
|
|
a = J.get(n.envMap || o),
|
|
l = Q.get(n),
|
|
c = d.state.lights;
|
|
if (!0 === U && (!0 === H || t !== E)) {
|
|
const e = t === E && n.id === w;
|
|
st.setState(n, t, e)
|
|
}
|
|
n.version === l.__version ? n.fog && l.fog !== r || l.environment !== o || l.needsLights && l.lightsStateVersion !== c.state.version ? Tt(n, e, i) : void 0 === l.numClippingPlanes || l.numClippingPlanes === st.numPlanes && l.numIntersection === st.numIntersection ? (l.outputEncoding !== s || l.envMap !== a) && Tt(n, e, i) : Tt(n, e, i) : (Tt(n, e, i), l.__version = n.version);
|
|
let h = !1,
|
|
u = !1,
|
|
p = !1;
|
|
const m = l.program,
|
|
v = m.getUniforms(),
|
|
y = l.uniforms;
|
|
if (q.useProgram(m.program) && (h = !0, u = !0, p = !0), n.id !== w && (w = n.id, u = !0), h || E !== t) {
|
|
if (v.setValue(pt, "projectionMatrix", t.projectionMatrix), X.logarithmicDepthBuffer && v.setValue(pt, "logDepthBufFC", 2 / (Math.log(t.far + 1) / Math.LN2)), E !== t && (E = t, u = !0, p = !0), n.isShaderMaterial || n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshStandardMaterial || n.envMap) {
|
|
const e = v.map.cameraPosition;
|
|
void 0 !== e && e.setValue(pt, V.setFromMatrixPosition(t.matrixWorld))
|
|
}(n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial) && v.setValue(pt, "isOrthographic", !0 === t.isOrthographicCamera), (n.isMeshPhongMaterial || n.isMeshToonMaterial || n.isMeshLambertMaterial || n.isMeshBasicMaterial || n.isMeshStandardMaterial || n.isShaderMaterial || n.isShadowMaterial || n.skinning) && v.setValue(pt, "viewMatrix", t.matrixWorldInverse)
|
|
}
|
|
if (n.skinning) {
|
|
v.setOptional(pt, i, "bindMatrix"), v.setOptional(pt, i, "bindMatrixInverse");
|
|
const t = i.skeleton;
|
|
if (t) {
|
|
const e = t.bones;
|
|
if (X.floatVertexTextures) {
|
|
if (null === t.boneTexture) {
|
|
let n = Math.sqrt(4 * e.length);
|
|
n = g.ceilPowerOfTwo(n), n = Math.max(n, 4);
|
|
const i = new Float32Array(n * n * 4);
|
|
i.set(t.boneMatrices);
|
|
const r = new Ke(i, n, n, 1023, 1015);
|
|
t.boneMatrices = i, t.boneTexture = r, t.boneTextureSize = n
|
|
}
|
|
v.setValue(pt, "boneTexture", t.boneTexture, Z), v.setValue(pt, "boneTextureSize", t.boneTextureSize)
|
|
} else v.setOptional(pt, t, "boneMatrices")
|
|
}
|
|
}
|
|
var A, x;
|
|
return (u || l.receiveShadow !== i.receiveShadow) && (l.receiveShadow = i.receiveShadow, v.setValue(pt, "receiveShadow", i.receiveShadow)), u && (v.setValue(pt, "toneMappingExposure", f.toneMappingExposure), l.needsLights && (x = p, (A = y).ambientLightColor.needsUpdate = x, A.lightProbe.needsUpdate = x, A.directionalLights.needsUpdate = x, A.directionalLightShadows.needsUpdate = x, A.pointLights.needsUpdate = x, A.pointLightShadows.needsUpdate = x, A.spotLights.needsUpdate = x, A.spotLightShadows.needsUpdate = x, A.rectAreaLights.needsUpdate = x, A.hemisphereLights.needsUpdate = x), r && n.fog && it.refreshFogUniforms(y, r), it.refreshMaterialUniforms(y, n, D, P), Ai.upload(pt, l.uniformsList, y, Z)), n.isShaderMaterial && !0 === n.uniformsNeedUpdate && (Ai.upload(pt, l.uniformsList, y, Z), n.uniformsNeedUpdate = !1), n.isSpriteMaterial && v.setValue(pt, "center", i.center), v.setValue(pt, "modelViewMatrix", i.modelViewMatrix), v.setValue(pt, "normalMatrix", i.normalMatrix), v.setValue(pt, "modelMatrix", i.matrixWorld), m
|
|
}
|
|
wt.setAnimationLoop((function(t) {
|
|
gt.isPresenting || bt && bt(t)
|
|
})), "undefined" != typeof window && wt.setContext(window), this.setAnimationLoop = function(t) {
|
|
bt = t, gt.setAnimationLoop(t), null === t ? wt.stop() : wt.start()
|
|
}, this.render = function(t, e) {
|
|
let n, i;
|
|
if (void 0 !== arguments[2] && (console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."), n = arguments[2]), void 0 !== arguments[3] && (console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."), i = arguments[3]), void 0 !== e && !0 !== e.isCamera) return void console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");
|
|
if (!0 === m) return;
|
|
dt.resetDefaultState(), w = -1, E = null, !0 === t.autoUpdate && t.updateMatrixWorld(), null === e.parent && e.updateMatrixWorld(), !0 === gt.enabled && !0 === gt.isPresenting && (e = gt.getCamera(e)), !0 === t.isScene && t.onBeforeRender(f, t, e, n || _), d = ot.get(t, p.length), d.init(), p.push(d), G.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), z.setFromProjectionMatrix(G), H = this.localClippingEnabled, U = st.init(this.clippingPlanes, H, e), u = rt.get(t, e), u.init(), Mt(t, e, 0, f.sortObjects), u.finish(), !0 === f.sortObjects && u.sort(I, O), !0 === U && st.beginShadows();
|
|
const r = d.state.shadowsArray;
|
|
vt.render(r, t, e), d.setupLights(), d.setupLightsView(e), !0 === U && st.endShadows(), !0 === this.info.autoReset && this.info.reset(), void 0 !== n && this.setRenderTarget(n), at.render(u, t, e, i);
|
|
const o = u.opaque,
|
|
s = u.transparent;
|
|
o.length > 0 && Et(o, t, e), s.length > 0 && Et(s, t, e), !0 === t.isScene && t.onAfterRender(f, t, e), null !== _ && (Z.updateRenderTargetMipmap(_), Z.updateMultisampleRenderTarget(_)), q.buffers.depth.setTest(!0), q.buffers.depth.setMask(!0), q.buffers.color.setMask(!0), q.setPolygonOffset(!1), p.pop(), d = p.length > 0 ? p[p.length - 1] : null, u = null
|
|
}, this.setFramebuffer = function(t) {
|
|
y !== t && null === _ && pt.bindFramebuffer(36160, t), y = t
|
|
}, this.getActiveCubeFace = function() {
|
|
return A
|
|
}, this.getActiveMipmapLevel = function() {
|
|
return x
|
|
}, this.getRenderList = function() {
|
|
return u
|
|
}, this.setRenderList = function(t) {
|
|
u = t
|
|
}, this.getRenderTarget = function() {
|
|
return _
|
|
}, this.setRenderTarget = function(t, e = 0, n = 0) {
|
|
_ = t, A = e, x = n, t && void 0 === Q.get(t).__webglFramebuffer && Z.setupRenderTarget(t);
|
|
let i = y,
|
|
r = !1;
|
|
if (t) {
|
|
const n = Q.get(t).__webglFramebuffer;
|
|
t.isWebGLCubeRenderTarget ? (i = n[e], r = !0) : i = t.isWebGLMultisampleRenderTarget ? Q.get(t).__webglMultisampledFramebuffer : n, S.copy(t.viewport), L.copy(t.scissor), R = t.scissorTest
|
|
} else S.copy(N).multiplyScalar(D).floor(), L.copy(B).multiplyScalar(D).floor(), R = F;
|
|
if (b !== i && (pt.bindFramebuffer(36160, i), b = i), q.viewport(S), q.scissor(L), q.setScissorTest(R), r) {
|
|
const i = Q.get(t.texture);
|
|
pt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n)
|
|
}
|
|
}, this.readRenderTargetPixels = function(t, e, n, i, r, o, s) {
|
|
if (!t || !t.isWebGLRenderTarget) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");
|
|
let a = Q.get(t).__webglFramebuffer;
|
|
if (t.isWebGLCubeRenderTarget && void 0 !== s && (a = a[s]), a) {
|
|
let s = !1;
|
|
a !== b && (pt.bindFramebuffer(36160, a), s = !0);
|
|
try {
|
|
const a = t.texture,
|
|
l = a.format,
|
|
c = a.type;
|
|
if (1023 !== l && ut.convert(l) !== pt.getParameter(35739)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");
|
|
const h = 1016 === c && (j.has("EXT_color_buffer_half_float") || X.isWebGL2 && j.has("EXT_color_buffer_float"));
|
|
if (!(1009 === c || ut.convert(c) === pt.getParameter(35738) || 1015 === c && (X.isWebGL2 || j.has("OES_texture_float") || j.has("WEBGL_color_buffer_float")) || h)) return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");
|
|
36053 === pt.checkFramebufferStatus(36160) ? e >= 0 && e <= t.width - i && n >= 0 && n <= t.height - r && pt.readPixels(e, n, i, r, ut.convert(l), ut.convert(c), o) : console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")
|
|
} finally {
|
|
s && pt.bindFramebuffer(36160, b)
|
|
}
|
|
}
|
|
}, this.copyFramebufferToTexture = function(t, e, n = 0) {
|
|
const i = Math.pow(2, -n),
|
|
r = Math.floor(e.image.width * i),
|
|
o = Math.floor(e.image.height * i),
|
|
s = ut.convert(e.format);
|
|
Z.setTexture2D(e, 0), pt.copyTexImage2D(3553, n, s, t.x, t.y, r, o, 0), q.unbindTexture()
|
|
}, this.copyTextureToTexture = function(t, e, n, i = 0) {
|
|
const r = e.image.width,
|
|
o = e.image.height,
|
|
s = ut.convert(n.format),
|
|
a = ut.convert(n.type);
|
|
Z.setTexture2D(n, 0), pt.pixelStorei(37440, n.flipY), pt.pixelStorei(37441, n.premultiplyAlpha), pt.pixelStorei(3317, n.unpackAlignment), e.isDataTexture ? pt.texSubImage2D(3553, i, t.x, t.y, r, o, s, a, e.image.data) : e.isCompressedTexture ? pt.compressedTexSubImage2D(3553, i, t.x, t.y, e.mipmaps[0].width, e.mipmaps[0].height, s, e.mipmaps[0].data) : pt.texSubImage2D(3553, i, t.x, t.y, s, a, e.image), 0 === i && n.generateMipmaps && pt.generateMipmap(3553), q.unbindTexture()
|
|
}, this.initTexture = function(t) {
|
|
Z.setTexture2D(t, 0), q.unbindTexture()
|
|
}, this.resetState = function() {
|
|
q.reset(), dt.reset()
|
|
}, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", {
|
|
detail: this
|
|
}))
|
|
}
|
|
|
|
function hr(t) {
|
|
cr.call(this, t)
|
|
}
|
|
rr.prototype = Object.assign(Object.create(Ye.prototype), {
|
|
constructor: rr,
|
|
isArrayCamera: !0
|
|
}), or.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: or,
|
|
isGroup: !0
|
|
}), Object.assign(sr.prototype, {
|
|
constructor: sr,
|
|
getHandSpace: function() {
|
|
return null === this._hand && (this._hand = new or, this._hand.matrixAutoUpdate = !1, this._hand.visible = !1, this._hand.joints = {}, this._hand.inputState = {
|
|
pinching: !1
|
|
}), this._hand
|
|
},
|
|
getTargetRaySpace: function() {
|
|
return null === this._targetRay && (this._targetRay = new or, this._targetRay.matrixAutoUpdate = !1, this._targetRay.visible = !1), this._targetRay
|
|
},
|
|
getGripSpace: function() {
|
|
return null === this._grip && (this._grip = new or, this._grip.matrixAutoUpdate = !1, this._grip.visible = !1), this._grip
|
|
},
|
|
dispatchEvent: function(t) {
|
|
return null !== this._targetRay && this._targetRay.dispatchEvent(t), null !== this._grip && this._grip.dispatchEvent(t), null !== this._hand && this._hand.dispatchEvent(t), this
|
|
},
|
|
disconnect: function(t) {
|
|
return this.dispatchEvent({
|
|
type: "disconnected",
|
|
data: t
|
|
}), null !== this._targetRay && (this._targetRay.visible = !1), null !== this._grip && (this._grip.visible = !1), null !== this._hand && (this._hand.visible = !1), this
|
|
},
|
|
update: function(t, e, n) {
|
|
let i = null,
|
|
r = null,
|
|
o = null;
|
|
const s = this._targetRay,
|
|
a = this._grip,
|
|
l = this._hand;
|
|
if (t && "visible-blurred" !== e.session.visibilityState)
|
|
if (l && t.hand) {
|
|
o = !0;
|
|
for (const i of t.hand.values()) {
|
|
const t = e.getJointPose(i, n);
|
|
if (void 0 === l.joints[i.jointName]) {
|
|
const t = new or;
|
|
t.matrixAutoUpdate = !1, t.visible = !1, l.joints[i.jointName] = t, l.add(t)
|
|
}
|
|
const r = l.joints[i.jointName];
|
|
null !== t && (r.matrix.fromArray(t.transform.matrix), r.matrix.decompose(r.position, r.rotation, r.scale), r.jointRadius = t.radius), r.visible = null !== t
|
|
}
|
|
const i = l.joints["index-finger-tip"],
|
|
r = l.joints["thumb-tip"],
|
|
s = i.position.distanceTo(r.position),
|
|
a = .02,
|
|
c = .005;
|
|
l.inputState.pinching && s > a + c ? (l.inputState.pinching = !1, this.dispatchEvent({
|
|
type: "pinchend",
|
|
handedness: t.handedness,
|
|
target: this
|
|
})) : !l.inputState.pinching && s <= a - c && (l.inputState.pinching = !0, this.dispatchEvent({
|
|
type: "pinchstart",
|
|
handedness: t.handedness,
|
|
target: this
|
|
}))
|
|
} else null !== s && (i = e.getPose(t.targetRaySpace, n), null !== i && (s.matrix.fromArray(i.transform.matrix), s.matrix.decompose(s.position, s.rotation, s.scale))), null !== a && t.gripSpace && (r = e.getPose(t.gripSpace, n), null !== r && (a.matrix.fromArray(r.transform.matrix), a.matrix.decompose(a.position, a.rotation, a.scale)));
|
|
return null !== s && (s.visible = null !== i), null !== a && (a.visible = null !== r), null !== l && (l.visible = null !== o), this
|
|
}
|
|
}), Object.assign(ar.prototype, p.prototype), hr.prototype = Object.assign(Object.create(cr.prototype), {
|
|
constructor: hr,
|
|
isWebGL1Renderer: !0
|
|
});
|
|
class ur extends St {
|
|
constructor() {
|
|
super(), Object.defineProperty(this, "isScene", {
|
|
value: !0
|
|
}), this.type = "Scene", this.background = null, this.environment = null, this.fog = null, this.overrideMaterial = null, this.autoUpdate = !0, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe", {
|
|
detail: this
|
|
}))
|
|
}
|
|
copy(t, e) {
|
|
return super.copy(t, e), null !== t.background && (this.background = t.background.clone()), null !== t.environment && (this.environment = t.environment.clone()), null !== t.fog && (this.fog = t.fog.clone()), null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), this.autoUpdate = t.autoUpdate, this.matrixAutoUpdate = t.matrixAutoUpdate, this
|
|
}
|
|
toJSON(t) {
|
|
const e = super.toJSON(t);
|
|
return null !== this.background && (e.object.background = this.background.toJSON(t)), null !== this.environment && (e.object.environment = this.environment.toJSON(t)), null !== this.fog && (e.object.fog = this.fog.toJSON()), e
|
|
}
|
|
}
|
|
|
|
function dr(t, e) {
|
|
this.array = t, this.stride = e, this.count = void 0 !== t ? t.length / e : 0, this.usage = 35044, this.updateRange = {
|
|
offset: 0,
|
|
count: -1
|
|
}, this.version = 0, this.uuid = g.generateUUID()
|
|
}
|
|
Object.defineProperty(dr.prototype, "needsUpdate", {
|
|
set: function(t) {
|
|
!0 === t && this.version++
|
|
}
|
|
}), Object.assign(dr.prototype, {
|
|
isInterleavedBuffer: !0,
|
|
onUploadCallback: function() {},
|
|
setUsage: function(t) {
|
|
return this.usage = t, this
|
|
},
|
|
copy: function(t) {
|
|
return this.array = new t.array.constructor(t.array), this.count = t.count, this.stride = t.stride, this.usage = t.usage, this
|
|
},
|
|
copyAt: function(t, e, n) {
|
|
t *= this.stride, n *= e.stride;
|
|
for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i];
|
|
return this
|
|
},
|
|
set: function(t, e = 0) {
|
|
return this.array.set(t, e), this
|
|
},
|
|
clone: function(t) {
|
|
void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer);
|
|
const e = new dr(new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), this.stride);
|
|
return e.setUsage(this.usage), e
|
|
},
|
|
onUpload: function(t) {
|
|
return this.onUploadCallback = t, this
|
|
},
|
|
toJSON: function(t) {
|
|
return void 0 === t.arrayBuffers && (t.arrayBuffers = {}), void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = g.generateUUID()), void 0 === t.arrayBuffers[this.array.buffer._uuid] && (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer))), {
|
|
uuid: this.uuid,
|
|
buffer: this.array.buffer._uuid,
|
|
type: this.array.constructor.name,
|
|
stride: this.stride
|
|
}
|
|
}
|
|
});
|
|
const pr = new T;
|
|
|
|
function fr(t, e, n, i) {
|
|
this.name = "", this.data = t, this.itemSize = e, this.offset = n, this.normalized = !0 === i
|
|
}
|
|
|
|
function mr(t) {
|
|
Jt.call(this), this.type = "SpriteMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.rotation = 0, this.sizeAttenuation = !0, this.transparent = !0, this.setValues(t)
|
|
}
|
|
let gr;
|
|
Object.defineProperties(fr.prototype, {
|
|
count: {
|
|
get: function() {
|
|
return this.data.count
|
|
}
|
|
},
|
|
array: {
|
|
get: function() {
|
|
return this.data.array
|
|
}
|
|
},
|
|
needsUpdate: {
|
|
set: function(t) {
|
|
this.data.needsUpdate = t
|
|
}
|
|
}
|
|
}), Object.assign(fr.prototype, {
|
|
isInterleavedBufferAttribute: !0,
|
|
applyMatrix4: function(t) {
|
|
for (let e = 0, n = this.data.count; e < n; e++) pr.x = this.getX(e), pr.y = this.getY(e), pr.z = this.getZ(e), pr.applyMatrix4(t), this.setXYZ(e, pr.x, pr.y, pr.z);
|
|
return this
|
|
},
|
|
setX: function(t, e) {
|
|
return this.data.array[t * this.data.stride + this.offset] = e, this
|
|
},
|
|
setY: function(t, e) {
|
|
return this.data.array[t * this.data.stride + this.offset + 1] = e, this
|
|
},
|
|
setZ: function(t, e) {
|
|
return this.data.array[t * this.data.stride + this.offset + 2] = e, this
|
|
},
|
|
setW: function(t, e) {
|
|
return this.data.array[t * this.data.stride + this.offset + 3] = e, this
|
|
},
|
|
getX: function(t) {
|
|
return this.data.array[t * this.data.stride + this.offset]
|
|
},
|
|
getY: function(t) {
|
|
return this.data.array[t * this.data.stride + this.offset + 1]
|
|
},
|
|
getZ: function(t) {
|
|
return this.data.array[t * this.data.stride + this.offset + 2]
|
|
},
|
|
getW: function(t) {
|
|
return this.data.array[t * this.data.stride + this.offset + 3]
|
|
},
|
|
setXY: function(t, e, n) {
|
|
return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this
|
|
},
|
|
setXYZ: function(t, e, n, i) {
|
|
return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this
|
|
},
|
|
setXYZW: function(t, e, n, i, r) {
|
|
return t = t * this.data.stride + this.offset, this.data.array[t + 0] = e, this.data.array[t + 1] = n, this.data.array[t + 2] = i, this.data.array[t + 3] = r, this
|
|
},
|
|
clone: function(t) {
|
|
if (void 0 === t) {
|
|
console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.");
|
|
const t = [];
|
|
for (let e = 0; e < this.count; e++) {
|
|
const n = e * this.data.stride + this.offset;
|
|
for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e])
|
|
}
|
|
return new ee(new this.array.constructor(t), this.itemSize, this.normalized)
|
|
}
|
|
return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), new fr(t.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized)
|
|
},
|
|
toJSON: function(t) {
|
|
if (void 0 === t) {
|
|
console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.");
|
|
const t = [];
|
|
for (let e = 0; e < this.count; e++) {
|
|
const n = e * this.data.stride + this.offset;
|
|
for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e])
|
|
}
|
|
return {
|
|
itemSize: this.itemSize,
|
|
type: this.array.constructor.name,
|
|
array: t,
|
|
normalized: this.normalized
|
|
}
|
|
}
|
|
return void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), void 0 === t.interleavedBuffers[this.data.uuid] && (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), {
|
|
isInterleavedBufferAttribute: !0,
|
|
itemSize: this.itemSize,
|
|
data: this.data.uuid,
|
|
offset: this.offset,
|
|
normalized: this.normalized
|
|
}
|
|
}
|
|
}), mr.prototype = Object.create(Jt.prototype), mr.prototype.constructor = mr, mr.prototype.isSpriteMaterial = !0, mr.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.rotation = t.rotation, this.sizeAttenuation = t.sizeAttenuation, this
|
|
};
|
|
const vr = new T,
|
|
yr = new T,
|
|
Ar = new T,
|
|
xr = new v,
|
|
_r = new v,
|
|
br = new et,
|
|
wr = new T,
|
|
Mr = new T,
|
|
Er = new T,
|
|
Sr = new v,
|
|
Tr = new v,
|
|
Lr = new v;
|
|
|
|
function Rr(t) {
|
|
if (St.call(this), this.type = "Sprite", void 0 === gr) {
|
|
gr = new be;
|
|
const t = new dr(new Float32Array([-.5, -.5, 0, 0, 0, .5, -.5, 0, 1, 0, .5, .5, 0, 1, 1, -.5, .5, 0, 0, 1]), 5);
|
|
gr.setIndex([0, 1, 2, 0, 2, 3]), gr.setAttribute("position", new fr(t, 3, 0, !1)), gr.setAttribute("uv", new fr(t, 2, 3, !1))
|
|
}
|
|
this.geometry = gr, this.material = void 0 !== t ? t : new mr, this.center = new v(.5, .5)
|
|
}
|
|
|
|
function Cr(t, e, n, i, r, o) {
|
|
xr.subVectors(t, n).addScalar(.5).multiply(i), void 0 !== r ? (_r.x = o * xr.x - r * xr.y, _r.y = r * xr.x + o * xr.y) : _r.copy(xr), t.copy(e), t.x += _r.x, t.y += _r.y, t.applyMatrix4(br)
|
|
}
|
|
Rr.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: Rr,
|
|
isSprite: !0,
|
|
raycast: function(t, e) {
|
|
null === t.camera && console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'), yr.setFromMatrixScale(this.matrixWorld), br.copy(t.camera.matrixWorld), this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), Ar.setFromMatrixPosition(this.modelViewMatrix), t.camera.isPerspectiveCamera && !1 === this.material.sizeAttenuation && yr.multiplyScalar(-Ar.z);
|
|
const n = this.material.rotation;
|
|
let i, r;
|
|
0 !== n && (r = Math.cos(n), i = Math.sin(n));
|
|
const o = this.center;
|
|
Cr(wr.set(-.5, -.5, 0), Ar, o, yr, i, r), Cr(Mr.set(.5, -.5, 0), Ar, o, yr, i, r), Cr(Er.set(.5, .5, 0), Ar, o, yr, i, r), Sr.set(0, 0), Tr.set(1, 0), Lr.set(1, 1);
|
|
let s = t.ray.intersectTriangle(wr, Mr, Er, !1, vr);
|
|
if (null === s && (Cr(Mr.set(-.5, .5, 0), Ar, o, yr, i, r), Tr.set(0, 1), s = t.ray.intersectTriangle(wr, Er, Mr, !1, vr), null === s)) return;
|
|
const a = t.ray.origin.distanceTo(vr);
|
|
a < t.near || a > t.far || e.push({
|
|
distance: a,
|
|
point: vr.clone(),
|
|
uv: Gt.getUV(vr, wr, Mr, Er, Sr, Tr, Lr, new v),
|
|
face: null,
|
|
object: this
|
|
})
|
|
},
|
|
copy: function(t) {
|
|
return St.prototype.copy.call(this, t), void 0 !== t.center && this.center.copy(t.center), this.material = t.material, this
|
|
}
|
|
});
|
|
const Pr = new T,
|
|
Dr = new T;
|
|
|
|
function Ir() {
|
|
St.call(this), this._currentLevel = 0, this.type = "LOD", Object.defineProperties(this, {
|
|
levels: {
|
|
enumerable: !0,
|
|
value: []
|
|
}
|
|
}), this.autoUpdate = !0
|
|
}
|
|
Ir.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: Ir,
|
|
isLOD: !0,
|
|
copy: function(t) {
|
|
St.prototype.copy.call(this, t, !1);
|
|
const e = t.levels;
|
|
for (let t = 0, n = e.length; t < n; t++) {
|
|
const n = e[t];
|
|
this.addLevel(n.object.clone(), n.distance)
|
|
}
|
|
return this.autoUpdate = t.autoUpdate, this
|
|
},
|
|
addLevel: function(t, e = 0) {
|
|
e = Math.abs(e);
|
|
const n = this.levels;
|
|
let i;
|
|
for (i = 0; i < n.length && !(e < n[i].distance); i++);
|
|
return n.splice(i, 0, {
|
|
distance: e,
|
|
object: t
|
|
}), this.add(t), this
|
|
},
|
|
getCurrentLevel: function() {
|
|
return this._currentLevel
|
|
},
|
|
getObjectForDistance: function(t) {
|
|
const e = this.levels;
|
|
if (e.length > 0) {
|
|
let n, i;
|
|
for (n = 1, i = e.length; n < i && !(t < e[n].distance); n++);
|
|
return e[n - 1].object
|
|
}
|
|
return null
|
|
},
|
|
raycast: function(t, e) {
|
|
if (this.levels.length > 0) {
|
|
Pr.setFromMatrixPosition(this.matrixWorld);
|
|
const n = t.ray.origin.distanceTo(Pr);
|
|
this.getObjectForDistance(n).raycast(t, e)
|
|
}
|
|
},
|
|
update: function(t) {
|
|
const e = this.levels;
|
|
if (e.length > 1) {
|
|
Pr.setFromMatrixPosition(t.matrixWorld), Dr.setFromMatrixPosition(this.matrixWorld);
|
|
const n = Pr.distanceTo(Dr) / t.zoom;
|
|
let i, r;
|
|
for (e[0].object.visible = !0, i = 1, r = e.length; i < r && n >= e[i].distance; i++) e[i - 1].object.visible = !1, e[i].object.visible = !0;
|
|
for (this._currentLevel = i - 1; i < r; i++) e[i].object.visible = !1
|
|
}
|
|
},
|
|
toJSON: function(t) {
|
|
const e = St.prototype.toJSON.call(this, t);
|
|
!1 === this.autoUpdate && (e.object.autoUpdate = !1), e.object.levels = [];
|
|
const n = this.levels;
|
|
for (let t = 0, i = n.length; t < i; t++) {
|
|
const i = n[t];
|
|
e.object.levels.push({
|
|
object: i.object.uuid,
|
|
distance: i.distance
|
|
})
|
|
}
|
|
return e
|
|
}
|
|
});
|
|
const Or = new T,
|
|
Nr = new M,
|
|
Br = new M,
|
|
Fr = new T,
|
|
zr = new et;
|
|
|
|
function Ur(t, e) {
|
|
t && t.isGeometry && console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."), He.call(this, t, e), this.type = "SkinnedMesh", this.bindMode = "attached", this.bindMatrix = new et, this.bindMatrixInverse = new et
|
|
}
|
|
|
|
function Hr() {
|
|
St.call(this), this.type = "Bone"
|
|
}
|
|
Ur.prototype = Object.assign(Object.create(He.prototype), {
|
|
constructor: Ur,
|
|
isSkinnedMesh: !0,
|
|
copy: function(t) {
|
|
return He.prototype.copy.call(this, t), this.bindMode = t.bindMode, this.bindMatrix.copy(t.bindMatrix), this.bindMatrixInverse.copy(t.bindMatrixInverse), this.skeleton = t.skeleton, this
|
|
},
|
|
bind: function(t, e) {
|
|
this.skeleton = t, void 0 === e && (this.updateMatrixWorld(!0), this.skeleton.calculateInverses(), e = this.matrixWorld), this.bindMatrix.copy(e), this.bindMatrixInverse.copy(e).invert()
|
|
},
|
|
pose: function() {
|
|
this.skeleton.pose()
|
|
},
|
|
normalizeSkinWeights: function() {
|
|
const t = new M,
|
|
e = this.geometry.attributes.skinWeight;
|
|
for (let n = 0, i = e.count; n < i; n++) {
|
|
t.x = e.getX(n), t.y = e.getY(n), t.z = e.getZ(n), t.w = e.getW(n);
|
|
const i = 1 / t.manhattanLength();
|
|
i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w)
|
|
}
|
|
},
|
|
updateMatrixWorld: function(t) {
|
|
He.prototype.updateMatrixWorld.call(this, t), "attached" === this.bindMode ? this.bindMatrixInverse.copy(this.matrixWorld).invert() : "detached" === this.bindMode ? this.bindMatrixInverse.copy(this.bindMatrix).invert() : console.warn("THREE.SkinnedMesh: Unrecognized bindMode: " + this.bindMode)
|
|
},
|
|
boneTransform: function(t, e) {
|
|
const n = this.skeleton,
|
|
i = this.geometry;
|
|
Nr.fromBufferAttribute(i.attributes.skinIndex, t), Br.fromBufferAttribute(i.attributes.skinWeight, t), Or.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), e.set(0, 0, 0);
|
|
for (let t = 0; t < 4; t++) {
|
|
const i = Br.getComponent(t);
|
|
if (0 !== i) {
|
|
const r = Nr.getComponent(t);
|
|
zr.multiplyMatrices(n.bones[r].matrixWorld, n.boneInverses[r]), e.addScaledVector(Fr.copy(Or).applyMatrix4(zr), i)
|
|
}
|
|
}
|
|
return e.applyMatrix4(this.bindMatrixInverse)
|
|
}
|
|
}), Hr.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: Hr,
|
|
isBone: !0
|
|
});
|
|
const Gr = new et,
|
|
Vr = new et;
|
|
|
|
function kr(t = [], e = []) {
|
|
this.uuid = g.generateUUID(), this.bones = t.slice(0), this.boneInverses = e, this.boneMatrices = null, this.boneTexture = null, this.boneTextureSize = 0, this.frame = -1, this.init()
|
|
}
|
|
Object.assign(kr.prototype, {
|
|
init: function() {
|
|
const t = this.bones,
|
|
e = this.boneInverses;
|
|
if (this.boneMatrices = new Float32Array(16 * t.length), 0 === e.length) this.calculateInverses();
|
|
else if (t.length !== e.length) {
|
|
console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."), this.boneInverses = [];
|
|
for (let t = 0, e = this.bones.length; t < e; t++) this.boneInverses.push(new et)
|
|
}
|
|
},
|
|
calculateInverses: function() {
|
|
this.boneInverses.length = 0;
|
|
for (let t = 0, e = this.bones.length; t < e; t++) {
|
|
const e = new et;
|
|
this.bones[t] && e.copy(this.bones[t].matrixWorld).invert(), this.boneInverses.push(e)
|
|
}
|
|
},
|
|
pose: function() {
|
|
for (let t = 0, e = this.bones.length; t < e; t++) {
|
|
const e = this.bones[t];
|
|
e && e.matrixWorld.copy(this.boneInverses[t]).invert()
|
|
}
|
|
for (let t = 0, e = this.bones.length; t < e; t++) {
|
|
const e = this.bones[t];
|
|
e && (e.parent && e.parent.isBone ? (e.matrix.copy(e.parent.matrixWorld).invert(), e.matrix.multiply(e.matrixWorld)) : e.matrix.copy(e.matrixWorld), e.matrix.decompose(e.position, e.quaternion, e.scale))
|
|
}
|
|
},
|
|
update: function() {
|
|
const t = this.bones,
|
|
e = this.boneInverses,
|
|
n = this.boneMatrices,
|
|
i = this.boneTexture;
|
|
for (let i = 0, r = t.length; i < r; i++) {
|
|
const r = t[i] ? t[i].matrixWorld : Vr;
|
|
Gr.multiplyMatrices(r, e[i]), Gr.toArray(n, 16 * i)
|
|
}
|
|
null !== i && (i.needsUpdate = !0)
|
|
},
|
|
clone: function() {
|
|
return new kr(this.bones, this.boneInverses)
|
|
},
|
|
getBoneByName: function(t) {
|
|
for (let e = 0, n = this.bones.length; e < n; e++) {
|
|
const n = this.bones[e];
|
|
if (n.name === t) return n
|
|
}
|
|
},
|
|
dispose: function() {
|
|
null !== this.boneTexture && (this.boneTexture.dispose(), this.boneTexture = null)
|
|
},
|
|
fromJSON: function(t, e) {
|
|
this.uuid = t.uuid;
|
|
for (let n = 0, i = t.bones.length; n < i; n++) {
|
|
const i = t.bones[n];
|
|
let r = e[i];
|
|
void 0 === r && (console.warn("THREE.Skeleton: No bone found with UUID:", i), r = new Hr), this.bones.push(r), this.boneInverses.push((new et).fromArray(t.boneInverses[n]))
|
|
}
|
|
return this.init(), this
|
|
},
|
|
toJSON: function() {
|
|
const t = {
|
|
metadata: {
|
|
version: 4.5,
|
|
type: "Skeleton",
|
|
generator: "Skeleton.toJSON"
|
|
},
|
|
bones: [],
|
|
boneInverses: []
|
|
};
|
|
t.uuid = this.uuid;
|
|
const e = this.bones,
|
|
n = this.boneInverses;
|
|
for (let i = 0, r = e.length; i < r; i++) {
|
|
const r = e[i];
|
|
t.bones.push(r.uuid);
|
|
const o = n[i];
|
|
t.boneInverses.push(o.toArray())
|
|
}
|
|
return t
|
|
}
|
|
});
|
|
const Wr = new et,
|
|
jr = new et,
|
|
Xr = [],
|
|
qr = new He;
|
|
|
|
function Yr(t, e, n) {
|
|
He.call(this, t, e), this.instanceMatrix = new ee(new Float32Array(16 * n), 16), this.instanceColor = null, this.count = n, this.frustumCulled = !1
|
|
}
|
|
|
|
function Qr(t) {
|
|
Jt.call(this), this.type = "LineBasicMaterial", this.color = new Yt(16777215), this.linewidth = 1, this.linecap = "round", this.linejoin = "round", this.morphTargets = !1, this.setValues(t)
|
|
}
|
|
Yr.prototype = Object.assign(Object.create(He.prototype), {
|
|
constructor: Yr,
|
|
isInstancedMesh: !0,
|
|
copy: function(t) {
|
|
return He.prototype.copy.call(this, t), this.instanceMatrix.copy(t.instanceMatrix), null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), this.count = t.count, this
|
|
},
|
|
getColorAt: function(t, e) {
|
|
e.fromArray(this.instanceColor.array, 3 * t)
|
|
},
|
|
getMatrixAt: function(t, e) {
|
|
e.fromArray(this.instanceMatrix.array, 16 * t)
|
|
},
|
|
raycast: function(t, e) {
|
|
const n = this.matrixWorld,
|
|
i = this.count;
|
|
if (qr.geometry = this.geometry, qr.material = this.material, void 0 !== qr.material)
|
|
for (let r = 0; r < i; r++) {
|
|
this.getMatrixAt(r, Wr), jr.multiplyMatrices(n, Wr), qr.matrixWorld = jr, qr.raycast(t, Xr);
|
|
for (let t = 0, n = Xr.length; t < n; t++) {
|
|
const n = Xr[t];
|
|
n.instanceId = r, n.object = this, e.push(n)
|
|
}
|
|
Xr.length = 0
|
|
}
|
|
},
|
|
setColorAt: function(t, e) {
|
|
null === this.instanceColor && (this.instanceColor = new ee(new Float32Array(3 * this.count), 3)), e.toArray(this.instanceColor.array, 3 * t)
|
|
},
|
|
setMatrixAt: function(t, e) {
|
|
e.toArray(this.instanceMatrix.array, 16 * t)
|
|
},
|
|
updateMorphTargets: function() {},
|
|
dispose: function() {
|
|
this.dispatchEvent({
|
|
type: "dispose"
|
|
})
|
|
}
|
|
}), Qr.prototype = Object.create(Jt.prototype), Qr.prototype.constructor = Qr, Qr.prototype.isLineBasicMaterial = !0, Qr.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.linewidth = t.linewidth, this.linecap = t.linecap, this.linejoin = t.linejoin, this.morphTargets = t.morphTargets, this
|
|
};
|
|
const Zr = new T,
|
|
Jr = new T,
|
|
Kr = new et,
|
|
$r = new tt,
|
|
to = new X;
|
|
|
|
function eo(t = new be, e = new Qr) {
|
|
St.call(this), this.type = "Line", this.geometry = t, this.material = e, this.updateMorphTargets()
|
|
}
|
|
eo.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: eo,
|
|
isLine: !0,
|
|
copy: function(t) {
|
|
return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this
|
|
},
|
|
computeLineDistances: function() {
|
|
const t = this.geometry;
|
|
if (t.isBufferGeometry)
|
|
if (null === t.index) {
|
|
const e = t.attributes.position,
|
|
n = [0];
|
|
for (let t = 1, i = e.count; t < i; t++) Zr.fromBufferAttribute(e, t - 1), Jr.fromBufferAttribute(e, t), n[t] = n[t - 1], n[t] += Zr.distanceTo(Jr);
|
|
t.setAttribute("lineDistance", new he(n, 1))
|
|
} else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");
|
|
else t.isGeometry && console.error("THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");
|
|
return this
|
|
},
|
|
raycast: function(t, e) {
|
|
const n = this.geometry,
|
|
i = this.matrixWorld,
|
|
r = t.params.Line.threshold;
|
|
if (null === n.boundingSphere && n.computeBoundingSphere(), to.copy(n.boundingSphere), to.applyMatrix4(i), to.radius += r, !1 === t.ray.intersectsSphere(to)) return;
|
|
Kr.copy(i).invert(), $r.copy(t.ray).applyMatrix4(Kr);
|
|
const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3),
|
|
s = o * o,
|
|
a = new T,
|
|
l = new T,
|
|
c = new T,
|
|
h = new T,
|
|
u = this.isLineSegments ? 2 : 1;
|
|
if (n.isBufferGeometry) {
|
|
const i = n.index,
|
|
r = n.attributes.position;
|
|
if (null !== i) {
|
|
const n = i.array;
|
|
for (let i = 0, o = n.length - 1; i < o; i += u) {
|
|
const o = n[i],
|
|
u = n[i + 1];
|
|
a.fromBufferAttribute(r, o), l.fromBufferAttribute(r, u);
|
|
if ($r.distanceSqToSegment(a, l, h, c) > s) continue;
|
|
h.applyMatrix4(this.matrixWorld);
|
|
const d = t.ray.origin.distanceTo(h);
|
|
d < t.near || d > t.far || e.push({
|
|
distance: d,
|
|
point: c.clone().applyMatrix4(this.matrixWorld),
|
|
index: i,
|
|
face: null,
|
|
faceIndex: null,
|
|
object: this
|
|
})
|
|
}
|
|
} else
|
|
for (let n = 0, i = r.count - 1; n < i; n += u) {
|
|
a.fromBufferAttribute(r, n), l.fromBufferAttribute(r, n + 1);
|
|
if ($r.distanceSqToSegment(a, l, h, c) > s) continue;
|
|
h.applyMatrix4(this.matrixWorld);
|
|
const i = t.ray.origin.distanceTo(h);
|
|
i < t.near || i > t.far || e.push({
|
|
distance: i,
|
|
point: c.clone().applyMatrix4(this.matrixWorld),
|
|
index: n,
|
|
face: null,
|
|
faceIndex: null,
|
|
object: this
|
|
})
|
|
}
|
|
} else n.isGeometry && console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
},
|
|
updateMorphTargets: function() {
|
|
const t = this.geometry;
|
|
if (t.isBufferGeometry) {
|
|
const e = t.morphAttributes,
|
|
n = Object.keys(e);
|
|
if (n.length > 0) {
|
|
const t = e[n[0]];
|
|
if (void 0 !== t) {
|
|
this.morphTargetInfluences = [], this.morphTargetDictionary = {};
|
|
for (let e = 0, n = t.length; e < n; e++) {
|
|
const n = t[e].name || String(e);
|
|
this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
const e = t.morphTargets;
|
|
void 0 !== e && e.length > 0 && console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
}
|
|
}
|
|
});
|
|
const no = new T,
|
|
io = new T;
|
|
|
|
function ro(t, e) {
|
|
eo.call(this, t, e), this.type = "LineSegments"
|
|
}
|
|
|
|
function oo(t, e) {
|
|
eo.call(this, t, e), this.type = "LineLoop"
|
|
}
|
|
|
|
function so(t) {
|
|
Jt.call(this), this.type = "PointsMaterial", this.color = new Yt(16777215), this.map = null, this.alphaMap = null, this.size = 1, this.sizeAttenuation = !0, this.morphTargets = !1, this.setValues(t)
|
|
}
|
|
ro.prototype = Object.assign(Object.create(eo.prototype), {
|
|
constructor: ro,
|
|
isLineSegments: !0,
|
|
computeLineDistances: function() {
|
|
const t = this.geometry;
|
|
if (t.isBufferGeometry)
|
|
if (null === t.index) {
|
|
const e = t.attributes.position,
|
|
n = [];
|
|
for (let t = 0, i = e.count; t < i; t += 2) no.fromBufferAttribute(e, t), io.fromBufferAttribute(e, t + 1), n[t] = 0 === t ? 0 : n[t - 1], n[t + 1] = n[t] + no.distanceTo(io);
|
|
t.setAttribute("lineDistance", new he(n, 1))
|
|
} else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");
|
|
else t.isGeometry && console.error("THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");
|
|
return this
|
|
}
|
|
}), oo.prototype = Object.assign(Object.create(eo.prototype), {
|
|
constructor: oo,
|
|
isLineLoop: !0
|
|
}), so.prototype = Object.create(Jt.prototype), so.prototype.constructor = so, so.prototype.isPointsMaterial = !0, so.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.alphaMap = t.alphaMap, this.size = t.size, this.sizeAttenuation = t.sizeAttenuation, this.morphTargets = t.morphTargets, this
|
|
};
|
|
const ao = new et,
|
|
lo = new tt,
|
|
co = new X,
|
|
ho = new T;
|
|
|
|
function uo(t = new be, e = new so) {
|
|
St.call(this), this.type = "Points", this.geometry = t, this.material = e, this.updateMorphTargets()
|
|
}
|
|
|
|
function po(t, e, n, i, r, o, s) {
|
|
const a = lo.distanceSqToPoint(t);
|
|
if (a < n) {
|
|
const n = new T;
|
|
lo.closestPointToPoint(t, n), n.applyMatrix4(i);
|
|
const l = r.ray.origin.distanceTo(n);
|
|
if (l < r.near || l > r.far) return;
|
|
o.push({
|
|
distance: l,
|
|
distanceToRay: Math.sqrt(a),
|
|
point: n,
|
|
index: e,
|
|
face: null,
|
|
object: s
|
|
})
|
|
}
|
|
}
|
|
|
|
function fo(t, e, n, i, r, o, s, a, l) {
|
|
b.call(this, t, e, n, i, r, o, s, a, l), this.format = void 0 !== s ? s : 1022, this.minFilter = void 0 !== o ? o : 1006, this.magFilter = void 0 !== r ? r : 1006, this.generateMipmaps = !1;
|
|
const c = this;
|
|
"requestVideoFrameCallback" in t && t.requestVideoFrameCallback((function e() {
|
|
c.needsUpdate = !0, t.requestVideoFrameCallback(e)
|
|
}))
|
|
}
|
|
|
|
function mo(t, e, n, i, r, o, s, a, l, c, h, u) {
|
|
b.call(this, null, o, s, a, l, c, i, r, h, u), this.image = {
|
|
width: e,
|
|
height: n
|
|
}, this.mipmaps = t, this.flipY = !1, this.generateMipmaps = !1
|
|
}
|
|
|
|
function go(t, e, n, i, r, o, s, a, l) {
|
|
b.call(this, t, e, n, i, r, o, s, a, l), this.needsUpdate = !0
|
|
}
|
|
|
|
function vo(t, e, n, i, r, o, s, a, l, c) {
|
|
if (1026 !== (c = void 0 !== c ? c : 1026) && 1027 !== c) throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");
|
|
void 0 === n && 1026 === c && (n = 1012), void 0 === n && 1027 === c && (n = 1020), b.call(this, null, i, r, o, s, a, c, n, l), this.image = {
|
|
width: t,
|
|
height: e
|
|
}, this.magFilter = void 0 !== s ? s : 1003, this.minFilter = void 0 !== a ? a : 1003, this.flipY = !1, this.generateMipmaps = !1
|
|
}
|
|
uo.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: uo,
|
|
isPoints: !0,
|
|
copy: function(t) {
|
|
return St.prototype.copy.call(this, t), this.material = t.material, this.geometry = t.geometry, this
|
|
},
|
|
raycast: function(t, e) {
|
|
const n = this.geometry,
|
|
i = this.matrixWorld,
|
|
r = t.params.Points.threshold;
|
|
if (null === n.boundingSphere && n.computeBoundingSphere(), co.copy(n.boundingSphere), co.applyMatrix4(i), co.radius += r, !1 === t.ray.intersectsSphere(co)) return;
|
|
ao.copy(i).invert(), lo.copy(t.ray).applyMatrix4(ao);
|
|
const o = r / ((this.scale.x + this.scale.y + this.scale.z) / 3),
|
|
s = o * o;
|
|
if (n.isBufferGeometry) {
|
|
const r = n.index,
|
|
o = n.attributes.position;
|
|
if (null !== r) {
|
|
const n = r.array;
|
|
for (let r = 0, a = n.length; r < a; r++) {
|
|
const a = n[r];
|
|
ho.fromBufferAttribute(o, a), po(ho, a, s, i, t, e, this)
|
|
}
|
|
} else
|
|
for (let n = 0, r = o.count; n < r; n++) ho.fromBufferAttribute(o, n), po(ho, n, s, i, t, e, this)
|
|
} else console.error("THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
},
|
|
updateMorphTargets: function() {
|
|
const t = this.geometry;
|
|
if (t.isBufferGeometry) {
|
|
const e = t.morphAttributes,
|
|
n = Object.keys(e);
|
|
if (n.length > 0) {
|
|
const t = e[n[0]];
|
|
if (void 0 !== t) {
|
|
this.morphTargetInfluences = [], this.morphTargetDictionary = {};
|
|
for (let e = 0, n = t.length; e < n; e++) {
|
|
const n = t[e].name || String(e);
|
|
this.morphTargetInfluences.push(0), this.morphTargetDictionary[n] = e
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
const e = t.morphTargets;
|
|
void 0 !== e && e.length > 0 && console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")
|
|
}
|
|
}
|
|
}), fo.prototype = Object.assign(Object.create(b.prototype), {
|
|
constructor: fo,
|
|
clone: function() {
|
|
return new this.constructor(this.image).copy(this)
|
|
},
|
|
isVideoTexture: !0,
|
|
update: function() {
|
|
const t = this.image;
|
|
!1 === "requestVideoFrameCallback" in t && t.readyState >= t.HAVE_CURRENT_DATA && (this.needsUpdate = !0)
|
|
}
|
|
}), mo.prototype = Object.create(b.prototype), mo.prototype.constructor = mo, mo.prototype.isCompressedTexture = !0, go.prototype = Object.create(b.prototype), go.prototype.constructor = go, go.prototype.isCanvasTexture = !0, vo.prototype = Object.create(b.prototype), vo.prototype.constructor = vo, vo.prototype.isDepthTexture = !0;
|
|
new T, new T, new T, new Gt;
|
|
const yo = function(t, e, n) {
|
|
n = n || 2;
|
|
const i = e && e.length,
|
|
r = i ? e[0] * n : t.length;
|
|
let o = Ao(t, 0, r, n, !0);
|
|
const s = [];
|
|
if (!o || o.next === o.prev) return s;
|
|
let a, l, c, h, u, d, p;
|
|
if (i && (o = function(t, e, n, i) {
|
|
const r = [];
|
|
let o, s, a, l, c;
|
|
for (o = 0, s = e.length; o < s; o++) a = e[o] * i, l = o < s - 1 ? e[o + 1] * i : t.length, c = Ao(t, a, l, i, !1), c === c.next && (c.steiner = !0), r.push(Co(c));
|
|
for (r.sort(So), o = 0; o < r.length; o++) To(r[o], n), n = xo(n, n.next);
|
|
return n
|
|
}(t, e, o, n)), t.length > 80 * n) {
|
|
a = c = t[0], l = h = t[1];
|
|
for (let e = n; e < r; e += n) u = t[e], d = t[e + 1], u < a && (a = u), d < l && (l = d), u > c && (c = u), d > h && (h = d);
|
|
p = Math.max(c - a, h - l), p = 0 !== p ? 1 / p : 0
|
|
}
|
|
return _o(o, s, n, a, l, p), s
|
|
};
|
|
|
|
function Ao(t, e, n, i, r) {
|
|
let o, s;
|
|
if (r === function(t, e, n, i) {
|
|
let r = 0;
|
|
for (let o = e, s = n - i; o < n; o += i) r += (t[s] - t[o]) * (t[o + 1] + t[s + 1]), s = o;
|
|
return r
|
|
}(t, e, n, i) > 0)
|
|
for (o = e; o < n; o += i) s = Ho(o, t[o], t[o + 1], s);
|
|
else
|
|
for (o = n - i; o >= e; o -= i) s = Ho(o, t[o], t[o + 1], s);
|
|
return s && Oo(s, s.next) && (Go(s), s = s.next), s
|
|
}
|
|
|
|
function xo(t, e) {
|
|
if (!t) return t;
|
|
e || (e = t);
|
|
let n, i = t;
|
|
do {
|
|
if (n = !1, i.steiner || !Oo(i, i.next) && 0 !== Io(i.prev, i, i.next)) i = i.next;
|
|
else {
|
|
if (Go(i), i = e = i.prev, i === i.next) break;
|
|
n = !0
|
|
}
|
|
} while (n || i !== e);
|
|
return e
|
|
}
|
|
|
|
function _o(t, e, n, i, r, o, s) {
|
|
if (!t) return;
|
|
!s && o && function(t, e, n, i) {
|
|
let r = t;
|
|
do {
|
|
null === r.z && (r.z = Ro(r.x, r.y, e, n, i)), r.prevZ = r.prev, r.nextZ = r.next, r = r.next
|
|
} while (r !== t);
|
|
r.prevZ.nextZ = null, r.prevZ = null,
|
|
function(t) {
|
|
let e, n, i, r, o, s, a, l, c = 1;
|
|
do {
|
|
for (n = t, t = null, o = null, s = 0; n;) {
|
|
for (s++, i = n, a = 0, e = 0; e < c && (a++, i = i.nextZ, i); e++);
|
|
for (l = c; a > 0 || l > 0 && i;) 0 !== a && (0 === l || !i || n.z <= i.z) ? (r = n, n = n.nextZ, a--) : (r = i, i = i.nextZ, l--), o ? o.nextZ = r : t = r, r.prevZ = o, o = r;
|
|
n = i
|
|
}
|
|
o.nextZ = null, c *= 2
|
|
} while (s > 1)
|
|
}(r)
|
|
}(t, i, r, o);
|
|
let a, l, c = t;
|
|
for (; t.prev !== t.next;)
|
|
if (a = t.prev, l = t.next, o ? wo(t, i, r, o) : bo(t)) e.push(a.i / n), e.push(t.i / n), e.push(l.i / n), Go(t), t = l.next, c = l.next;
|
|
else if ((t = l) === c) {
|
|
s ? 1 === s ? _o(t = Mo(xo(t), e, n), e, n, i, r, o, 2) : 2 === s && Eo(t, e, n, i, r, o) : _o(xo(t), e, n, i, r, o, 1);
|
|
break
|
|
}
|
|
}
|
|
|
|
function bo(t) {
|
|
const e = t.prev,
|
|
n = t,
|
|
i = t.next;
|
|
if (Io(e, n, i) >= 0) return !1;
|
|
let r = t.next.next;
|
|
for (; r !== t.prev;) {
|
|
if (Po(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Io(r.prev, r, r.next) >= 0) return !1;
|
|
r = r.next
|
|
}
|
|
return !0
|
|
}
|
|
|
|
function wo(t, e, n, i) {
|
|
const r = t.prev,
|
|
o = t,
|
|
s = t.next;
|
|
if (Io(r, o, s) >= 0) return !1;
|
|
const a = r.x < o.x ? r.x < s.x ? r.x : s.x : o.x < s.x ? o.x : s.x,
|
|
l = r.y < o.y ? r.y < s.y ? r.y : s.y : o.y < s.y ? o.y : s.y,
|
|
c = r.x > o.x ? r.x > s.x ? r.x : s.x : o.x > s.x ? o.x : s.x,
|
|
h = r.y > o.y ? r.y > s.y ? r.y : s.y : o.y > s.y ? o.y : s.y,
|
|
u = Ro(a, l, e, n, i),
|
|
d = Ro(c, h, e, n, i);
|
|
let p = t.prevZ,
|
|
f = t.nextZ;
|
|
for (; p && p.z >= u && f && f.z <= d;) {
|
|
if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1;
|
|
if (p = p.prevZ, f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1;
|
|
f = f.nextZ
|
|
}
|
|
for (; p && p.z >= u;) {
|
|
if (p !== t.prev && p !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, p.x, p.y) && Io(p.prev, p, p.next) >= 0) return !1;
|
|
p = p.prevZ
|
|
}
|
|
for (; f && f.z <= d;) {
|
|
if (f !== t.prev && f !== t.next && Po(r.x, r.y, o.x, o.y, s.x, s.y, f.x, f.y) && Io(f.prev, f, f.next) >= 0) return !1;
|
|
f = f.nextZ
|
|
}
|
|
return !0
|
|
}
|
|
|
|
function Mo(t, e, n) {
|
|
let i = t;
|
|
do {
|
|
const r = i.prev,
|
|
o = i.next.next;
|
|
!Oo(r, o) && No(r, i, i.next, o) && zo(r, o) && zo(o, r) && (e.push(r.i / n), e.push(i.i / n), e.push(o.i / n), Go(i), Go(i.next), i = t = o), i = i.next
|
|
} while (i !== t);
|
|
return xo(i)
|
|
}
|
|
|
|
function Eo(t, e, n, i, r, o) {
|
|
let s = t;
|
|
do {
|
|
let t = s.next.next;
|
|
for (; t !== s.prev;) {
|
|
if (s.i !== t.i && Do(s, t)) {
|
|
let a = Uo(s, t);
|
|
return s = xo(s, s.next), a = xo(a, a.next), _o(s, e, n, i, r, o), void _o(a, e, n, i, r, o)
|
|
}
|
|
t = t.next
|
|
}
|
|
s = s.next
|
|
} while (s !== t)
|
|
}
|
|
|
|
function So(t, e) {
|
|
return t.x - e.x
|
|
}
|
|
|
|
function To(t, e) {
|
|
if (e = function(t, e) {
|
|
let n = e;
|
|
const i = t.x,
|
|
r = t.y;
|
|
let o, s = -1 / 0;
|
|
do {
|
|
if (r <= n.y && r >= n.next.y && n.next.y !== n.y) {
|
|
const t = n.x + (r - n.y) * (n.next.x - n.x) / (n.next.y - n.y);
|
|
if (t <= i && t > s) {
|
|
if (s = t, t === i) {
|
|
if (r === n.y) return n;
|
|
if (r === n.next.y) return n.next
|
|
}
|
|
o = n.x < n.next.x ? n : n.next
|
|
}
|
|
}
|
|
n = n.next
|
|
} while (n !== e);
|
|
if (!o) return null;
|
|
if (i === s) return o;
|
|
const a = o,
|
|
l = o.x,
|
|
c = o.y;
|
|
let h, u = 1 / 0;
|
|
n = o;
|
|
do {
|
|
i >= n.x && n.x >= l && i !== n.x && Po(r < c ? i : s, r, l, c, r < c ? s : i, r, n.x, n.y) && (h = Math.abs(r - n.y) / (i - n.x), zo(n, t) && (h < u || h === u && (n.x > o.x || n.x === o.x && Lo(o, n))) && (o = n, u = h)), n = n.next
|
|
} while (n !== a);
|
|
return o
|
|
}(t, e)) {
|
|
const n = Uo(e, t);
|
|
xo(e, e.next), xo(n, n.next)
|
|
}
|
|
}
|
|
|
|
function Lo(t, e) {
|
|
return Io(t.prev, t, e.prev) < 0 && Io(e.next, t, t.next) < 0
|
|
}
|
|
|
|
function Ro(t, e, n, i, r) {
|
|
return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1
|
|
}
|
|
|
|
function Co(t) {
|
|
let e = t,
|
|
n = t;
|
|
do {
|
|
(e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next
|
|
} while (e !== t);
|
|
return n
|
|
}
|
|
|
|
function Po(t, e, n, i, r, o, s, a) {
|
|
return (r - s) * (e - a) - (t - s) * (o - a) >= 0 && (t - s) * (i - a) - (n - s) * (e - a) >= 0 && (n - s) * (o - a) - (r - s) * (i - a) >= 0
|
|
}
|
|
|
|
function Do(t, e) {
|
|
return t.next.i !== e.i && t.prev.i !== e.i && ! function(t, e) {
|
|
let n = t;
|
|
do {
|
|
if (n.i !== t.i && n.next.i !== t.i && n.i !== e.i && n.next.i !== e.i && No(n, n.next, t, e)) return !0;
|
|
n = n.next
|
|
} while (n !== t);
|
|
return !1
|
|
}(t, e) && (zo(t, e) && zo(e, t) && function(t, e) {
|
|
let n = t,
|
|
i = !1;
|
|
const r = (t.x + e.x) / 2,
|
|
o = (t.y + e.y) / 2;
|
|
do {
|
|
n.y > o != n.next.y > o && n.next.y !== n.y && r < (n.next.x - n.x) * (o - n.y) / (n.next.y - n.y) + n.x && (i = !i), n = n.next
|
|
} while (n !== t);
|
|
return i
|
|
}(t, e) && (Io(t.prev, t, e.prev) || Io(t, e.prev, e)) || Oo(t, e) && Io(t.prev, t, t.next) > 0 && Io(e.prev, e, e.next) > 0)
|
|
}
|
|
|
|
function Io(t, e, n) {
|
|
return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y)
|
|
}
|
|
|
|
function Oo(t, e) {
|
|
return t.x === e.x && t.y === e.y
|
|
}
|
|
|
|
function No(t, e, n, i) {
|
|
const r = Fo(Io(t, e, n)),
|
|
o = Fo(Io(t, e, i)),
|
|
s = Fo(Io(n, i, t)),
|
|
a = Fo(Io(n, i, e));
|
|
return r !== o && s !== a || (!(0 !== r || !Bo(t, n, e)) || (!(0 !== o || !Bo(t, i, e)) || (!(0 !== s || !Bo(n, t, i)) || !(0 !== a || !Bo(n, e, i)))))
|
|
}
|
|
|
|
function Bo(t, e, n) {
|
|
return e.x <= Math.max(t.x, n.x) && e.x >= Math.min(t.x, n.x) && e.y <= Math.max(t.y, n.y) && e.y >= Math.min(t.y, n.y)
|
|
}
|
|
|
|
function Fo(t) {
|
|
return t > 0 ? 1 : t < 0 ? -1 : 0
|
|
}
|
|
|
|
function zo(t, e) {
|
|
return Io(t.prev, t, t.next) < 0 ? Io(t, e, t.next) >= 0 && Io(t, t.prev, e) >= 0 : Io(t, e, t.prev) < 0 || Io(t, t.next, e) < 0
|
|
}
|
|
|
|
function Uo(t, e) {
|
|
const n = new Vo(t.i, t.x, t.y),
|
|
i = new Vo(e.i, e.x, e.y),
|
|
r = t.next,
|
|
o = e.prev;
|
|
return t.next = e, e.prev = t, n.next = r, r.prev = n, i.next = n, n.prev = i, o.next = i, i.prev = o, i
|
|
}
|
|
|
|
function Ho(t, e, n, i) {
|
|
const r = new Vo(t, e, n);
|
|
return i ? (r.next = i.next, r.prev = i, i.next.prev = r, i.next = r) : (r.prev = r, r.next = r), r
|
|
}
|
|
|
|
function Go(t) {
|
|
t.next.prev = t.prev, t.prev.next = t.next, t.prevZ && (t.prevZ.nextZ = t.nextZ), t.nextZ && (t.nextZ.prevZ = t.prevZ)
|
|
}
|
|
|
|
function Vo(t, e, n) {
|
|
this.i = t, this.x = e, this.y = n, this.prev = null, this.next = null, this.z = null, this.prevZ = null, this.nextZ = null, this.steiner = !1
|
|
}
|
|
const ko = {
|
|
area: function(t) {
|
|
const e = t.length;
|
|
let n = 0;
|
|
for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y;
|
|
return .5 * n
|
|
},
|
|
isClockWise: function(t) {
|
|
return ko.area(t) < 0
|
|
},
|
|
triangulateShape: function(t, e) {
|
|
const n = [],
|
|
i = [],
|
|
r = [];
|
|
Wo(t), jo(n, t);
|
|
let o = t.length;
|
|
e.forEach(Wo);
|
|
for (let t = 0; t < e.length; t++) i.push(o), o += e[t].length, jo(n, e[t]);
|
|
const s = yo(n, i);
|
|
for (let t = 0; t < s.length; t += 3) r.push(s.slice(t, t + 3));
|
|
return r
|
|
}
|
|
};
|
|
|
|
function Wo(t) {
|
|
const e = t.length;
|
|
e > 2 && t[e - 1].equals(t[0]) && t.pop()
|
|
}
|
|
|
|
function jo(t, e) {
|
|
for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y)
|
|
}
|
|
class Xo extends be {
|
|
constructor(t, e) {
|
|
super(), this.type = "ExtrudeGeometry", this.parameters = {
|
|
shapes: t,
|
|
options: e
|
|
}, t = Array.isArray(t) ? t : [t];
|
|
const n = this,
|
|
i = [],
|
|
r = [];
|
|
for (let e = 0, n = t.length; e < n; e++) {
|
|
o(t[e])
|
|
}
|
|
|
|
function o(t) {
|
|
const o = [],
|
|
s = void 0 !== e.curveSegments ? e.curveSegments : 12,
|
|
a = void 0 !== e.steps ? e.steps : 1;
|
|
let l = void 0 !== e.depth ? e.depth : 100,
|
|
c = void 0 === e.bevelEnabled || e.bevelEnabled,
|
|
h = void 0 !== e.bevelThickness ? e.bevelThickness : 6,
|
|
u = void 0 !== e.bevelSize ? e.bevelSize : h - 2,
|
|
d = void 0 !== e.bevelOffset ? e.bevelOffset : 0,
|
|
p = void 0 !== e.bevelSegments ? e.bevelSegments : 3;
|
|
const f = e.extrudePath,
|
|
m = void 0 !== e.UVGenerator ? e.UVGenerator : qo;
|
|
void 0 !== e.amount && (console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."), l = e.amount);
|
|
let g, y, A, x, _, b = !1;
|
|
f && (g = f.getSpacedPoints(a), b = !0, c = !1, y = f.computeFrenetFrames(a, !1), A = new T, x = new T, _ = new T), c || (p = 0, h = 0, u = 0, d = 0);
|
|
const w = t.extractPoints(s);
|
|
let M = w.shape;
|
|
const E = w.holes;
|
|
if (!ko.isClockWise(M)) {
|
|
M = M.reverse();
|
|
for (let t = 0, e = E.length; t < e; t++) {
|
|
const e = E[t];
|
|
ko.isClockWise(e) && (E[t] = e.reverse())
|
|
}
|
|
}
|
|
const S = ko.triangulateShape(M, E),
|
|
L = M;
|
|
for (let t = 0, e = E.length; t < e; t++) {
|
|
const e = E[t];
|
|
M = M.concat(e)
|
|
}
|
|
|
|
function R(t, e, n) {
|
|
return e || console.error("THREE.ExtrudeGeometry: vec does not exist"), e.clone().multiplyScalar(n).add(t)
|
|
}
|
|
const C = M.length,
|
|
P = S.length;
|
|
|
|
function D(t, e, n) {
|
|
let i, r, o;
|
|
const s = t.x - e.x,
|
|
a = t.y - e.y,
|
|
l = n.x - t.x,
|
|
c = n.y - t.y,
|
|
h = s * s + a * a,
|
|
u = s * c - a * l;
|
|
if (Math.abs(u) > Number.EPSILON) {
|
|
const u = Math.sqrt(h),
|
|
d = Math.sqrt(l * l + c * c),
|
|
p = e.x - a / u,
|
|
f = e.y + s / u,
|
|
m = ((n.x - c / d - p) * c - (n.y + l / d - f) * l) / (s * c - a * l);
|
|
i = p + s * m - t.x, r = f + a * m - t.y;
|
|
const g = i * i + r * r;
|
|
if (g <= 2) return new v(i, r);
|
|
o = Math.sqrt(g / 2)
|
|
} else {
|
|
let t = !1;
|
|
s > Number.EPSILON ? l > Number.EPSILON && (t = !0) : s < -Number.EPSILON ? l < -Number.EPSILON && (t = !0) : Math.sign(a) === Math.sign(c) && (t = !0), t ? (i = -a, r = s, o = Math.sqrt(h)) : (i = s, r = a, o = Math.sqrt(h / 2))
|
|
}
|
|
return new v(i / o, r / o)
|
|
}
|
|
const I = [];
|
|
for (let t = 0, e = L.length, n = e - 1, i = t + 1; t < e; t++, n++, i++) n === e && (n = 0), i === e && (i = 0), I[t] = D(L[t], L[n], L[i]);
|
|
const O = [];
|
|
let N, B = I.concat();
|
|
for (let t = 0, e = E.length; t < e; t++) {
|
|
const e = E[t];
|
|
N = [];
|
|
for (let t = 0, n = e.length, i = n - 1, r = t + 1; t < n; t++, i++, r++) i === n && (i = 0), r === n && (r = 0), N[t] = D(e[t], e[i], e[r]);
|
|
O.push(N), B = B.concat(N)
|
|
}
|
|
for (let t = 0; t < p; t++) {
|
|
const e = t / p,
|
|
n = h * Math.cos(e * Math.PI / 2),
|
|
i = u * Math.sin(e * Math.PI / 2) + d;
|
|
for (let t = 0, e = L.length; t < e; t++) {
|
|
const e = R(L[t], I[t], i);
|
|
U(e.x, e.y, -n)
|
|
}
|
|
for (let t = 0, e = E.length; t < e; t++) {
|
|
const e = E[t];
|
|
N = O[t];
|
|
for (let t = 0, r = e.length; t < r; t++) {
|
|
const r = R(e[t], N[t], i);
|
|
U(r.x, r.y, -n)
|
|
}
|
|
}
|
|
}
|
|
const F = u + d;
|
|
for (let t = 0; t < C; t++) {
|
|
const e = c ? R(M[t], B[t], F) : M[t];
|
|
b ? (x.copy(y.normals[0]).multiplyScalar(e.x), A.copy(y.binormals[0]).multiplyScalar(e.y), _.copy(g[0]).add(x).add(A), U(_.x, _.y, _.z)) : U(e.x, e.y, 0)
|
|
}
|
|
for (let t = 1; t <= a; t++)
|
|
for (let e = 0; e < C; e++) {
|
|
const n = c ? R(M[e], B[e], F) : M[e];
|
|
b ? (x.copy(y.normals[t]).multiplyScalar(n.x), A.copy(y.binormals[t]).multiplyScalar(n.y), _.copy(g[t]).add(x).add(A), U(_.x, _.y, _.z)) : U(n.x, n.y, l / a * t)
|
|
}
|
|
for (let t = p - 1; t >= 0; t--) {
|
|
const e = t / p,
|
|
n = h * Math.cos(e * Math.PI / 2),
|
|
i = u * Math.sin(e * Math.PI / 2) + d;
|
|
for (let t = 0, e = L.length; t < e; t++) {
|
|
const e = R(L[t], I[t], i);
|
|
U(e.x, e.y, l + n)
|
|
}
|
|
for (let t = 0, e = E.length; t < e; t++) {
|
|
const e = E[t];
|
|
N = O[t];
|
|
for (let t = 0, r = e.length; t < r; t++) {
|
|
const r = R(e[t], N[t], i);
|
|
b ? U(r.x, r.y + g[a - 1].y, g[a - 1].x + n) : U(r.x, r.y, l + n)
|
|
}
|
|
}
|
|
}
|
|
|
|
function z(t, e) {
|
|
let n = t.length;
|
|
for (; --n >= 0;) {
|
|
const i = n;
|
|
let r = n - 1;
|
|
r < 0 && (r = t.length - 1);
|
|
for (let t = 0, n = a + 2 * p; t < n; t++) {
|
|
const n = C * t,
|
|
o = C * (t + 1);
|
|
G(e + i + n, e + r + n, e + r + o, e + i + o)
|
|
}
|
|
}
|
|
}
|
|
|
|
function U(t, e, n) {
|
|
o.push(t), o.push(e), o.push(n)
|
|
}
|
|
|
|
function H(t, e, r) {
|
|
V(t), V(e), V(r);
|
|
const o = i.length / 3,
|
|
s = m.generateTopUV(n, i, o - 3, o - 2, o - 1);
|
|
k(s[0]), k(s[1]), k(s[2])
|
|
}
|
|
|
|
function G(t, e, r, o) {
|
|
V(t), V(e), V(o), V(e), V(r), V(o);
|
|
const s = i.length / 3,
|
|
a = m.generateSideWallUV(n, i, s - 6, s - 3, s - 2, s - 1);
|
|
k(a[0]), k(a[1]), k(a[3]), k(a[1]), k(a[2]), k(a[3])
|
|
}
|
|
|
|
function V(t) {
|
|
i.push(o[3 * t + 0]), i.push(o[3 * t + 1]), i.push(o[3 * t + 2])
|
|
}
|
|
|
|
function k(t) {
|
|
r.push(t.x), r.push(t.y)
|
|
}! function() {
|
|
const t = i.length / 3;
|
|
if (c) {
|
|
let t = 0,
|
|
e = C * t;
|
|
for (let t = 0; t < P; t++) {
|
|
const n = S[t];
|
|
H(n[2] + e, n[1] + e, n[0] + e)
|
|
}
|
|
t = a + 2 * p, e = C * t;
|
|
for (let t = 0; t < P; t++) {
|
|
const n = S[t];
|
|
H(n[0] + e, n[1] + e, n[2] + e)
|
|
}
|
|
} else {
|
|
for (let t = 0; t < P; t++) {
|
|
const e = S[t];
|
|
H(e[2], e[1], e[0])
|
|
}
|
|
for (let t = 0; t < P; t++) {
|
|
const e = S[t];
|
|
H(e[0] + C * a, e[1] + C * a, e[2] + C * a)
|
|
}
|
|
}
|
|
n.addGroup(t, i.length / 3 - t, 0)
|
|
}(),
|
|
function() {
|
|
const t = i.length / 3;
|
|
let e = 0;
|
|
z(L, e), e += L.length;
|
|
for (let t = 0, n = E.length; t < n; t++) {
|
|
const n = E[t];
|
|
z(n, e), e += n.length
|
|
}
|
|
n.addGroup(t, i.length / 3 - t, 1)
|
|
}()
|
|
}
|
|
this.setAttribute("position", new he(i, 3)), this.setAttribute("uv", new he(r, 2)), this.computeVertexNormals()
|
|
}
|
|
toJSON() {
|
|
const t = be.prototype.toJSON.call(this);
|
|
return function(t, e, n) {
|
|
if (n.shapes = [], Array.isArray(t))
|
|
for (let e = 0, i = t.length; e < i; e++) {
|
|
const i = t[e];
|
|
n.shapes.push(i.uuid)
|
|
} else n.shapes.push(t.uuid);
|
|
void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON());
|
|
return n
|
|
}(this.parameters.shapes, this.parameters.options, t)
|
|
}
|
|
}
|
|
const qo = {
|
|
generateTopUV: function(t, e, n, i, r) {
|
|
const o = e[3 * n],
|
|
s = e[3 * n + 1],
|
|
a = e[3 * i],
|
|
l = e[3 * i + 1],
|
|
c = e[3 * r],
|
|
h = e[3 * r + 1];
|
|
return [new v(o, s), new v(a, l), new v(c, h)]
|
|
},
|
|
generateSideWallUV: function(t, e, n, i, r, o) {
|
|
const s = e[3 * n],
|
|
a = e[3 * n + 1],
|
|
l = e[3 * n + 2],
|
|
c = e[3 * i],
|
|
h = e[3 * i + 1],
|
|
u = e[3 * i + 2],
|
|
d = e[3 * r],
|
|
p = e[3 * r + 1],
|
|
f = e[3 * r + 2],
|
|
m = e[3 * o],
|
|
g = e[3 * o + 1],
|
|
y = e[3 * o + 2];
|
|
return Math.abs(a - h) < .01 ? [new v(s, 1 - l), new v(c, 1 - u), new v(d, 1 - f), new v(m, 1 - y)] : [new v(a, 1 - l), new v(h, 1 - u), new v(p, 1 - f), new v(g, 1 - y)]
|
|
}
|
|
};
|
|
|
|
function Yo(t, e, n) {
|
|
be.call(this), this.type = "ParametricGeometry", this.parameters = {
|
|
func: t,
|
|
slices: e,
|
|
stacks: n
|
|
};
|
|
const i = [],
|
|
r = [],
|
|
o = [],
|
|
s = [],
|
|
a = 1e-5,
|
|
l = new T,
|
|
c = new T,
|
|
h = new T,
|
|
u = new T,
|
|
d = new T;
|
|
t.length < 3 && console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");
|
|
const p = e + 1;
|
|
for (let i = 0; i <= n; i++) {
|
|
const p = i / n;
|
|
for (let n = 0; n <= e; n++) {
|
|
const i = n / e;
|
|
t(i, p, c), r.push(c.x, c.y, c.z), i - a >= 0 ? (t(i - a, p, h), u.subVectors(c, h)) : (t(i + a, p, h), u.subVectors(h, c)), p - a >= 0 ? (t(i, p - a, h), d.subVectors(c, h)) : (t(i, p + a, h), d.subVectors(h, c)), l.crossVectors(u, d).normalize(), o.push(l.x, l.y, l.z), s.push(i, p)
|
|
}
|
|
}
|
|
for (let t = 0; t < n; t++)
|
|
for (let n = 0; n < e; n++) {
|
|
const e = t * p + n,
|
|
r = t * p + n + 1,
|
|
o = (t + 1) * p + n + 1,
|
|
s = (t + 1) * p + n;
|
|
i.push(e, r, s), i.push(r, o, s)
|
|
}
|
|
this.setIndex(i), this.setAttribute("position", new he(r, 3)), this.setAttribute("normal", new he(o, 3)), this.setAttribute("uv", new he(s, 2))
|
|
}
|
|
Yo.prototype = Object.create(be.prototype), Yo.prototype.constructor = Yo;
|
|
class Qo extends be {
|
|
constructor(t, e = 12) {
|
|
super(), this.type = "ShapeGeometry", this.parameters = {
|
|
shapes: t,
|
|
curveSegments: e
|
|
};
|
|
const n = [],
|
|
i = [],
|
|
r = [],
|
|
o = [];
|
|
let s = 0,
|
|
a = 0;
|
|
if (!1 === Array.isArray(t)) l(t);
|
|
else
|
|
for (let e = 0; e < t.length; e++) l(t[e]), this.addGroup(s, a, e), s += a, a = 0;
|
|
|
|
function l(t) {
|
|
const s = i.length / 3,
|
|
l = t.extractPoints(e);
|
|
let c = l.shape;
|
|
const h = l.holes;
|
|
!1 === ko.isClockWise(c) && (c = c.reverse());
|
|
for (let t = 0, e = h.length; t < e; t++) {
|
|
const e = h[t];
|
|
!0 === ko.isClockWise(e) && (h[t] = e.reverse())
|
|
}
|
|
const u = ko.triangulateShape(c, h);
|
|
for (let t = 0, e = h.length; t < e; t++) {
|
|
const e = h[t];
|
|
c = c.concat(e)
|
|
}
|
|
for (let t = 0, e = c.length; t < e; t++) {
|
|
const e = c[t];
|
|
i.push(e.x, e.y, 0), r.push(0, 0, 1), o.push(e.x, e.y)
|
|
}
|
|
for (let t = 0, e = u.length; t < e; t++) {
|
|
const e = u[t],
|
|
i = e[0] + s,
|
|
r = e[1] + s,
|
|
o = e[2] + s;
|
|
n.push(i, r, o), a += 3
|
|
}
|
|
}
|
|
this.setIndex(n), this.setAttribute("position", new he(i, 3)), this.setAttribute("normal", new he(r, 3)), this.setAttribute("uv", new he(o, 2))
|
|
}
|
|
toJSON() {
|
|
const t = be.prototype.toJSON.call(this);
|
|
return function(t, e) {
|
|
if (e.shapes = [], Array.isArray(t))
|
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
const i = t[n];
|
|
e.shapes.push(i.uuid)
|
|
} else e.shapes.push(t.uuid);
|
|
return e
|
|
}(this.parameters.shapes, t)
|
|
}
|
|
}
|
|
class Zo extends be {
|
|
constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, o = 0, s = Math.PI) {
|
|
super(), this.type = "SphereGeometry", this.parameters = {
|
|
radius: t,
|
|
widthSegments: e,
|
|
heightSegments: n,
|
|
phiStart: i,
|
|
phiLength: r,
|
|
thetaStart: o,
|
|
thetaLength: s
|
|
}, e = Math.max(3, Math.floor(e)), n = Math.max(2, Math.floor(n));
|
|
const a = Math.min(o + s, Math.PI);
|
|
let l = 0;
|
|
const c = [],
|
|
h = new T,
|
|
u = new T,
|
|
d = [],
|
|
p = [],
|
|
f = [],
|
|
m = [];
|
|
for (let d = 0; d <= n; d++) {
|
|
const g = [],
|
|
v = d / n;
|
|
let y = 0;
|
|
0 == d && 0 == o ? y = .5 / e : d == n && a == Math.PI && (y = -.5 / e);
|
|
for (let n = 0; n <= e; n++) {
|
|
const a = n / e;
|
|
h.x = -t * Math.cos(i + a * r) * Math.sin(o + v * s), h.y = t * Math.cos(o + v * s), h.z = t * Math.sin(i + a * r) * Math.sin(o + v * s), p.push(h.x, h.y, h.z), u.copy(h).normalize(), f.push(u.x, u.y, u.z), m.push(a + y, 1 - v), g.push(l++)
|
|
}
|
|
c.push(g)
|
|
}
|
|
for (let t = 0; t < n; t++)
|
|
for (let i = 0; i < e; i++) {
|
|
const e = c[t][i + 1],
|
|
r = c[t][i],
|
|
s = c[t + 1][i],
|
|
l = c[t + 1][i + 1];
|
|
(0 !== t || o > 0) && d.push(e, r, l), (t !== n - 1 || a < Math.PI) && d.push(r, s, l)
|
|
}
|
|
this.setIndex(d), this.setAttribute("position", new he(p, 3)), this.setAttribute("normal", new he(f, 3)), this.setAttribute("uv", new he(m, 2))
|
|
}
|
|
}
|
|
|
|
function Jo(t) {
|
|
Jt.call(this), this.type = "ShadowMaterial", this.color = new Yt(0), this.transparent = !0, this.setValues(t)
|
|
}
|
|
|
|
function Ko(t) {
|
|
Xe.call(this, t), this.type = "RawShaderMaterial"
|
|
}
|
|
|
|
function $o(t) {
|
|
Jt.call(this), this.defines = {
|
|
STANDARD: ""
|
|
}, this.type = "MeshStandardMaterial", this.color = new Yt(16777215), this.roughness = 1, this.metalness = 0, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.roughnessMap = null, this.metalnessMap = null, this.alphaMap = null, this.envMap = null, this.envMapIntensity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.vertexTangents = !1, this.setValues(t)
|
|
}
|
|
|
|
function ts(t) {
|
|
$o.call(this), this.defines = {
|
|
STANDARD: "",
|
|
PHYSICAL: ""
|
|
}, this.type = "MeshPhysicalMaterial", this.clearcoat = 0, this.clearcoatMap = null, this.clearcoatRoughness = 0, this.clearcoatRoughnessMap = null, this.clearcoatNormalScale = new v(1, 1), this.clearcoatNormalMap = null, this.reflectivity = .5, Object.defineProperty(this, "ior", {
|
|
get: function() {
|
|
return (1 + .4 * this.reflectivity) / (1 - .4 * this.reflectivity)
|
|
},
|
|
set: function(t) {
|
|
this.reflectivity = g.clamp(2.5 * (t - 1) / (t + 1), 0, 1)
|
|
}
|
|
}), this.sheen = null, this.transmission = 0, this.transmissionMap = null, this.setValues(t)
|
|
}
|
|
|
|
function es(t) {
|
|
Jt.call(this), this.type = "MeshPhongMaterial", this.color = new Yt(16777215), this.specular = new Yt(1118481), this.shininess = 30, this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t)
|
|
}
|
|
|
|
function ns(t) {
|
|
Jt.call(this), this.defines = {
|
|
TOON: ""
|
|
}, this.type = "MeshToonMaterial", this.color = new Yt(16777215), this.map = null, this.gradientMap = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t)
|
|
}
|
|
|
|
function is(t) {
|
|
Jt.call(this), this.type = "MeshNormalMaterial", this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.wireframe = !1, this.wireframeLinewidth = 1, this.fog = !1, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t)
|
|
}
|
|
|
|
function rs(t) {
|
|
Jt.call(this), this.type = "MeshLambertMaterial", this.color = new Yt(16777215), this.map = null, this.lightMap = null, this.lightMapIntensity = 1, this.aoMap = null, this.aoMapIntensity = 1, this.emissive = new Yt(0), this.emissiveIntensity = 1, this.emissiveMap = null, this.specularMap = null, this.alphaMap = null, this.envMap = null, this.combine = 0, this.reflectivity = 1, this.refractionRatio = .98, this.wireframe = !1, this.wireframeLinewidth = 1, this.wireframeLinecap = "round", this.wireframeLinejoin = "round", this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t)
|
|
}
|
|
|
|
function os(t) {
|
|
Jt.call(this), this.defines = {
|
|
MATCAP: ""
|
|
}, this.type = "MeshMatcapMaterial", this.color = new Yt(16777215), this.matcap = null, this.map = null, this.bumpMap = null, this.bumpScale = 1, this.normalMap = null, this.normalMapType = 0, this.normalScale = new v(1, 1), this.displacementMap = null, this.displacementScale = 1, this.displacementBias = 0, this.alphaMap = null, this.skinning = !1, this.morphTargets = !1, this.morphNormals = !1, this.setValues(t)
|
|
}
|
|
|
|
function ss(t) {
|
|
Qr.call(this), this.type = "LineDashedMaterial", this.scale = 1, this.dashSize = 3, this.gapSize = 1, this.setValues(t)
|
|
}
|
|
Jo.prototype = Object.create(Jt.prototype), Jo.prototype.constructor = Jo, Jo.prototype.isShadowMaterial = !0, Jo.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this
|
|
}, Ko.prototype = Object.create(Xe.prototype), Ko.prototype.constructor = Ko, Ko.prototype.isRawShaderMaterial = !0, $o.prototype = Object.create(Jt.prototype), $o.prototype.constructor = $o, $o.prototype.isMeshStandardMaterial = !0, $o.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.defines = {
|
|
STANDARD: ""
|
|
}, this.color.copy(t.color), this.roughness = t.roughness, this.metalness = t.metalness, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.roughnessMap = t.roughnessMap, this.metalnessMap = t.metalnessMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.envMapIntensity = t.envMapIntensity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this.vertexTangents = t.vertexTangents, this
|
|
}, ts.prototype = Object.create($o.prototype), ts.prototype.constructor = ts, ts.prototype.isMeshPhysicalMaterial = !0, ts.prototype.copy = function(t) {
|
|
return $o.prototype.copy.call(this, t), this.defines = {
|
|
STANDARD: "",
|
|
PHYSICAL: ""
|
|
}, this.clearcoat = t.clearcoat, this.clearcoatMap = t.clearcoatMap, this.clearcoatRoughness = t.clearcoatRoughness, this.clearcoatRoughnessMap = t.clearcoatRoughnessMap, this.clearcoatNormalMap = t.clearcoatNormalMap, this.clearcoatNormalScale.copy(t.clearcoatNormalScale), this.reflectivity = t.reflectivity, t.sheen ? this.sheen = (this.sheen || new Yt).copy(t.sheen) : this.sheen = null, this.transmission = t.transmission, this.transmissionMap = t.transmissionMap, this
|
|
}, es.prototype = Object.create(Jt.prototype), es.prototype.constructor = es, es.prototype.isMeshPhongMaterial = !0, es.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.specular.copy(t.specular), this.shininess = t.shininess, this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this
|
|
}, ns.prototype = Object.create(Jt.prototype), ns.prototype.constructor = ns, ns.prototype.isMeshToonMaterial = !0, ns.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.gradientMap = t.gradientMap, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this
|
|
}, is.prototype = Object.create(Jt.prototype), is.prototype.constructor = is, is.prototype.isMeshNormalMaterial = !0, is.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this
|
|
}, rs.prototype = Object.create(Jt.prototype), rs.prototype.constructor = rs, rs.prototype.isMeshLambertMaterial = !0, rs.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.color.copy(t.color), this.map = t.map, this.lightMap = t.lightMap, this.lightMapIntensity = t.lightMapIntensity, this.aoMap = t.aoMap, this.aoMapIntensity = t.aoMapIntensity, this.emissive.copy(t.emissive), this.emissiveMap = t.emissiveMap, this.emissiveIntensity = t.emissiveIntensity, this.specularMap = t.specularMap, this.alphaMap = t.alphaMap, this.envMap = t.envMap, this.combine = t.combine, this.reflectivity = t.reflectivity, this.refractionRatio = t.refractionRatio, this.wireframe = t.wireframe, this.wireframeLinewidth = t.wireframeLinewidth, this.wireframeLinecap = t.wireframeLinecap, this.wireframeLinejoin = t.wireframeLinejoin, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this
|
|
}, os.prototype = Object.create(Jt.prototype), os.prototype.constructor = os, os.prototype.isMeshMatcapMaterial = !0, os.prototype.copy = function(t) {
|
|
return Jt.prototype.copy.call(this, t), this.defines = {
|
|
MATCAP: ""
|
|
}, this.color.copy(t.color), this.matcap = t.matcap, this.map = t.map, this.bumpMap = t.bumpMap, this.bumpScale = t.bumpScale, this.normalMap = t.normalMap, this.normalMapType = t.normalMapType, this.normalScale.copy(t.normalScale), this.displacementMap = t.displacementMap, this.displacementScale = t.displacementScale, this.displacementBias = t.displacementBias, this.alphaMap = t.alphaMap, this.skinning = t.skinning, this.morphTargets = t.morphTargets, this.morphNormals = t.morphNormals, this
|
|
}, ss.prototype = Object.create(Qr.prototype), ss.prototype.constructor = ss, ss.prototype.isLineDashedMaterial = !0, ss.prototype.copy = function(t) {
|
|
return Qr.prototype.copy.call(this, t), this.scale = t.scale, this.dashSize = t.dashSize, this.gapSize = t.gapSize, this
|
|
};
|
|
var as = Object.freeze({
|
|
__proto__: null,
|
|
ShadowMaterial: Jo,
|
|
SpriteMaterial: mr,
|
|
RawShaderMaterial: Ko,
|
|
ShaderMaterial: Xe,
|
|
PointsMaterial: so,
|
|
MeshPhysicalMaterial: ts,
|
|
MeshStandardMaterial: $o,
|
|
MeshPhongMaterial: es,
|
|
MeshToonMaterial: ns,
|
|
MeshNormalMaterial: is,
|
|
MeshLambertMaterial: rs,
|
|
MeshDepthMaterial: Ki,
|
|
MeshDistanceMaterial: $i,
|
|
MeshBasicMaterial: Kt,
|
|
MeshMatcapMaterial: os,
|
|
LineDashedMaterial: ss,
|
|
LineBasicMaterial: Qr,
|
|
Material: Jt
|
|
});
|
|
const ls = {
|
|
arraySlice: function(t, e, n) {
|
|
return ls.isTypedArray(t) ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) : t.slice(e, n)
|
|
},
|
|
convertArray: function(t, e, n) {
|
|
return !t || !n && t.constructor === e ? t : "number" == typeof e.BYTES_PER_ELEMENT ? new e(t) : Array.prototype.slice.call(t)
|
|
},
|
|
isTypedArray: function(t) {
|
|
return ArrayBuffer.isView(t) && !(t instanceof DataView)
|
|
},
|
|
getKeyframeOrder: function(t) {
|
|
const e = t.length,
|
|
n = new Array(e);
|
|
for (let t = 0; t !== e; ++t) n[t] = t;
|
|
return n.sort((function(e, n) {
|
|
return t[e] - t[n]
|
|
})), n
|
|
},
|
|
sortedArray: function(t, e, n) {
|
|
const i = t.length,
|
|
r = new t.constructor(i);
|
|
for (let o = 0, s = 0; s !== i; ++o) {
|
|
const i = n[o] * e;
|
|
for (let n = 0; n !== e; ++n) r[s++] = t[i + n]
|
|
}
|
|
return r
|
|
},
|
|
flattenJSON: function(t, e, n, i) {
|
|
let r = 1,
|
|
o = t[0];
|
|
for (; void 0 !== o && void 0 === o[i];) o = t[r++];
|
|
if (void 0 === o) return;
|
|
let s = o[i];
|
|
if (void 0 !== s)
|
|
if (Array.isArray(s))
|
|
do {
|
|
s = o[i], void 0 !== s && (e.push(o.time), n.push.apply(n, s)), o = t[r++]
|
|
} while (void 0 !== o);
|
|
else if (void 0 !== s.toArray)
|
|
do {
|
|
s = o[i], void 0 !== s && (e.push(o.time), s.toArray(n, n.length)), o = t[r++]
|
|
} while (void 0 !== o);
|
|
else
|
|
do {
|
|
s = o[i], void 0 !== s && (e.push(o.time), n.push(s)), o = t[r++]
|
|
} while (void 0 !== o)
|
|
},
|
|
subclip: function(t, e, n, i, r = 30) {
|
|
const o = t.clone();
|
|
o.name = e;
|
|
const s = [];
|
|
for (let t = 0; t < o.tracks.length; ++t) {
|
|
const e = o.tracks[t],
|
|
a = e.getValueSize(),
|
|
l = [],
|
|
c = [];
|
|
for (let t = 0; t < e.times.length; ++t) {
|
|
const o = e.times[t] * r;
|
|
if (!(o < n || o >= i)) {
|
|
l.push(e.times[t]);
|
|
for (let n = 0; n < a; ++n) c.push(e.values[t * a + n])
|
|
}
|
|
}
|
|
0 !== l.length && (e.times = ls.convertArray(l, e.times.constructor), e.values = ls.convertArray(c, e.values.constructor), s.push(e))
|
|
}
|
|
o.tracks = s;
|
|
let a = 1 / 0;
|
|
for (let t = 0; t < o.tracks.length; ++t) a > o.tracks[t].times[0] && (a = o.tracks[t].times[0]);
|
|
for (let t = 0; t < o.tracks.length; ++t) o.tracks[t].shift(-1 * a);
|
|
return o.resetDuration(), o
|
|
},
|
|
makeClipAdditive: function(t, e = 0, n = t, i = 30) {
|
|
i <= 0 && (i = 30);
|
|
const r = n.tracks.length,
|
|
o = e / i;
|
|
for (let e = 0; e < r; ++e) {
|
|
const i = n.tracks[e],
|
|
r = i.ValueTypeName;
|
|
if ("bool" === r || "string" === r) continue;
|
|
const s = t.tracks.find((function(t) {
|
|
return t.name === i.name && t.ValueTypeName === r
|
|
}));
|
|
if (void 0 === s) continue;
|
|
let a = 0;
|
|
const l = i.getValueSize();
|
|
i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (a = l / 3);
|
|
let c = 0;
|
|
const h = s.getValueSize();
|
|
s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3);
|
|
const u = i.times.length - 1;
|
|
let d;
|
|
if (o <= i.times[0]) {
|
|
const t = a,
|
|
e = l - a;
|
|
d = ls.arraySlice(i.values, t, e)
|
|
} else if (o >= i.times[u]) {
|
|
const t = u * l + a,
|
|
e = t + l - a;
|
|
d = ls.arraySlice(i.values, t, e)
|
|
} else {
|
|
const t = i.createInterpolant(),
|
|
e = a,
|
|
n = l - a;
|
|
t.evaluate(o), d = ls.arraySlice(t.resultBuffer, e, n)
|
|
}
|
|
if ("quaternion" === r) {
|
|
(new S).fromArray(d).normalize().conjugate().toArray(d)
|
|
}
|
|
const p = s.times.length;
|
|
for (let t = 0; t < p; ++t) {
|
|
const e = t * h + c;
|
|
if ("quaternion" === r) S.multiplyQuaternionsFlat(s.values, e, d, 0, s.values, e);
|
|
else {
|
|
const t = h - 2 * c;
|
|
for (let n = 0; n < t; ++n) s.values[e + n] -= d[n]
|
|
}
|
|
}
|
|
}
|
|
return t.blendMode = 2501, t
|
|
}
|
|
};
|
|
|
|
function cs(t, e, n, i) {
|
|
this.parameterPositions = t, this._cachedIndex = 0, this.resultBuffer = void 0 !== i ? i : new e.constructor(n), this.sampleValues = e, this.valueSize = n
|
|
}
|
|
|
|
function hs(t, e, n, i) {
|
|
cs.call(this, t, e, n, i), this._weightPrev = -0, this._offsetPrev = -0, this._weightNext = -0, this._offsetNext = -0
|
|
}
|
|
|
|
function us(t, e, n, i) {
|
|
cs.call(this, t, e, n, i)
|
|
}
|
|
|
|
function ds(t, e, n, i) {
|
|
cs.call(this, t, e, n, i)
|
|
}
|
|
|
|
function ps(t, e, n, i) {
|
|
if (void 0 === t) throw new Error("THREE.KeyframeTrack: track name is undefined");
|
|
if (void 0 === e || 0 === e.length) throw new Error("THREE.KeyframeTrack: no keyframes in track named " + t);
|
|
this.name = t, this.times = ls.convertArray(e, this.TimeBufferType), this.values = ls.convertArray(n, this.ValueBufferType), this.setInterpolation(i || this.DefaultInterpolation)
|
|
}
|
|
|
|
function fs(t, e, n) {
|
|
ps.call(this, t, e, n)
|
|
}
|
|
|
|
function ms(t, e, n, i) {
|
|
ps.call(this, t, e, n, i)
|
|
}
|
|
|
|
function gs(t, e, n, i) {
|
|
ps.call(this, t, e, n, i)
|
|
}
|
|
|
|
function vs(t, e, n, i) {
|
|
cs.call(this, t, e, n, i)
|
|
}
|
|
|
|
function ys(t, e, n, i) {
|
|
ps.call(this, t, e, n, i)
|
|
}
|
|
|
|
function As(t, e, n, i) {
|
|
ps.call(this, t, e, n, i)
|
|
}
|
|
|
|
function xs(t, e, n, i) {
|
|
ps.call(this, t, e, n, i)
|
|
}
|
|
|
|
function _s(t, e = -1, n, i = 2500) {
|
|
this.name = t, this.tracks = n, this.duration = e, this.blendMode = i, this.uuid = g.generateUUID(), this.duration < 0 && this.resetDuration()
|
|
}
|
|
|
|
function bs(t) {
|
|
if (void 0 === t.type) throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");
|
|
const e = function(t) {
|
|
switch (t.toLowerCase()) {
|
|
case "scalar":
|
|
case "double":
|
|
case "float":
|
|
case "number":
|
|
case "integer":
|
|
return gs;
|
|
case "vector":
|
|
case "vector2":
|
|
case "vector3":
|
|
case "vector4":
|
|
return xs;
|
|
case "color":
|
|
return ms;
|
|
case "quaternion":
|
|
return ys;
|
|
case "bool":
|
|
case "boolean":
|
|
return fs;
|
|
case "string":
|
|
return As
|
|
}
|
|
throw new Error("THREE.KeyframeTrack: Unsupported typeName: " + t)
|
|
}(t.type);
|
|
if (void 0 === t.times) {
|
|
const e = [],
|
|
n = [];
|
|
ls.flattenJSON(t.keys, e, n, "value"), t.times = e, t.values = n
|
|
}
|
|
return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation)
|
|
}
|
|
Object.assign(cs.prototype, {
|
|
evaluate: function(t) {
|
|
const e = this.parameterPositions;
|
|
let n = this._cachedIndex,
|
|
i = e[n],
|
|
r = e[n - 1];
|
|
t: {
|
|
e: {
|
|
let o;n: {
|
|
i: if (!(t < i)) {
|
|
for (let o = n + 2;;) {
|
|
if (void 0 === i) {
|
|
if (t < r) break i;
|
|
return n = e.length, this._cachedIndex = n, this.afterEnd_(n - 1, t, r)
|
|
}
|
|
if (n === o) break;
|
|
if (r = i, i = e[++n], t < i) break e
|
|
}
|
|
o = e.length;
|
|
break n
|
|
}if (t >= r) break t; {
|
|
const s = e[1];
|
|
t < s && (n = 2, r = s);
|
|
for (let o = n - 2;;) {
|
|
if (void 0 === r) return this._cachedIndex = 0, this.beforeStart_(0, t, i);
|
|
if (n === o) break;
|
|
if (i = r, r = e[--n - 1], t >= r) break e
|
|
}
|
|
o = n, n = 0
|
|
}
|
|
}
|
|
for (; n < o;) {
|
|
const i = n + o >>> 1;
|
|
t < e[i] ? o = i : n = i + 1
|
|
}
|
|
if (i = e[n], r = e[n - 1], void 0 === r) return this._cachedIndex = 0,
|
|
this.beforeStart_(0, t, i);
|
|
if (void 0 === i) return n = e.length,
|
|
this._cachedIndex = n,
|
|
this.afterEnd_(n - 1, r, t)
|
|
}
|
|
this._cachedIndex = n,
|
|
this.intervalChanged_(n, r, i)
|
|
}
|
|
return this.interpolate_(n, r, t, i)
|
|
},
|
|
settings: null,
|
|
DefaultSettings_: {},
|
|
getSettings_: function() {
|
|
return this.settings || this.DefaultSettings_
|
|
},
|
|
copySampleValue_: function(t) {
|
|
const e = this.resultBuffer,
|
|
n = this.sampleValues,
|
|
i = this.valueSize,
|
|
r = t * i;
|
|
for (let t = 0; t !== i; ++t) e[t] = n[r + t];
|
|
return e
|
|
},
|
|
interpolate_: function() {
|
|
throw new Error("call to abstract method")
|
|
},
|
|
intervalChanged_: function() {}
|
|
}), Object.assign(cs.prototype, {
|
|
beforeStart_: cs.prototype.copySampleValue_,
|
|
afterEnd_: cs.prototype.copySampleValue_
|
|
}), hs.prototype = Object.assign(Object.create(cs.prototype), {
|
|
constructor: hs,
|
|
DefaultSettings_: {
|
|
endingStart: 2400,
|
|
endingEnd: 2400
|
|
},
|
|
intervalChanged_: function(t, e, n) {
|
|
const i = this.parameterPositions;
|
|
let r = t - 2,
|
|
o = t + 1,
|
|
s = i[r],
|
|
a = i[o];
|
|
if (void 0 === s) switch (this.getSettings_().endingStart) {
|
|
case 2401:
|
|
r = t, s = 2 * e - n;
|
|
break;
|
|
case 2402:
|
|
r = i.length - 2, s = e + i[r] - i[r + 1];
|
|
break;
|
|
default:
|
|
r = t, s = n
|
|
}
|
|
if (void 0 === a) switch (this.getSettings_().endingEnd) {
|
|
case 2401:
|
|
o = t, a = 2 * n - e;
|
|
break;
|
|
case 2402:
|
|
o = 1, a = n + i[1] - i[0];
|
|
break;
|
|
default:
|
|
o = t - 1, a = e
|
|
}
|
|
const l = .5 * (n - e),
|
|
c = this.valueSize;
|
|
this._weightPrev = l / (e - s), this._weightNext = l / (a - n), this._offsetPrev = r * c, this._offsetNext = o * c
|
|
},
|
|
interpolate_: function(t, e, n, i) {
|
|
const r = this.resultBuffer,
|
|
o = this.sampleValues,
|
|
s = this.valueSize,
|
|
a = t * s,
|
|
l = a - s,
|
|
c = this._offsetPrev,
|
|
h = this._offsetNext,
|
|
u = this._weightPrev,
|
|
d = this._weightNext,
|
|
p = (n - e) / (i - e),
|
|
f = p * p,
|
|
m = f * p,
|
|
g = -u * m + 2 * u * f - u * p,
|
|
v = (1 + u) * m + (-1.5 - 2 * u) * f + (-.5 + u) * p + 1,
|
|
y = (-1 - d) * m + (1.5 + d) * f + .5 * p,
|
|
A = d * m - d * f;
|
|
for (let t = 0; t !== s; ++t) r[t] = g * o[c + t] + v * o[l + t] + y * o[a + t] + A * o[h + t];
|
|
return r
|
|
}
|
|
}), us.prototype = Object.assign(Object.create(cs.prototype), {
|
|
constructor: us,
|
|
interpolate_: function(t, e, n, i) {
|
|
const r = this.resultBuffer,
|
|
o = this.sampleValues,
|
|
s = this.valueSize,
|
|
a = t * s,
|
|
l = a - s,
|
|
c = (n - e) / (i - e),
|
|
h = 1 - c;
|
|
for (let t = 0; t !== s; ++t) r[t] = o[l + t] * h + o[a + t] * c;
|
|
return r
|
|
}
|
|
}), ds.prototype = Object.assign(Object.create(cs.prototype), {
|
|
constructor: ds,
|
|
interpolate_: function(t) {
|
|
return this.copySampleValue_(t - 1)
|
|
}
|
|
}), Object.assign(ps, {
|
|
toJSON: function(t) {
|
|
const e = t.constructor;
|
|
let n;
|
|
if (void 0 !== e.toJSON) n = e.toJSON(t);
|
|
else {
|
|
n = {
|
|
name: t.name,
|
|
times: ls.convertArray(t.times, Array),
|
|
values: ls.convertArray(t.values, Array)
|
|
};
|
|
const e = t.getInterpolation();
|
|
e !== t.DefaultInterpolation && (n.interpolation = e)
|
|
}
|
|
return n.type = t.ValueTypeName, n
|
|
}
|
|
}), Object.assign(ps.prototype, {
|
|
constructor: ps,
|
|
TimeBufferType: Float32Array,
|
|
ValueBufferType: Float32Array,
|
|
DefaultInterpolation: 2301,
|
|
InterpolantFactoryMethodDiscrete: function(t) {
|
|
return new ds(this.times, this.values, this.getValueSize(), t)
|
|
},
|
|
InterpolantFactoryMethodLinear: function(t) {
|
|
return new us(this.times, this.values, this.getValueSize(), t)
|
|
},
|
|
InterpolantFactoryMethodSmooth: function(t) {
|
|
return new hs(this.times, this.values, this.getValueSize(), t)
|
|
},
|
|
setInterpolation: function(t) {
|
|
let e;
|
|
switch (t) {
|
|
case 2300:
|
|
e = this.InterpolantFactoryMethodDiscrete;
|
|
break;
|
|
case 2301:
|
|
e = this.InterpolantFactoryMethodLinear;
|
|
break;
|
|
case 2302:
|
|
e = this.InterpolantFactoryMethodSmooth
|
|
}
|
|
if (void 0 === e) {
|
|
const e = "unsupported interpolation for " + this.ValueTypeName + " keyframe track named " + this.name;
|
|
if (void 0 === this.createInterpolant) {
|
|
if (t === this.DefaultInterpolation) throw new Error(e);
|
|
this.setInterpolation(this.DefaultInterpolation)
|
|
}
|
|
return console.warn("THREE.KeyframeTrack:", e), this
|
|
}
|
|
return this.createInterpolant = e, this
|
|
},
|
|
getInterpolation: function() {
|
|
switch (this.createInterpolant) {
|
|
case this.InterpolantFactoryMethodDiscrete:
|
|
return 2300;
|
|
case this.InterpolantFactoryMethodLinear:
|
|
return 2301;
|
|
case this.InterpolantFactoryMethodSmooth:
|
|
return 2302
|
|
}
|
|
},
|
|
getValueSize: function() {
|
|
return this.values.length / this.times.length
|
|
},
|
|
shift: function(t) {
|
|
if (0 !== t) {
|
|
const e = this.times;
|
|
for (let n = 0, i = e.length; n !== i; ++n) e[n] += t
|
|
}
|
|
return this
|
|
},
|
|
scale: function(t) {
|
|
if (1 !== t) {
|
|
const e = this.times;
|
|
for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t
|
|
}
|
|
return this
|
|
},
|
|
trim: function(t, e) {
|
|
const n = this.times,
|
|
i = n.length;
|
|
let r = 0,
|
|
o = i - 1;
|
|
for (; r !== i && n[r] < t;) ++r;
|
|
for (; - 1 !== o && n[o] > e;) --o;
|
|
if (++o, 0 !== r || o !== i) {
|
|
r >= o && (o = Math.max(o, 1), r = o - 1);
|
|
const t = this.getValueSize();
|
|
this.times = ls.arraySlice(n, r, o), this.values = ls.arraySlice(this.values, r * t, o * t)
|
|
}
|
|
return this
|
|
},
|
|
validate: function() {
|
|
let t = !0;
|
|
const e = this.getValueSize();
|
|
e - Math.floor(e) != 0 && (console.error("THREE.KeyframeTrack: Invalid value size in track.", this), t = !1);
|
|
const n = this.times,
|
|
i = this.values,
|
|
r = n.length;
|
|
0 === r && (console.error("THREE.KeyframeTrack: Track is empty.", this), t = !1);
|
|
let o = null;
|
|
for (let e = 0; e !== r; e++) {
|
|
const i = n[e];
|
|
if ("number" == typeof i && isNaN(i)) {
|
|
console.error("THREE.KeyframeTrack: Time is not a valid number.", this, e, i), t = !1;
|
|
break
|
|
}
|
|
if (null !== o && o > i) {
|
|
console.error("THREE.KeyframeTrack: Out of order keys.", this, e, i, o), t = !1;
|
|
break
|
|
}
|
|
o = i
|
|
}
|
|
if (void 0 !== i && ls.isTypedArray(i))
|
|
for (let e = 0, n = i.length; e !== n; ++e) {
|
|
const n = i[e];
|
|
if (isNaN(n)) {
|
|
console.error("THREE.KeyframeTrack: Value is not a valid number.", this, e, n), t = !1;
|
|
break
|
|
}
|
|
}
|
|
return t
|
|
},
|
|
optimize: function() {
|
|
const t = ls.arraySlice(this.times),
|
|
e = ls.arraySlice(this.values),
|
|
n = this.getValueSize(),
|
|
i = 2302 === this.getInterpolation(),
|
|
r = t.length - 1;
|
|
let o = 1;
|
|
for (let s = 1; s < r; ++s) {
|
|
let r = !1;
|
|
const a = t[s];
|
|
if (a !== t[s + 1] && (1 !== s || a !== t[0]))
|
|
if (i) r = !0;
|
|
else {
|
|
const t = s * n,
|
|
i = t - n,
|
|
o = t + n;
|
|
for (let s = 0; s !== n; ++s) {
|
|
const n = e[t + s];
|
|
if (n !== e[i + s] || n !== e[o + s]) {
|
|
r = !0;
|
|
break
|
|
}
|
|
}
|
|
} if (r) {
|
|
if (s !== o) {
|
|
t[o] = t[s];
|
|
const i = s * n,
|
|
r = o * n;
|
|
for (let t = 0; t !== n; ++t) e[r + t] = e[i + t]
|
|
}++o
|
|
}
|
|
}
|
|
if (r > 0) {
|
|
t[o] = t[r];
|
|
for (let t = r * n, i = o * n, s = 0; s !== n; ++s) e[i + s] = e[t + s];
|
|
++o
|
|
}
|
|
return o !== t.length ? (this.times = ls.arraySlice(t, 0, o), this.values = ls.arraySlice(e, 0, o * n)) : (this.times = t, this.values = e), this
|
|
},
|
|
clone: function() {
|
|
const t = ls.arraySlice(this.times, 0),
|
|
e = ls.arraySlice(this.values, 0),
|
|
n = new(0, this.constructor)(this.name, t, e);
|
|
return n.createInterpolant = this.createInterpolant, n
|
|
}
|
|
}), fs.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: fs,
|
|
ValueTypeName: "bool",
|
|
ValueBufferType: Array,
|
|
DefaultInterpolation: 2300,
|
|
InterpolantFactoryMethodLinear: void 0,
|
|
InterpolantFactoryMethodSmooth: void 0
|
|
}), ms.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: ms,
|
|
ValueTypeName: "color"
|
|
}), gs.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: gs,
|
|
ValueTypeName: "number"
|
|
}), vs.prototype = Object.assign(Object.create(cs.prototype), {
|
|
constructor: vs,
|
|
interpolate_: function(t, e, n, i) {
|
|
const r = this.resultBuffer,
|
|
o = this.sampleValues,
|
|
s = this.valueSize,
|
|
a = (n - e) / (i - e);
|
|
let l = t * s;
|
|
for (let t = l + s; l !== t; l += 4) S.slerpFlat(r, 0, o, l - s, o, l, a);
|
|
return r
|
|
}
|
|
}), ys.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: ys,
|
|
ValueTypeName: "quaternion",
|
|
DefaultInterpolation: 2301,
|
|
InterpolantFactoryMethodLinear: function(t) {
|
|
return new vs(this.times, this.values, this.getValueSize(), t)
|
|
},
|
|
InterpolantFactoryMethodSmooth: void 0
|
|
}), As.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: As,
|
|
ValueTypeName: "string",
|
|
ValueBufferType: Array,
|
|
DefaultInterpolation: 2300,
|
|
InterpolantFactoryMethodLinear: void 0,
|
|
InterpolantFactoryMethodSmooth: void 0
|
|
}), xs.prototype = Object.assign(Object.create(ps.prototype), {
|
|
constructor: xs,
|
|
ValueTypeName: "vector"
|
|
}), Object.assign(_s, {
|
|
parse: function(t) {
|
|
const e = [],
|
|
n = t.tracks,
|
|
i = 1 / (t.fps || 1);
|
|
for (let t = 0, r = n.length; t !== r; ++t) e.push(bs(n[t]).scale(i));
|
|
const r = new _s(t.name, t.duration, e, t.blendMode);
|
|
return r.uuid = t.uuid, r
|
|
},
|
|
toJSON: function(t) {
|
|
const e = [],
|
|
n = t.tracks,
|
|
i = {
|
|
name: t.name,
|
|
duration: t.duration,
|
|
tracks: e,
|
|
uuid: t.uuid,
|
|
blendMode: t.blendMode
|
|
};
|
|
for (let t = 0, i = n.length; t !== i; ++t) e.push(ps.toJSON(n[t]));
|
|
return i
|
|
},
|
|
CreateFromMorphTargetSequence: function(t, e, n, i) {
|
|
const r = e.length,
|
|
o = [];
|
|
for (let t = 0; t < r; t++) {
|
|
let s = [],
|
|
a = [];
|
|
s.push((t + r - 1) % r, t, (t + 1) % r), a.push(0, 1, 0);
|
|
const l = ls.getKeyframeOrder(s);
|
|
s = ls.sortedArray(s, 1, l), a = ls.sortedArray(a, 1, l), i || 0 !== s[0] || (s.push(r), a.push(a[0])), o.push(new gs(".morphTargetInfluences[" + e[t].name + "]", s, a).scale(1 / n))
|
|
}
|
|
return new _s(t, -1, o)
|
|
},
|
|
findByName: function(t, e) {
|
|
let n = t;
|
|
if (!Array.isArray(t)) {
|
|
const e = t;
|
|
n = e.geometry && e.geometry.animations || e.animations
|
|
}
|
|
for (let t = 0; t < n.length; t++)
|
|
if (n[t].name === e) return n[t];
|
|
return null
|
|
},
|
|
CreateClipsFromMorphTargetSequences: function(t, e, n) {
|
|
const i = {},
|
|
r = /^([\w-]*?)([\d]+)$/;
|
|
for (let e = 0, n = t.length; e < n; e++) {
|
|
const n = t[e],
|
|
o = n.name.match(r);
|
|
if (o && o.length > 1) {
|
|
const t = o[1];
|
|
let e = i[t];
|
|
e || (i[t] = e = []), e.push(n)
|
|
}
|
|
}
|
|
const o = [];
|
|
for (const t in i) o.push(_s.CreateFromMorphTargetSequence(t, i[t], e, n));
|
|
return o
|
|
},
|
|
parseAnimation: function(t, e) {
|
|
if (!t) return console.error("THREE.AnimationClip: No animation in JSONLoader data."), null;
|
|
const n = function(t, e, n, i, r) {
|
|
if (0 !== n.length) {
|
|
const o = [],
|
|
s = [];
|
|
ls.flattenJSON(n, o, s, i), 0 !== o.length && r.push(new t(e, o, s))
|
|
}
|
|
},
|
|
i = [],
|
|
r = t.name || "default",
|
|
o = t.fps || 30,
|
|
s = t.blendMode;
|
|
let a = t.length || -1;
|
|
const l = t.hierarchy || [];
|
|
for (let t = 0; t < l.length; t++) {
|
|
const r = l[t].keys;
|
|
if (r && 0 !== r.length)
|
|
if (r[0].morphTargets) {
|
|
const t = {};
|
|
let e;
|
|
for (e = 0; e < r.length; e++)
|
|
if (r[e].morphTargets)
|
|
for (let n = 0; n < r[e].morphTargets.length; n++) t[r[e].morphTargets[n]] = -1;
|
|
for (const n in t) {
|
|
const t = [],
|
|
o = [];
|
|
for (let i = 0; i !== r[e].morphTargets.length; ++i) {
|
|
const i = r[e];
|
|
t.push(i.time), o.push(i.morphTarget === n ? 1 : 0)
|
|
}
|
|
i.push(new gs(".morphTargetInfluence[" + n + "]", t, o))
|
|
}
|
|
a = t.length * (o || 1)
|
|
} else {
|
|
const o = ".bones[" + e[t].name + "]";
|
|
n(xs, o + ".position", r, "pos", i), n(ys, o + ".quaternion", r, "rot", i), n(xs, o + ".scale", r, "scl", i)
|
|
}
|
|
}
|
|
if (0 === i.length) return null;
|
|
return new _s(r, a, i, s)
|
|
}
|
|
}), Object.assign(_s.prototype, {
|
|
resetDuration: function() {
|
|
let t = 0;
|
|
for (let e = 0, n = this.tracks.length; e !== n; ++e) {
|
|
const n = this.tracks[e];
|
|
t = Math.max(t, n.times[n.times.length - 1])
|
|
}
|
|
return this.duration = t, this
|
|
},
|
|
trim: function() {
|
|
for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration);
|
|
return this
|
|
},
|
|
validate: function() {
|
|
let t = !0;
|
|
for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate();
|
|
return t
|
|
},
|
|
optimize: function() {
|
|
for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize();
|
|
return this
|
|
},
|
|
clone: function() {
|
|
const t = [];
|
|
for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone());
|
|
return new _s(this.name, this.duration, t, this.blendMode)
|
|
},
|
|
toJSON: function() {
|
|
return _s.toJSON(this)
|
|
}
|
|
});
|
|
const ws = {
|
|
enabled: !1,
|
|
files: {},
|
|
add: function(t, e) {
|
|
!1 !== this.enabled && (this.files[t] = e)
|
|
},
|
|
get: function(t) {
|
|
if (!1 !== this.enabled) return this.files[t]
|
|
},
|
|
remove: function(t) {
|
|
delete this.files[t]
|
|
},
|
|
clear: function() {
|
|
this.files = {}
|
|
}
|
|
};
|
|
const Ms = new function(t, e, n) {
|
|
const i = this;
|
|
let r = !1,
|
|
o = 0,
|
|
s = 0,
|
|
a = void 0;
|
|
const l = [];
|
|
this.onStart = void 0, this.onLoad = t, this.onProgress = e, this.onError = n, this.itemStart = function(t) {
|
|
s++, !1 === r && void 0 !== i.onStart && i.onStart(t, o, s), r = !0
|
|
}, this.itemEnd = function(t) {
|
|
o++, void 0 !== i.onProgress && i.onProgress(t, o, s), o === s && (r = !1, void 0 !== i.onLoad && i.onLoad())
|
|
}, this.itemError = function(t) {
|
|
void 0 !== i.onError && i.onError(t)
|
|
}, this.resolveURL = function(t) {
|
|
return a ? a(t) : t
|
|
}, this.setURLModifier = function(t) {
|
|
return a = t, this
|
|
}, this.addHandler = function(t, e) {
|
|
return l.push(t, e), this
|
|
}, this.removeHandler = function(t) {
|
|
const e = l.indexOf(t);
|
|
return -1 !== e && l.splice(e, 2), this
|
|
}, this.getHandler = function(t) {
|
|
for (let e = 0, n = l.length; e < n; e += 2) {
|
|
const n = l[e],
|
|
i = l[e + 1];
|
|
if (n.global && (n.lastIndex = 0), n.test(t)) return i
|
|
}
|
|
return null
|
|
}
|
|
};
|
|
|
|
function Es(t) {
|
|
this.manager = void 0 !== t ? t : Ms, this.crossOrigin = "anonymous", this.withCredentials = !1, this.path = "", this.resourcePath = "", this.requestHeader = {}
|
|
}
|
|
Object.assign(Es.prototype, {
|
|
load: function() {},
|
|
loadAsync: function(t, e) {
|
|
const n = this;
|
|
return new Promise((function(i, r) {
|
|
n.load(t, i, e, r)
|
|
}))
|
|
},
|
|
parse: function() {},
|
|
setCrossOrigin: function(t) {
|
|
return this.crossOrigin = t, this
|
|
},
|
|
setWithCredentials: function(t) {
|
|
return this.withCredentials = t, this
|
|
},
|
|
setPath: function(t) {
|
|
return this.path = t, this
|
|
},
|
|
setResourcePath: function(t) {
|
|
return this.resourcePath = t, this
|
|
},
|
|
setRequestHeader: function(t) {
|
|
return this.requestHeader = t, this
|
|
}
|
|
});
|
|
const Ss = {};
|
|
|
|
function Ts(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Ls(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Rs(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Cs(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Ps(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Ds(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Is(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Os() {
|
|
this.type = "Curve", this.arcLengthDivisions = 200
|
|
}
|
|
|
|
function Ns(t, e, n, i, r, o, s, a) {
|
|
Os.call(this), this.type = "EllipseCurve", this.aX = t || 0, this.aY = e || 0, this.xRadius = n || 1, this.yRadius = i || 1, this.aStartAngle = r || 0, this.aEndAngle = o || 2 * Math.PI, this.aClockwise = s || !1, this.aRotation = a || 0
|
|
}
|
|
|
|
function Bs(t, e, n, i, r, o) {
|
|
Ns.call(this, t, e, n, n, i, r, o), this.type = "ArcCurve"
|
|
}
|
|
|
|
function Fs() {
|
|
let t = 0,
|
|
e = 0,
|
|
n = 0,
|
|
i = 0;
|
|
|
|
function r(r, o, s, a) {
|
|
t = r, e = s, n = -3 * r + 3 * o - 2 * s - a, i = 2 * r - 2 * o + s + a
|
|
}
|
|
return {
|
|
initCatmullRom: function(t, e, n, i, o) {
|
|
r(e, n, o * (n - t), o * (i - e))
|
|
},
|
|
initNonuniformCatmullRom: function(t, e, n, i, o, s, a) {
|
|
let l = (e - t) / o - (n - t) / (o + s) + (n - e) / s,
|
|
c = (n - e) / s - (i - e) / (s + a) + (i - n) / a;
|
|
l *= s, c *= s, r(e, n, l, c)
|
|
},
|
|
calc: function(r) {
|
|
const o = r * r;
|
|
return t + e * r + n * o + i * (o * r)
|
|
}
|
|
}
|
|
}
|
|
Ts.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Ts,
|
|
load: function(t, e, n, i) {
|
|
void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t);
|
|
const r = this,
|
|
o = ws.get(t);
|
|
if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() {
|
|
e && e(o), r.manager.itemEnd(t)
|
|
}), 0), o;
|
|
if (void 0 !== Ss[t]) return void Ss[t].push({
|
|
onLoad: e,
|
|
onProgress: n,
|
|
onError: i
|
|
});
|
|
const s = t.match(/^data:(.*?)(;base64)?,(.*)$/);
|
|
let a;
|
|
if (s) {
|
|
const n = s[1],
|
|
o = !!s[2];
|
|
let a = s[3];
|
|
a = decodeURIComponent(a), o && (a = atob(a));
|
|
try {
|
|
let i;
|
|
const o = (this.responseType || "").toLowerCase();
|
|
switch (o) {
|
|
case "arraybuffer":
|
|
case "blob":
|
|
const t = new Uint8Array(a.length);
|
|
for (let e = 0; e < a.length; e++) t[e] = a.charCodeAt(e);
|
|
i = "blob" === o ? new Blob([t.buffer], {
|
|
type: n
|
|
}) : t.buffer;
|
|
break;
|
|
case "document":
|
|
const e = new DOMParser;
|
|
i = e.parseFromString(a, n);
|
|
break;
|
|
case "json":
|
|
i = JSON.parse(a);
|
|
break;
|
|
default:
|
|
i = a
|
|
}
|
|
setTimeout((function() {
|
|
e && e(i), r.manager.itemEnd(t)
|
|
}), 0)
|
|
} catch (e) {
|
|
setTimeout((function() {
|
|
i && i(e), r.manager.itemError(t), r.manager.itemEnd(t)
|
|
}), 0)
|
|
}
|
|
} else {
|
|
Ss[t] = [], Ss[t].push({
|
|
onLoad: e,
|
|
onProgress: n,
|
|
onError: i
|
|
}), a = new XMLHttpRequest, a.open("GET", t, !0), a.addEventListener("load", (function(e) {
|
|
const n = this.response,
|
|
i = Ss[t];
|
|
if (delete Ss[t], 200 === this.status || 0 === this.status) {
|
|
0 === this.status && console.warn("THREE.FileLoader: HTTP Status 0 received."), ws.add(t, n);
|
|
for (let t = 0, e = i.length; t < e; t++) {
|
|
const e = i[t];
|
|
e.onLoad && e.onLoad(n)
|
|
}
|
|
r.manager.itemEnd(t)
|
|
} else {
|
|
for (let t = 0, n = i.length; t < n; t++) {
|
|
const n = i[t];
|
|
n.onError && n.onError(e)
|
|
}
|
|
r.manager.itemError(t), r.manager.itemEnd(t)
|
|
}
|
|
}), !1), a.addEventListener("progress", (function(e) {
|
|
const n = Ss[t];
|
|
for (let t = 0, i = n.length; t < i; t++) {
|
|
const i = n[t];
|
|
i.onProgress && i.onProgress(e)
|
|
}
|
|
}), !1), a.addEventListener("error", (function(e) {
|
|
const n = Ss[t];
|
|
delete Ss[t];
|
|
for (let t = 0, i = n.length; t < i; t++) {
|
|
const i = n[t];
|
|
i.onError && i.onError(e)
|
|
}
|
|
r.manager.itemError(t), r.manager.itemEnd(t)
|
|
}), !1), a.addEventListener("abort", (function(e) {
|
|
const n = Ss[t];
|
|
delete Ss[t];
|
|
for (let t = 0, i = n.length; t < i; t++) {
|
|
const i = n[t];
|
|
i.onError && i.onError(e)
|
|
}
|
|
r.manager.itemError(t), r.manager.itemEnd(t)
|
|
}), !1), void 0 !== this.responseType && (a.responseType = this.responseType), void 0 !== this.withCredentials && (a.withCredentials = this.withCredentials), a.overrideMimeType && a.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : "text/plain");
|
|
for (const t in this.requestHeader) a.setRequestHeader(t, this.requestHeader[t]);
|
|
a.send(null)
|
|
}
|
|
return r.manager.itemStart(t), a
|
|
},
|
|
setResponseType: function(t) {
|
|
return this.responseType = t, this
|
|
},
|
|
setMimeType: function(t) {
|
|
return this.mimeType = t, this
|
|
}
|
|
}), Ls.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Ls,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ts(r.manager);
|
|
o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) {
|
|
try {
|
|
e(r.parse(JSON.parse(n)))
|
|
} catch (e) {
|
|
i ? i(e) : console.error(e), r.manager.itemError(t)
|
|
}
|
|
}), n, i)
|
|
},
|
|
parse: function(t) {
|
|
const e = [];
|
|
for (let n = 0; n < t.length; n++) {
|
|
const i = _s.parse(t[n]);
|
|
e.push(i)
|
|
}
|
|
return e
|
|
}
|
|
}), Rs.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Rs,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = [],
|
|
s = new mo,
|
|
a = new Ts(this.manager);
|
|
a.setPath(this.path), a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setWithCredentials(r.withCredentials);
|
|
let l = 0;
|
|
|
|
function c(c) {
|
|
a.load(t[c], (function(t) {
|
|
const n = r.parse(t, !0);
|
|
o[c] = {
|
|
width: n.width,
|
|
height: n.height,
|
|
format: n.format,
|
|
mipmaps: n.mipmaps
|
|
}, l += 1, 6 === l && (1 === n.mipmapCount && (s.minFilter = 1006), s.image = o, s.format = n.format, s.needsUpdate = !0, e && e(s))
|
|
}), n, i)
|
|
}
|
|
if (Array.isArray(t))
|
|
for (let e = 0, n = t.length; e < n; ++e) c(e);
|
|
else a.load(t, (function(t) {
|
|
const n = r.parse(t, !0);
|
|
if (n.isCubemap) {
|
|
const t = n.mipmaps.length / n.mipmapCount;
|
|
for (let e = 0; e < t; e++) {
|
|
o[e] = {
|
|
mipmaps: []
|
|
};
|
|
for (let t = 0; t < n.mipmapCount; t++) o[e].mipmaps.push(n.mipmaps[e * n.mipmapCount + t]), o[e].format = n.format, o[e].width = n.width, o[e].height = n.height
|
|
}
|
|
s.image = o
|
|
} else s.image.width = n.width, s.image.height = n.height, s.mipmaps = n.mipmaps;
|
|
1 === n.mipmapCount && (s.minFilter = 1006), s.format = n.format, s.needsUpdate = !0, e && e(s)
|
|
}), n, i);
|
|
return s
|
|
}
|
|
}), Cs.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Cs,
|
|
load: function(t, e, n, i) {
|
|
void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t);
|
|
const r = this,
|
|
o = ws.get(t);
|
|
if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() {
|
|
e && e(o), r.manager.itemEnd(t)
|
|
}), 0), o;
|
|
const s = document.createElementNS("http://www.w3.org/1999/xhtml", "img");
|
|
|
|
function a() {
|
|
s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), ws.add(t, this), e && e(this), r.manager.itemEnd(t)
|
|
}
|
|
|
|
function l(e) {
|
|
s.removeEventListener("load", a, !1), s.removeEventListener("error", l, !1), i && i(e), r.manager.itemError(t), r.manager.itemEnd(t)
|
|
}
|
|
return s.addEventListener("load", a, !1), s.addEventListener("error", l, !1), "data:" !== t.substr(0, 5) && void 0 !== this.crossOrigin && (s.crossOrigin = this.crossOrigin), r.manager.itemStart(t), s.src = t, s
|
|
}
|
|
}), Ps.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Ps,
|
|
load: function(t, e, n, i) {
|
|
const r = new Ze,
|
|
o = new Cs(this.manager);
|
|
o.setCrossOrigin(this.crossOrigin), o.setPath(this.path);
|
|
let s = 0;
|
|
|
|
function a(n) {
|
|
o.load(t[n], (function(t) {
|
|
r.images[n] = t, s++, 6 === s && (r.needsUpdate = !0, e && e(r))
|
|
}), void 0, i)
|
|
}
|
|
for (let e = 0; e < t.length; ++e) a(e);
|
|
return r
|
|
}
|
|
}), Ds.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Ds,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ke,
|
|
s = new Ts(this.manager);
|
|
return s.setResponseType("arraybuffer"), s.setRequestHeader(this.requestHeader), s.setPath(this.path), s.setWithCredentials(r.withCredentials), s.load(t, (function(t) {
|
|
const n = r.parse(t);
|
|
n && (void 0 !== n.image ? o.image = n.image : void 0 !== n.data && (o.image.width = n.width, o.image.height = n.height, o.image.data = n.data), o.wrapS = void 0 !== n.wrapS ? n.wrapS : 1001, o.wrapT = void 0 !== n.wrapT ? n.wrapT : 1001, o.magFilter = void 0 !== n.magFilter ? n.magFilter : 1006, o.minFilter = void 0 !== n.minFilter ? n.minFilter : 1006, o.anisotropy = void 0 !== n.anisotropy ? n.anisotropy : 1, void 0 !== n.encoding && (o.encoding = n.encoding), void 0 !== n.flipY && (o.flipY = n.flipY), void 0 !== n.format && (o.format = n.format), void 0 !== n.type && (o.type = n.type), void 0 !== n.mipmaps && (o.mipmaps = n.mipmaps, o.minFilter = 1008), 1 === n.mipmapCount && (o.minFilter = 1006), o.needsUpdate = !0, e && e(o, n))
|
|
}), n, i), o
|
|
}
|
|
}), Is.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Is,
|
|
load: function(t, e, n, i) {
|
|
const r = new b,
|
|
o = new Cs(this.manager);
|
|
return o.setCrossOrigin(this.crossOrigin), o.setPath(this.path), o.load(t, (function(n) {
|
|
r.image = n;
|
|
const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/);
|
|
r.format = i ? 1022 : 1023, r.needsUpdate = !0, void 0 !== e && e(r)
|
|
}), n, i), r
|
|
}
|
|
}), Object.assign(Os.prototype, {
|
|
getPoint: function() {
|
|
return console.warn("THREE.Curve: .getPoint() not implemented."), null
|
|
},
|
|
getPointAt: function(t, e) {
|
|
const n = this.getUtoTmapping(t);
|
|
return this.getPoint(n, e)
|
|
},
|
|
getPoints: function(t = 5) {
|
|
const e = [];
|
|
for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t));
|
|
return e
|
|
},
|
|
getSpacedPoints: function(t = 5) {
|
|
const e = [];
|
|
for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t));
|
|
return e
|
|
},
|
|
getLength: function() {
|
|
const t = this.getLengths();
|
|
return t[t.length - 1]
|
|
},
|
|
getLengths: function(t) {
|
|
if (void 0 === t && (t = this.arcLengthDivisions), this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) return this.cacheArcLengths;
|
|
this.needsUpdate = !1;
|
|
const e = [];
|
|
let n, i = this.getPoint(0),
|
|
r = 0;
|
|
e.push(0);
|
|
for (let o = 1; o <= t; o++) n = this.getPoint(o / t), r += n.distanceTo(i), e.push(r), i = n;
|
|
return this.cacheArcLengths = e, e
|
|
},
|
|
updateArcLengths: function() {
|
|
this.needsUpdate = !0, this.getLengths()
|
|
},
|
|
getUtoTmapping: function(t, e) {
|
|
const n = this.getLengths();
|
|
let i = 0;
|
|
const r = n.length;
|
|
let o;
|
|
o = e || t * n[r - 1];
|
|
let s, a = 0,
|
|
l = r - 1;
|
|
for (; a <= l;)
|
|
if (i = Math.floor(a + (l - a) / 2), s = n[i] - o, s < 0) a = i + 1;
|
|
else {
|
|
if (!(s > 0)) {
|
|
l = i;
|
|
break
|
|
}
|
|
l = i - 1
|
|
} if (i = l, n[i] === o) return i / (r - 1);
|
|
const c = n[i];
|
|
return (i + (o - c) / (n[i + 1] - c)) / (r - 1)
|
|
},
|
|
getTangent: function(t, e) {
|
|
let n = t - 1e-4,
|
|
i = t + 1e-4;
|
|
n < 0 && (n = 0), i > 1 && (i = 1);
|
|
const r = this.getPoint(n),
|
|
o = this.getPoint(i),
|
|
s = e || (r.isVector2 ? new v : new T);
|
|
return s.copy(o).sub(r).normalize(), s
|
|
},
|
|
getTangentAt: function(t, e) {
|
|
const n = this.getUtoTmapping(t);
|
|
return this.getTangent(n, e)
|
|
},
|
|
computeFrenetFrames: function(t, e) {
|
|
const n = new T,
|
|
i = [],
|
|
r = [],
|
|
o = [],
|
|
s = new T,
|
|
a = new et;
|
|
for (let e = 0; e <= t; e++) {
|
|
const n = e / t;
|
|
i[e] = this.getTangentAt(n, new T), i[e].normalize()
|
|
}
|
|
r[0] = new T, o[0] = new T;
|
|
let l = Number.MAX_VALUE;
|
|
const c = Math.abs(i[0].x),
|
|
h = Math.abs(i[0].y),
|
|
u = Math.abs(i[0].z);
|
|
c <= l && (l = c, n.set(1, 0, 0)), h <= l && (l = h, n.set(0, 1, 0)), u <= l && n.set(0, 0, 1), s.crossVectors(i[0], n).normalize(), r[0].crossVectors(i[0], s), o[0].crossVectors(i[0], r[0]);
|
|
for (let e = 1; e <= t; e++) {
|
|
if (r[e] = r[e - 1].clone(), o[e] = o[e - 1].clone(), s.crossVectors(i[e - 1], i[e]), s.length() > Number.EPSILON) {
|
|
s.normalize();
|
|
const t = Math.acos(g.clamp(i[e - 1].dot(i[e]), -1, 1));
|
|
r[e].applyMatrix4(a.makeRotationAxis(s, t))
|
|
}
|
|
o[e].crossVectors(i[e], r[e])
|
|
}
|
|
if (!0 === e) {
|
|
let e = Math.acos(g.clamp(r[0].dot(r[t]), -1, 1));
|
|
e /= t, i[0].dot(s.crossVectors(r[0], r[t])) > 0 && (e = -e);
|
|
for (let n = 1; n <= t; n++) r[n].applyMatrix4(a.makeRotationAxis(i[n], e * n)), o[n].crossVectors(i[n], r[n])
|
|
}
|
|
return {
|
|
tangents: i,
|
|
normals: r,
|
|
binormals: o
|
|
}
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
},
|
|
copy: function(t) {
|
|
return this.arcLengthDivisions = t.arcLengthDivisions, this
|
|
},
|
|
toJSON: function() {
|
|
const t = {
|
|
metadata: {
|
|
version: 4.5,
|
|
type: "Curve",
|
|
generator: "Curve.toJSON"
|
|
}
|
|
};
|
|
return t.arcLengthDivisions = this.arcLengthDivisions, t.type = this.type, t
|
|
},
|
|
fromJSON: function(t) {
|
|
return this.arcLengthDivisions = t.arcLengthDivisions, this
|
|
}
|
|
}), Ns.prototype = Object.create(Os.prototype), Ns.prototype.constructor = Ns, Ns.prototype.isEllipseCurve = !0, Ns.prototype.getPoint = function(t, e) {
|
|
const n = e || new v,
|
|
i = 2 * Math.PI;
|
|
let r = this.aEndAngle - this.aStartAngle;
|
|
const o = Math.abs(r) < Number.EPSILON;
|
|
for (; r < 0;) r += i;
|
|
for (; r > i;) r -= i;
|
|
r < Number.EPSILON && (r = o ? 0 : i), !0 !== this.aClockwise || o || (r === i ? r = -i : r -= i);
|
|
const s = this.aStartAngle + t * r;
|
|
let a = this.aX + this.xRadius * Math.cos(s),
|
|
l = this.aY + this.yRadius * Math.sin(s);
|
|
if (0 !== this.aRotation) {
|
|
const t = Math.cos(this.aRotation),
|
|
e = Math.sin(this.aRotation),
|
|
n = a - this.aX,
|
|
i = l - this.aY;
|
|
a = n * t - i * e + this.aX, l = n * e + i * t + this.aY
|
|
}
|
|
return n.set(a, l)
|
|
}, Ns.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this
|
|
}, Ns.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.aX = this.aX, t.aY = this.aY, t.xRadius = this.xRadius, t.yRadius = this.yRadius, t.aStartAngle = this.aStartAngle, t.aEndAngle = this.aEndAngle, t.aClockwise = this.aClockwise, t.aRotation = this.aRotation, t
|
|
}, Ns.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.aX = t.aX, this.aY = t.aY, this.xRadius = t.xRadius, this.yRadius = t.yRadius, this.aStartAngle = t.aStartAngle, this.aEndAngle = t.aEndAngle, this.aClockwise = t.aClockwise, this.aRotation = t.aRotation, this
|
|
}, Bs.prototype = Object.create(Ns.prototype), Bs.prototype.constructor = Bs, Bs.prototype.isArcCurve = !0;
|
|
const zs = new T,
|
|
Us = new Fs,
|
|
Hs = new Fs,
|
|
Gs = new Fs;
|
|
|
|
function Vs(t = [], e = !1, n = "centripetal", i = .5) {
|
|
Os.call(this), this.type = "CatmullRomCurve3", this.points = t, this.closed = e, this.curveType = n, this.tension = i
|
|
}
|
|
|
|
function ks(t, e, n, i, r) {
|
|
const o = .5 * (i - e),
|
|
s = .5 * (r - n),
|
|
a = t * t;
|
|
return (2 * n - 2 * i + o + s) * (t * a) + (-3 * n + 3 * i - 2 * o - s) * a + o * t + n
|
|
}
|
|
|
|
function Ws(t, e, n, i) {
|
|
return function(t, e) {
|
|
const n = 1 - t;
|
|
return n * n * e
|
|
}(t, e) + function(t, e) {
|
|
return 2 * (1 - t) * t * e
|
|
}(t, n) + function(t, e) {
|
|
return t * t * e
|
|
}(t, i)
|
|
}
|
|
|
|
function js(t, e, n, i, r) {
|
|
return function(t, e) {
|
|
const n = 1 - t;
|
|
return n * n * n * e
|
|
}(t, e) + function(t, e) {
|
|
const n = 1 - t;
|
|
return 3 * n * n * t * e
|
|
}(t, n) + function(t, e) {
|
|
return 3 * (1 - t) * t * t * e
|
|
}(t, i) + function(t, e) {
|
|
return t * t * t * e
|
|
}(t, r)
|
|
}
|
|
|
|
function Xs(t = new v, e = new v, n = new v, i = new v) {
|
|
Os.call(this), this.type = "CubicBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i
|
|
}
|
|
|
|
function qs(t = new T, e = new T, n = new T, i = new T) {
|
|
Os.call(this), this.type = "CubicBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n, this.v3 = i
|
|
}
|
|
|
|
function Ys(t = new v, e = new v) {
|
|
Os.call(this), this.type = "LineCurve", this.v1 = t, this.v2 = e
|
|
}
|
|
|
|
function Qs(t = new T, e = new T) {
|
|
Os.call(this), this.type = "LineCurve3", this.v1 = t, this.v2 = e
|
|
}
|
|
|
|
function Zs(t = new v, e = new v, n = new v) {
|
|
Os.call(this), this.type = "QuadraticBezierCurve", this.v0 = t, this.v1 = e, this.v2 = n
|
|
}
|
|
|
|
function Js(t = new T, e = new T, n = new T) {
|
|
Os.call(this), this.type = "QuadraticBezierCurve3", this.v0 = t, this.v1 = e, this.v2 = n
|
|
}
|
|
|
|
function Ks(t = []) {
|
|
Os.call(this), this.type = "SplineCurve", this.points = t
|
|
}
|
|
Vs.prototype = Object.create(Os.prototype), Vs.prototype.constructor = Vs, Vs.prototype.isCatmullRomCurve3 = !0, Vs.prototype.getPoint = function(t, e = new T) {
|
|
const n = e,
|
|
i = this.points,
|
|
r = i.length,
|
|
o = (r - (this.closed ? 0 : 1)) * t;
|
|
let s, a, l = Math.floor(o),
|
|
c = o - l;
|
|
this.closed ? l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r : 0 === c && l === r - 1 && (l = r - 2, c = 1), this.closed || l > 0 ? s = i[(l - 1) % r] : (zs.subVectors(i[0], i[1]).add(i[0]), s = zs);
|
|
const h = i[l % r],
|
|
u = i[(l + 1) % r];
|
|
if (this.closed || l + 2 < r ? a = i[(l + 2) % r] : (zs.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), a = zs), "centripetal" === this.curveType || "chordal" === this.curveType) {
|
|
const t = "chordal" === this.curveType ? .5 : .25;
|
|
let e = Math.pow(s.distanceToSquared(h), t),
|
|
n = Math.pow(h.distanceToSquared(u), t),
|
|
i = Math.pow(u.distanceToSquared(a), t);
|
|
n < 1e-4 && (n = 1), e < 1e-4 && (e = n), i < 1e-4 && (i = n), Us.initNonuniformCatmullRom(s.x, h.x, u.x, a.x, e, n, i), Hs.initNonuniformCatmullRom(s.y, h.y, u.y, a.y, e, n, i), Gs.initNonuniformCatmullRom(s.z, h.z, u.z, a.z, e, n, i)
|
|
} else "catmullrom" === this.curveType && (Us.initCatmullRom(s.x, h.x, u.x, a.x, this.tension), Hs.initCatmullRom(s.y, h.y, u.y, a.y, this.tension), Gs.initCatmullRom(s.z, h.z, u.z, a.z, this.tension));
|
|
return n.set(Us.calc(c), Hs.calc(c), Gs.calc(c)), n
|
|
}, Vs.prototype.copy = function(t) {
|
|
Os.prototype.copy.call(this, t), this.points = [];
|
|
for (let e = 0, n = t.points.length; e < n; e++) {
|
|
const n = t.points[e];
|
|
this.points.push(n.clone())
|
|
}
|
|
return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this
|
|
}, Vs.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
t.points = [];
|
|
for (let e = 0, n = this.points.length; e < n; e++) {
|
|
const n = this.points[e];
|
|
t.points.push(n.toArray())
|
|
}
|
|
return t.closed = this.closed, t.curveType = this.curveType, t.tension = this.tension, t
|
|
}, Vs.prototype.fromJSON = function(t) {
|
|
Os.prototype.fromJSON.call(this, t), this.points = [];
|
|
for (let e = 0, n = t.points.length; e < n; e++) {
|
|
const n = t.points[e];
|
|
this.points.push((new T).fromArray(n))
|
|
}
|
|
return this.closed = t.closed, this.curveType = t.curveType, this.tension = t.tension, this
|
|
}, Xs.prototype = Object.create(Os.prototype), Xs.prototype.constructor = Xs, Xs.prototype.isCubicBezierCurve = !0, Xs.prototype.getPoint = function(t, e = new v) {
|
|
const n = e,
|
|
i = this.v0,
|
|
r = this.v1,
|
|
o = this.v2,
|
|
s = this.v3;
|
|
return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y)), n
|
|
}, Xs.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this
|
|
}, Xs.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t
|
|
}, Xs.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this
|
|
}, qs.prototype = Object.create(Os.prototype), qs.prototype.constructor = qs, qs.prototype.isCubicBezierCurve3 = !0, qs.prototype.getPoint = function(t, e = new T) {
|
|
const n = e,
|
|
i = this.v0,
|
|
r = this.v1,
|
|
o = this.v2,
|
|
s = this.v3;
|
|
return n.set(js(t, i.x, r.x, o.x, s.x), js(t, i.y, r.y, o.y, s.y), js(t, i.z, r.z, o.z, s.z)), n
|
|
}, qs.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this.v3.copy(t.v3), this
|
|
}, qs.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t.v3 = this.v3.toArray(), t
|
|
}, qs.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this.v3.fromArray(t.v3), this
|
|
}, Ys.prototype = Object.create(Os.prototype), Ys.prototype.constructor = Ys, Ys.prototype.isLineCurve = !0, Ys.prototype.getPoint = function(t, e = new v) {
|
|
const n = e;
|
|
return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n
|
|
}, Ys.prototype.getPointAt = function(t, e) {
|
|
return this.getPoint(t, e)
|
|
}, Ys.prototype.getTangent = function(t, e) {
|
|
const n = e || new v;
|
|
return n.copy(this.v2).sub(this.v1).normalize(), n
|
|
}, Ys.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this
|
|
}, Ys.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t
|
|
}, Ys.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this
|
|
}, Qs.prototype = Object.create(Os.prototype), Qs.prototype.constructor = Qs, Qs.prototype.isLineCurve3 = !0, Qs.prototype.getPoint = function(t, e = new T) {
|
|
const n = e;
|
|
return 1 === t ? n.copy(this.v2) : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), n
|
|
}, Qs.prototype.getPointAt = function(t, e) {
|
|
return this.getPoint(t, e)
|
|
}, Qs.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v1.copy(t.v1), this.v2.copy(t.v2), this
|
|
}, Qs.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t
|
|
}, Qs.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this
|
|
}, Zs.prototype = Object.create(Os.prototype), Zs.prototype.constructor = Zs, Zs.prototype.isQuadraticBezierCurve = !0, Zs.prototype.getPoint = function(t, e = new v) {
|
|
const n = e,
|
|
i = this.v0,
|
|
r = this.v1,
|
|
o = this.v2;
|
|
return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y)), n
|
|
}, Zs.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this
|
|
}, Zs.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t
|
|
}, Zs.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this
|
|
}, Js.prototype = Object.create(Os.prototype), Js.prototype.constructor = Js, Js.prototype.isQuadraticBezierCurve3 = !0, Js.prototype.getPoint = function(t, e = new T) {
|
|
const n = e,
|
|
i = this.v0,
|
|
r = this.v1,
|
|
o = this.v2;
|
|
return n.set(Ws(t, i.x, r.x, o.x), Ws(t, i.y, r.y, o.y), Ws(t, i.z, r.z, o.z)), n
|
|
}, Js.prototype.copy = function(t) {
|
|
return Os.prototype.copy.call(this, t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this
|
|
}, Js.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
return t.v0 = this.v0.toArray(), t.v1 = this.v1.toArray(), t.v2 = this.v2.toArray(), t
|
|
}, Js.prototype.fromJSON = function(t) {
|
|
return Os.prototype.fromJSON.call(this, t), this.v0.fromArray(t.v0), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this
|
|
}, Ks.prototype = Object.create(Os.prototype), Ks.prototype.constructor = Ks, Ks.prototype.isSplineCurve = !0, Ks.prototype.getPoint = function(t, e = new v) {
|
|
const n = e,
|
|
i = this.points,
|
|
r = (i.length - 1) * t,
|
|
o = Math.floor(r),
|
|
s = r - o,
|
|
a = i[0 === o ? o : o - 1],
|
|
l = i[o],
|
|
c = i[o > i.length - 2 ? i.length - 1 : o + 1],
|
|
h = i[o > i.length - 3 ? i.length - 1 : o + 2];
|
|
return n.set(ks(s, a.x, l.x, c.x, h.x), ks(s, a.y, l.y, c.y, h.y)), n
|
|
}, Ks.prototype.copy = function(t) {
|
|
Os.prototype.copy.call(this, t), this.points = [];
|
|
for (let e = 0, n = t.points.length; e < n; e++) {
|
|
const n = t.points[e];
|
|
this.points.push(n.clone())
|
|
}
|
|
return this
|
|
}, Ks.prototype.toJSON = function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
t.points = [];
|
|
for (let e = 0, n = this.points.length; e < n; e++) {
|
|
const n = this.points[e];
|
|
t.points.push(n.toArray())
|
|
}
|
|
return t
|
|
}, Ks.prototype.fromJSON = function(t) {
|
|
Os.prototype.fromJSON.call(this, t), this.points = [];
|
|
for (let e = 0, n = t.points.length; e < n; e++) {
|
|
const n = t.points[e];
|
|
this.points.push((new v).fromArray(n))
|
|
}
|
|
return this
|
|
};
|
|
var $s = Object.freeze({
|
|
__proto__: null,
|
|
ArcCurve: Bs,
|
|
CatmullRomCurve3: Vs,
|
|
CubicBezierCurve: Xs,
|
|
CubicBezierCurve3: qs,
|
|
EllipseCurve: Ns,
|
|
LineCurve: Ys,
|
|
LineCurve3: Qs,
|
|
QuadraticBezierCurve: Zs,
|
|
QuadraticBezierCurve3: Js,
|
|
SplineCurve: Ks
|
|
});
|
|
|
|
function ta() {
|
|
Os.call(this), this.type = "CurvePath", this.curves = [], this.autoClose = !1
|
|
}
|
|
|
|
function ea(t) {
|
|
ta.call(this), this.type = "Path", this.currentPoint = new v, t && this.setFromPoints(t)
|
|
}
|
|
|
|
function na(t) {
|
|
ea.call(this, t), this.uuid = g.generateUUID(), this.type = "Shape", this.holes = []
|
|
}
|
|
|
|
function ia(t, e = 1) {
|
|
St.call(this), this.type = "Light", this.color = new Yt(t), this.intensity = e
|
|
}
|
|
|
|
function ra(t, e, n) {
|
|
ia.call(this, t, n), this.type = "HemisphereLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.groundColor = new Yt(e)
|
|
}
|
|
|
|
function oa(t) {
|
|
this.camera = t, this.bias = 0, this.normalBias = 0, this.radius = 1, this.mapSize = new v(512, 512), this.map = null, this.mapPass = null, this.matrix = new et, this.autoUpdate = !0, this.needsUpdate = !1, this._frustum = new en, this._frameExtents = new v(1, 1), this._viewportCount = 1, this._viewports = [new M(0, 0, 1, 1)]
|
|
}
|
|
|
|
function sa() {
|
|
oa.call(this, new Ye(50, 1, .5, 500)), this.focus = 1
|
|
}
|
|
|
|
function aa(t, e, n, i, r, o) {
|
|
ia.call(this, t, e), this.type = "SpotLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, Object.defineProperty(this, "power", {
|
|
get: function() {
|
|
return this.intensity * Math.PI
|
|
},
|
|
set: function(t) {
|
|
this.intensity = t / Math.PI
|
|
}
|
|
}), this.distance = void 0 !== n ? n : 0, this.angle = void 0 !== i ? i : Math.PI / 3, this.penumbra = void 0 !== r ? r : 0, this.decay = void 0 !== o ? o : 1, this.shadow = new sa
|
|
}
|
|
|
|
function la() {
|
|
oa.call(this, new Ye(90, 1, .5, 500)), this._frameExtents = new v(4, 2), this._viewportCount = 6, this._viewports = [new M(2, 1, 1, 1), new M(0, 1, 1, 1), new M(3, 1, 1, 1), new M(1, 1, 1, 1), new M(3, 0, 1, 1), new M(1, 0, 1, 1)], this._cubeDirections = [new T(1, 0, 0), new T(-1, 0, 0), new T(0, 0, 1), new T(0, 0, -1), new T(0, 1, 0), new T(0, -1, 0)], this._cubeUps = [new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 1, 0), new T(0, 0, 1), new T(0, 0, -1)]
|
|
}
|
|
|
|
function ca(t, e, n, i) {
|
|
ia.call(this, t, e), this.type = "PointLight", Object.defineProperty(this, "power", {
|
|
get: function() {
|
|
return 4 * this.intensity * Math.PI
|
|
},
|
|
set: function(t) {
|
|
this.intensity = t / (4 * Math.PI)
|
|
}
|
|
}), this.distance = void 0 !== n ? n : 0, this.decay = void 0 !== i ? i : 1, this.shadow = new la
|
|
}
|
|
|
|
function ha(t = -1, e = 1, n = 1, i = -1, r = .1, o = 2e3) {
|
|
qe.call(this), this.type = "OrthographicCamera", this.zoom = 1, this.view = null, this.left = t, this.right = e, this.top = n, this.bottom = i, this.near = r, this.far = o, this.updateProjectionMatrix()
|
|
}
|
|
|
|
function ua() {
|
|
oa.call(this, new ha(-5, 5, 5, -5, .5, 500))
|
|
}
|
|
|
|
function da(t, e) {
|
|
ia.call(this, t, e), this.type = "DirectionalLight", this.position.copy(St.DefaultUp), this.updateMatrix(), this.target = new St, this.shadow = new ua
|
|
}
|
|
|
|
function pa(t, e) {
|
|
ia.call(this, t, e), this.type = "AmbientLight"
|
|
}
|
|
|
|
function fa(t, e, n, i) {
|
|
ia.call(this, t, e), this.type = "RectAreaLight", this.width = void 0 !== n ? n : 10, this.height = void 0 !== i ? i : 10
|
|
}
|
|
ta.prototype = Object.assign(Object.create(Os.prototype), {
|
|
constructor: ta,
|
|
add: function(t) {
|
|
this.curves.push(t)
|
|
},
|
|
closePath: function() {
|
|
const t = this.curves[0].getPoint(0),
|
|
e = this.curves[this.curves.length - 1].getPoint(1);
|
|
t.equals(e) || this.curves.push(new Ys(e, t))
|
|
},
|
|
getPoint: function(t) {
|
|
const e = t * this.getLength(),
|
|
n = this.getCurveLengths();
|
|
let i = 0;
|
|
for (; i < n.length;) {
|
|
if (n[i] >= e) {
|
|
const t = n[i] - e,
|
|
r = this.curves[i],
|
|
o = r.getLength(),
|
|
s = 0 === o ? 0 : 1 - t / o;
|
|
return r.getPointAt(s)
|
|
}
|
|
i++
|
|
}
|
|
return null
|
|
},
|
|
getLength: function() {
|
|
const t = this.getCurveLengths();
|
|
return t[t.length - 1]
|
|
},
|
|
updateArcLengths: function() {
|
|
this.needsUpdate = !0, this.cacheLengths = null, this.getCurveLengths()
|
|
},
|
|
getCurveLengths: function() {
|
|
if (this.cacheLengths && this.cacheLengths.length === this.curves.length) return this.cacheLengths;
|
|
const t = [];
|
|
let e = 0;
|
|
for (let n = 0, i = this.curves.length; n < i; n++) e += this.curves[n].getLength(), t.push(e);
|
|
return this.cacheLengths = t, t
|
|
},
|
|
getSpacedPoints: function(t = 40) {
|
|
const e = [];
|
|
for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t));
|
|
return this.autoClose && e.push(e[0]), e
|
|
},
|
|
getPoints: function(t = 12) {
|
|
const e = [];
|
|
let n;
|
|
for (let i = 0, r = this.curves; i < r.length; i++) {
|
|
const o = r[i],
|
|
s = o && o.isEllipseCurve ? 2 * t : o && (o.isLineCurve || o.isLineCurve3) ? 1 : o && o.isSplineCurve ? t * o.points.length : t,
|
|
a = o.getPoints(s);
|
|
for (let t = 0; t < a.length; t++) {
|
|
const i = a[t];
|
|
n && n.equals(i) || (e.push(i), n = i)
|
|
}
|
|
}
|
|
return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e
|
|
},
|
|
copy: function(t) {
|
|
Os.prototype.copy.call(this, t), this.curves = [];
|
|
for (let e = 0, n = t.curves.length; e < n; e++) {
|
|
const n = t.curves[e];
|
|
this.curves.push(n.clone())
|
|
}
|
|
return this.autoClose = t.autoClose, this
|
|
},
|
|
toJSON: function() {
|
|
const t = Os.prototype.toJSON.call(this);
|
|
t.autoClose = this.autoClose, t.curves = [];
|
|
for (let e = 0, n = this.curves.length; e < n; e++) {
|
|
const n = this.curves[e];
|
|
t.curves.push(n.toJSON())
|
|
}
|
|
return t
|
|
},
|
|
fromJSON: function(t) {
|
|
Os.prototype.fromJSON.call(this, t), this.autoClose = t.autoClose, this.curves = [];
|
|
for (let e = 0, n = t.curves.length; e < n; e++) {
|
|
const n = t.curves[e];
|
|
this.curves.push((new $s[n.type]).fromJSON(n))
|
|
}
|
|
return this
|
|
}
|
|
}), ea.prototype = Object.assign(Object.create(ta.prototype), {
|
|
constructor: ea,
|
|
setFromPoints: function(t) {
|
|
this.moveTo(t[0].x, t[0].y);
|
|
for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y);
|
|
return this
|
|
},
|
|
moveTo: function(t, e) {
|
|
return this.currentPoint.set(t, e), this
|
|
},
|
|
lineTo: function(t, e) {
|
|
const n = new Ys(this.currentPoint.clone(), new v(t, e));
|
|
return this.curves.push(n), this.currentPoint.set(t, e), this
|
|
},
|
|
quadraticCurveTo: function(t, e, n, i) {
|
|
const r = new Zs(this.currentPoint.clone(), new v(t, e), new v(n, i));
|
|
return this.curves.push(r), this.currentPoint.set(n, i), this
|
|
},
|
|
bezierCurveTo: function(t, e, n, i, r, o) {
|
|
const s = new Xs(this.currentPoint.clone(), new v(t, e), new v(n, i), new v(r, o));
|
|
return this.curves.push(s), this.currentPoint.set(r, o), this
|
|
},
|
|
splineThru: function(t) {
|
|
const e = new Ks([this.currentPoint.clone()].concat(t));
|
|
return this.curves.push(e), this.currentPoint.copy(t[t.length - 1]), this
|
|
},
|
|
arc: function(t, e, n, i, r, o) {
|
|
const s = this.currentPoint.x,
|
|
a = this.currentPoint.y;
|
|
return this.absarc(t + s, e + a, n, i, r, o), this
|
|
},
|
|
absarc: function(t, e, n, i, r, o) {
|
|
return this.absellipse(t, e, n, n, i, r, o), this
|
|
},
|
|
ellipse: function(t, e, n, i, r, o, s, a) {
|
|
const l = this.currentPoint.x,
|
|
c = this.currentPoint.y;
|
|
return this.absellipse(t + l, e + c, n, i, r, o, s, a), this
|
|
},
|
|
absellipse: function(t, e, n, i, r, o, s, a) {
|
|
const l = new Ns(t, e, n, i, r, o, s, a);
|
|
if (this.curves.length > 0) {
|
|
const t = l.getPoint(0);
|
|
t.equals(this.currentPoint) || this.lineTo(t.x, t.y)
|
|
}
|
|
this.curves.push(l);
|
|
const c = l.getPoint(1);
|
|
return this.currentPoint.copy(c), this
|
|
},
|
|
copy: function(t) {
|
|
return ta.prototype.copy.call(this, t), this.currentPoint.copy(t.currentPoint), this
|
|
},
|
|
toJSON: function() {
|
|
const t = ta.prototype.toJSON.call(this);
|
|
return t.currentPoint = this.currentPoint.toArray(), t
|
|
},
|
|
fromJSON: function(t) {
|
|
return ta.prototype.fromJSON.call(this, t), this.currentPoint.fromArray(t.currentPoint), this
|
|
}
|
|
}), na.prototype = Object.assign(Object.create(ea.prototype), {
|
|
constructor: na,
|
|
getPointsHoles: function(t) {
|
|
const e = [];
|
|
for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t);
|
|
return e
|
|
},
|
|
extractPoints: function(t) {
|
|
return {
|
|
shape: this.getPoints(t),
|
|
holes: this.getPointsHoles(t)
|
|
}
|
|
},
|
|
copy: function(t) {
|
|
ea.prototype.copy.call(this, t), this.holes = [];
|
|
for (let e = 0, n = t.holes.length; e < n; e++) {
|
|
const n = t.holes[e];
|
|
this.holes.push(n.clone())
|
|
}
|
|
return this
|
|
},
|
|
toJSON: function() {
|
|
const t = ea.prototype.toJSON.call(this);
|
|
t.uuid = this.uuid, t.holes = [];
|
|
for (let e = 0, n = this.holes.length; e < n; e++) {
|
|
const n = this.holes[e];
|
|
t.holes.push(n.toJSON())
|
|
}
|
|
return t
|
|
},
|
|
fromJSON: function(t) {
|
|
ea.prototype.fromJSON.call(this, t), this.uuid = t.uuid, this.holes = [];
|
|
for (let e = 0, n = t.holes.length; e < n; e++) {
|
|
const n = t.holes[e];
|
|
this.holes.push((new ea).fromJSON(n))
|
|
}
|
|
return this
|
|
}
|
|
}), ia.prototype = Object.assign(Object.create(St.prototype), {
|
|
constructor: ia,
|
|
isLight: !0,
|
|
copy: function(t) {
|
|
return St.prototype.copy.call(this, t), this.color.copy(t.color), this.intensity = t.intensity, this
|
|
},
|
|
toJSON: function(t) {
|
|
const e = St.prototype.toJSON.call(this, t);
|
|
return e.object.color = this.color.getHex(), e.object.intensity = this.intensity, void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), void 0 !== this.distance && (e.object.distance = this.distance), void 0 !== this.angle && (e.object.angle = this.angle), void 0 !== this.decay && (e.object.decay = this.decay), void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), e
|
|
}
|
|
}), ra.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: ra,
|
|
isHemisphereLight: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this
|
|
}
|
|
}), Object.assign(oa.prototype, {
|
|
_projScreenMatrix: new et,
|
|
_lightPositionWorld: new T,
|
|
_lookTarget: new T,
|
|
getViewportCount: function() {
|
|
return this._viewportCount
|
|
},
|
|
getFrustum: function() {
|
|
return this._frustum
|
|
},
|
|
updateMatrices: function(t) {
|
|
const e = this.camera,
|
|
n = this.matrix,
|
|
i = this._projScreenMatrix,
|
|
r = this._lookTarget,
|
|
o = this._lightPositionWorld;
|
|
o.setFromMatrixPosition(t.matrixWorld), e.position.copy(o), r.setFromMatrixPosition(t.target.matrixWorld), e.lookAt(r), e.updateMatrixWorld(), i.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), this._frustum.setFromProjectionMatrix(i), n.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1), n.multiply(e.projectionMatrix), n.multiply(e.matrixWorldInverse)
|
|
},
|
|
getViewport: function(t) {
|
|
return this._viewports[t]
|
|
},
|
|
getFrameExtents: function() {
|
|
return this._frameExtents
|
|
},
|
|
copy: function(t) {
|
|
return this.camera = t.camera.clone(), this.bias = t.bias, this.radius = t.radius, this.mapSize.copy(t.mapSize), this
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
},
|
|
toJSON: function() {
|
|
const t = {};
|
|
return 0 !== this.bias && (t.bias = this.bias), 0 !== this.normalBias && (t.normalBias = this.normalBias), 1 !== this.radius && (t.radius = this.radius), 512 === this.mapSize.x && 512 === this.mapSize.y || (t.mapSize = this.mapSize.toArray()), t.camera = this.camera.toJSON(!1).object, delete t.camera.matrix, t
|
|
}
|
|
}), sa.prototype = Object.assign(Object.create(oa.prototype), {
|
|
constructor: sa,
|
|
isSpotLightShadow: !0,
|
|
updateMatrices: function(t) {
|
|
const e = this.camera,
|
|
n = 2 * g.RAD2DEG * t.angle * this.focus,
|
|
i = this.mapSize.width / this.mapSize.height,
|
|
r = t.distance || e.far;
|
|
n === e.fov && i === e.aspect && r === e.far || (e.fov = n, e.aspect = i, e.far = r, e.updateProjectionMatrix()), oa.prototype.updateMatrices.call(this, t)
|
|
}
|
|
}), aa.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: aa,
|
|
isSpotLight: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.distance = t.distance, this.angle = t.angle, this.penumbra = t.penumbra, this.decay = t.decay, this.target = t.target.clone(), this.shadow = t.shadow.clone(), this
|
|
}
|
|
}), la.prototype = Object.assign(Object.create(oa.prototype), {
|
|
constructor: la,
|
|
isPointLightShadow: !0,
|
|
updateMatrices: function(t, e = 0) {
|
|
const n = this.camera,
|
|
i = this.matrix,
|
|
r = this._lightPositionWorld,
|
|
o = this._lookTarget,
|
|
s = this._projScreenMatrix;
|
|
r.setFromMatrixPosition(t.matrixWorld), n.position.copy(r), o.copy(n.position), o.add(this._cubeDirections[e]), n.up.copy(this._cubeUps[e]), n.lookAt(o), n.updateMatrixWorld(), i.makeTranslation(-r.x, -r.y, -r.z), s.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), this._frustum.setFromProjectionMatrix(s)
|
|
}
|
|
}), ca.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: ca,
|
|
isPointLight: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.distance = t.distance, this.decay = t.decay, this.shadow = t.shadow.clone(), this
|
|
}
|
|
}), ha.prototype = Object.assign(Object.create(qe.prototype), {
|
|
constructor: ha,
|
|
isOrthographicCamera: !0,
|
|
copy: function(t, e) {
|
|
return qe.prototype.copy.call(this, t, e), this.left = t.left, this.right = t.right, this.top = t.top, this.bottom = t.bottom, this.near = t.near, this.far = t.far, this.zoom = t.zoom, this.view = null === t.view ? null : Object.assign({}, t.view), this
|
|
},
|
|
setViewOffset: function(t, e, n, i, r, o) {
|
|
null === this.view && (this.view = {
|
|
enabled: !0,
|
|
fullWidth: 1,
|
|
fullHeight: 1,
|
|
offsetX: 0,
|
|
offsetY: 0,
|
|
width: 1,
|
|
height: 1
|
|
}), this.view.enabled = !0, this.view.fullWidth = t, this.view.fullHeight = e, this.view.offsetX = n, this.view.offsetY = i, this.view.width = r, this.view.height = o, this.updateProjectionMatrix()
|
|
},
|
|
clearViewOffset: function() {
|
|
null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix()
|
|
},
|
|
updateProjectionMatrix: function() {
|
|
const t = (this.right - this.left) / (2 * this.zoom),
|
|
e = (this.top - this.bottom) / (2 * this.zoom),
|
|
n = (this.right + this.left) / 2,
|
|
i = (this.top + this.bottom) / 2;
|
|
let r = n - t,
|
|
o = n + t,
|
|
s = i + e,
|
|
a = i - e;
|
|
if (null !== this.view && this.view.enabled) {
|
|
const t = (this.right - this.left) / this.view.fullWidth / this.zoom,
|
|
e = (this.top - this.bottom) / this.view.fullHeight / this.zoom;
|
|
r += t * this.view.offsetX, o = r + t * this.view.width, s -= e * this.view.offsetY, a = s - e * this.view.height
|
|
}
|
|
this.projectionMatrix.makeOrthographic(r, o, s, a, this.near, this.far), this.projectionMatrixInverse.copy(this.projectionMatrix).invert()
|
|
},
|
|
toJSON: function(t) {
|
|
const e = St.prototype.toJSON.call(this, t);
|
|
return e.object.zoom = this.zoom, e.object.left = this.left, e.object.right = this.right, e.object.top = this.top, e.object.bottom = this.bottom, e.object.near = this.near, e.object.far = this.far, null !== this.view && (e.object.view = Object.assign({}, this.view)), e
|
|
}
|
|
}), ua.prototype = Object.assign(Object.create(oa.prototype), {
|
|
constructor: ua,
|
|
isDirectionalLightShadow: !0,
|
|
updateMatrices: function(t) {
|
|
oa.prototype.updateMatrices.call(this, t)
|
|
}
|
|
}), da.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: da,
|
|
isDirectionalLight: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.target = t.target.clone(), this.shadow = t.shadow.clone(), this
|
|
}
|
|
}), pa.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: pa,
|
|
isAmbientLight: !0
|
|
}), fa.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: fa,
|
|
isRectAreaLight: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.width = t.width, this.height = t.height, this
|
|
},
|
|
toJSON: function(t) {
|
|
const e = ia.prototype.toJSON.call(this, t);
|
|
return e.object.width = this.width, e.object.height = this.height, e
|
|
}
|
|
});
|
|
class ma {
|
|
constructor() {
|
|
Object.defineProperty(this, "isSphericalHarmonics3", {
|
|
value: !0
|
|
}), this.coefficients = [];
|
|
for (let t = 0; t < 9; t++) this.coefficients.push(new T)
|
|
}
|
|
set(t) {
|
|
for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]);
|
|
return this
|
|
}
|
|
zero() {
|
|
for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0);
|
|
return this
|
|
}
|
|
getAt(t, e) {
|
|
const n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = this.coefficients;
|
|
return e.copy(o[0]).multiplyScalar(.282095), e.addScaledVector(o[1], .488603 * i), e.addScaledVector(o[2], .488603 * r), e.addScaledVector(o[3], .488603 * n), e.addScaledVector(o[4], n * i * 1.092548), e.addScaledVector(o[5], i * r * 1.092548), e.addScaledVector(o[6], .315392 * (3 * r * r - 1)), e.addScaledVector(o[7], n * r * 1.092548), e.addScaledVector(o[8], .546274 * (n * n - i * i)), e
|
|
}
|
|
getIrradianceAt(t, e) {
|
|
const n = t.x,
|
|
i = t.y,
|
|
r = t.z,
|
|
o = this.coefficients;
|
|
return e.copy(o[0]).multiplyScalar(.886227), e.addScaledVector(o[1], 1.023328 * i), e.addScaledVector(o[2], 1.023328 * r), e.addScaledVector(o[3], 1.023328 * n), e.addScaledVector(o[4], .858086 * n * i), e.addScaledVector(o[5], .858086 * i * r), e.addScaledVector(o[6], .743125 * r * r - .247708), e.addScaledVector(o[7], .858086 * n * r), e.addScaledVector(o[8], .429043 * (n * n - i * i)), e
|
|
}
|
|
add(t) {
|
|
for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]);
|
|
return this
|
|
}
|
|
addScaledSH(t, e) {
|
|
for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e);
|
|
return this
|
|
}
|
|
scale(t) {
|
|
for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t);
|
|
return this
|
|
}
|
|
lerp(t, e) {
|
|
for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e);
|
|
return this
|
|
}
|
|
equals(t) {
|
|
for (let e = 0; e < 9; e++)
|
|
if (!this.coefficients[e].equals(t.coefficients[e])) return !1;
|
|
return !0
|
|
}
|
|
copy(t) {
|
|
return this.set(t.coefficients)
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
fromArray(t, e = 0) {
|
|
const n = this.coefficients;
|
|
for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i);
|
|
return this
|
|
}
|
|
toArray(t = [], e = 0) {
|
|
const n = this.coefficients;
|
|
for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i);
|
|
return t
|
|
}
|
|
static getBasisAt(t, e) {
|
|
const n = t.x,
|
|
i = t.y,
|
|
r = t.z;
|
|
e[0] = .282095, e[1] = .488603 * i, e[2] = .488603 * r, e[3] = .488603 * n, e[4] = 1.092548 * n * i, e[5] = 1.092548 * i * r, e[6] = .315392 * (3 * r * r - 1), e[7] = 1.092548 * n * r, e[8] = .546274 * (n * n - i * i)
|
|
}
|
|
}
|
|
|
|
function ga(t, e) {
|
|
ia.call(this, void 0, e), this.type = "LightProbe", this.sh = void 0 !== t ? t : new ma
|
|
}
|
|
|
|
function va(t) {
|
|
Es.call(this, t), this.textures = {}
|
|
}
|
|
ga.prototype = Object.assign(Object.create(ia.prototype), {
|
|
constructor: ga,
|
|
isLightProbe: !0,
|
|
copy: function(t) {
|
|
return ia.prototype.copy.call(this, t), this.sh.copy(t.sh), this
|
|
},
|
|
fromJSON: function(t) {
|
|
return this.intensity = t.intensity, this.sh.fromArray(t.sh), this
|
|
},
|
|
toJSON: function(t) {
|
|
const e = ia.prototype.toJSON.call(this, t);
|
|
return e.object.sh = this.sh.toArray(), e
|
|
}
|
|
}), va.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: va,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ts(r.manager);
|
|
o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) {
|
|
try {
|
|
e(r.parse(JSON.parse(n)))
|
|
} catch (e) {
|
|
i ? i(e) : console.error(e), r.manager.itemError(t)
|
|
}
|
|
}), n, i)
|
|
},
|
|
parse: function(t) {
|
|
const e = this.textures;
|
|
|
|
function n(t) {
|
|
return void 0 === e[t] && console.warn("THREE.MaterialLoader: Undefined texture", t), e[t]
|
|
}
|
|
const i = new as[t.type];
|
|
if (void 0 !== t.uuid && (i.uuid = t.uuid), void 0 !== t.name && (i.name = t.name), void 0 !== t.color && void 0 !== i.color && i.color.setHex(t.color), void 0 !== t.roughness && (i.roughness = t.roughness), void 0 !== t.metalness && (i.metalness = t.metalness), void 0 !== t.sheen && (i.sheen = (new Yt).setHex(t.sheen)), void 0 !== t.emissive && void 0 !== i.emissive && i.emissive.setHex(t.emissive), void 0 !== t.specular && void 0 !== i.specular && i.specular.setHex(t.specular), void 0 !== t.shininess && (i.shininess = t.shininess), void 0 !== t.clearcoat && (i.clearcoat = t.clearcoat), void 0 !== t.clearcoatRoughness && (i.clearcoatRoughness = t.clearcoatRoughness), void 0 !== t.fog && (i.fog = t.fog), void 0 !== t.flatShading && (i.flatShading = t.flatShading), void 0 !== t.blending && (i.blending = t.blending), void 0 !== t.combine && (i.combine = t.combine), void 0 !== t.side && (i.side = t.side), void 0 !== t.opacity && (i.opacity = t.opacity), void 0 !== t.transparent && (i.transparent = t.transparent), void 0 !== t.alphaTest && (i.alphaTest = t.alphaTest), void 0 !== t.depthTest && (i.depthTest = t.depthTest), void 0 !== t.depthWrite && (i.depthWrite = t.depthWrite), void 0 !== t.colorWrite && (i.colorWrite = t.colorWrite), void 0 !== t.stencilWrite && (i.stencilWrite = t.stencilWrite), void 0 !== t.stencilWriteMask && (i.stencilWriteMask = t.stencilWriteMask), void 0 !== t.stencilFunc && (i.stencilFunc = t.stencilFunc), void 0 !== t.stencilRef && (i.stencilRef = t.stencilRef), void 0 !== t.stencilFuncMask && (i.stencilFuncMask = t.stencilFuncMask), void 0 !== t.stencilFail && (i.stencilFail = t.stencilFail), void 0 !== t.stencilZFail && (i.stencilZFail = t.stencilZFail), void 0 !== t.stencilZPass && (i.stencilZPass = t.stencilZPass), void 0 !== t.wireframe && (i.wireframe = t.wireframe), void 0 !== t.wireframeLinewidth && (i.wireframeLinewidth = t.wireframeLinewidth), void 0 !== t.wireframeLinecap && (i.wireframeLinecap = t.wireframeLinecap), void 0 !== t.wireframeLinejoin && (i.wireframeLinejoin = t.wireframeLinejoin), void 0 !== t.rotation && (i.rotation = t.rotation), 1 !== t.linewidth && (i.linewidth = t.linewidth), void 0 !== t.dashSize && (i.dashSize = t.dashSize), void 0 !== t.gapSize && (i.gapSize = t.gapSize), void 0 !== t.scale && (i.scale = t.scale), void 0 !== t.polygonOffset && (i.polygonOffset = t.polygonOffset), void 0 !== t.polygonOffsetFactor && (i.polygonOffsetFactor = t.polygonOffsetFactor), void 0 !== t.polygonOffsetUnits && (i.polygonOffsetUnits = t.polygonOffsetUnits), void 0 !== t.skinning && (i.skinning = t.skinning), void 0 !== t.morphTargets && (i.morphTargets = t.morphTargets), void 0 !== t.morphNormals && (i.morphNormals = t.morphNormals), void 0 !== t.dithering && (i.dithering = t.dithering), void 0 !== t.vertexTangents && (i.vertexTangents = t.vertexTangents), void 0 !== t.visible && (i.visible = t.visible), void 0 !== t.toneMapped && (i.toneMapped = t.toneMapped), void 0 !== t.userData && (i.userData = t.userData), void 0 !== t.vertexColors && ("number" == typeof t.vertexColors ? i.vertexColors = t.vertexColors > 0 : i.vertexColors = t.vertexColors), void 0 !== t.uniforms)
|
|
for (const e in t.uniforms) {
|
|
const r = t.uniforms[e];
|
|
switch (i.uniforms[e] = {}, r.type) {
|
|
case "t":
|
|
i.uniforms[e].value = n(r.value);
|
|
break;
|
|
case "c":
|
|
i.uniforms[e].value = (new Yt).setHex(r.value);
|
|
break;
|
|
case "v2":
|
|
i.uniforms[e].value = (new v).fromArray(r.value);
|
|
break;
|
|
case "v3":
|
|
i.uniforms[e].value = (new T).fromArray(r.value);
|
|
break;
|
|
case "v4":
|
|
i.uniforms[e].value = (new M).fromArray(r.value);
|
|
break;
|
|
case "m3":
|
|
i.uniforms[e].value = (new y).fromArray(r.value);
|
|
break;
|
|
case "m4":
|
|
i.uniforms[e].value = (new et).fromArray(r.value);
|
|
break;
|
|
default:
|
|
i.uniforms[e].value = r.value
|
|
}
|
|
}
|
|
if (void 0 !== t.defines && (i.defines = t.defines), void 0 !== t.vertexShader && (i.vertexShader = t.vertexShader), void 0 !== t.fragmentShader && (i.fragmentShader = t.fragmentShader), void 0 !== t.extensions)
|
|
for (const e in t.extensions) i.extensions[e] = t.extensions[e];
|
|
if (void 0 !== t.shading && (i.flatShading = 1 === t.shading), void 0 !== t.size && (i.size = t.size), void 0 !== t.sizeAttenuation && (i.sizeAttenuation = t.sizeAttenuation), void 0 !== t.map && (i.map = n(t.map)), void 0 !== t.matcap && (i.matcap = n(t.matcap)), void 0 !== t.alphaMap && (i.alphaMap = n(t.alphaMap)), void 0 !== t.bumpMap && (i.bumpMap = n(t.bumpMap)), void 0 !== t.bumpScale && (i.bumpScale = t.bumpScale), void 0 !== t.normalMap && (i.normalMap = n(t.normalMap)), void 0 !== t.normalMapType && (i.normalMapType = t.normalMapType), void 0 !== t.normalScale) {
|
|
let e = t.normalScale;
|
|
!1 === Array.isArray(e) && (e = [e, e]), i.normalScale = (new v).fromArray(e)
|
|
}
|
|
return void 0 !== t.displacementMap && (i.displacementMap = n(t.displacementMap)), void 0 !== t.displacementScale && (i.displacementScale = t.displacementScale), void 0 !== t.displacementBias && (i.displacementBias = t.displacementBias), void 0 !== t.roughnessMap && (i.roughnessMap = n(t.roughnessMap)), void 0 !== t.metalnessMap && (i.metalnessMap = n(t.metalnessMap)), void 0 !== t.emissiveMap && (i.emissiveMap = n(t.emissiveMap)), void 0 !== t.emissiveIntensity && (i.emissiveIntensity = t.emissiveIntensity), void 0 !== t.specularMap && (i.specularMap = n(t.specularMap)), void 0 !== t.envMap && (i.envMap = n(t.envMap)), void 0 !== t.envMapIntensity && (i.envMapIntensity = t.envMapIntensity), void 0 !== t.reflectivity && (i.reflectivity = t.reflectivity), void 0 !== t.refractionRatio && (i.refractionRatio = t.refractionRatio), void 0 !== t.lightMap && (i.lightMap = n(t.lightMap)), void 0 !== t.lightMapIntensity && (i.lightMapIntensity = t.lightMapIntensity), void 0 !== t.aoMap && (i.aoMap = n(t.aoMap)), void 0 !== t.aoMapIntensity && (i.aoMapIntensity = t.aoMapIntensity), void 0 !== t.gradientMap && (i.gradientMap = n(t.gradientMap)), void 0 !== t.clearcoatMap && (i.clearcoatMap = n(t.clearcoatMap)), void 0 !== t.clearcoatRoughnessMap && (i.clearcoatRoughnessMap = n(t.clearcoatRoughnessMap)), void 0 !== t.clearcoatNormalMap && (i.clearcoatNormalMap = n(t.clearcoatNormalMap)), void 0 !== t.clearcoatNormalScale && (i.clearcoatNormalScale = (new v).fromArray(t.clearcoatNormalScale)), void 0 !== t.transmission && (i.transmission = t.transmission), void 0 !== t.transmissionMap && (i.transmissionMap = n(t.transmissionMap)), i
|
|
},
|
|
setTextures: function(t) {
|
|
return this.textures = t, this
|
|
}
|
|
});
|
|
const ya = function(t) {
|
|
const e = t.lastIndexOf("/");
|
|
return -1 === e ? "./" : t.substr(0, e + 1)
|
|
};
|
|
|
|
function Aa() {
|
|
be.call(this), this.type = "InstancedBufferGeometry", this.instanceCount = 1 / 0
|
|
}
|
|
|
|
function xa(t, e, n, i) {
|
|
"number" == typeof n && (i = n, n = !1, console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")), ee.call(this, t, e, n), this.meshPerAttribute = i || 1
|
|
}
|
|
|
|
function _a(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function ba(t) {
|
|
"undefined" == typeof createImageBitmap && console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."), "undefined" == typeof fetch && console.warn("THREE.ImageBitmapLoader: fetch() not supported."), Es.call(this, t), this.options = {
|
|
premultiplyAlpha: "none"
|
|
}
|
|
}
|
|
|
|
function wa() {
|
|
this.type = "ShapePath", this.color = new Yt, this.subPaths = [], this.currentPath = null
|
|
}
|
|
Aa.prototype = Object.assign(Object.create(be.prototype), {
|
|
constructor: Aa,
|
|
isInstancedBufferGeometry: !0,
|
|
copy: function(t) {
|
|
return be.prototype.copy.call(this, t), this.instanceCount = t.instanceCount, this
|
|
},
|
|
clone: function() {
|
|
return (new this.constructor).copy(this)
|
|
},
|
|
toJSON: function() {
|
|
const t = be.prototype.toJSON.call(this);
|
|
return t.instanceCount = this.instanceCount, t.isInstancedBufferGeometry = !0, t
|
|
}
|
|
}), xa.prototype = Object.assign(Object.create(ee.prototype), {
|
|
constructor: xa,
|
|
isInstancedBufferAttribute: !0,
|
|
copy: function(t) {
|
|
return ee.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this
|
|
},
|
|
toJSON: function() {
|
|
const t = ee.prototype.toJSON.call(this);
|
|
return t.meshPerAttribute = this.meshPerAttribute, t.isInstancedBufferAttribute = !0, t
|
|
}
|
|
}), _a.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: _a,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ts(r.manager);
|
|
o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) {
|
|
try {
|
|
e(r.parse(JSON.parse(n)))
|
|
} catch (e) {
|
|
i ? i(e) : console.error(e), r.manager.itemError(t)
|
|
}
|
|
}), n, i)
|
|
},
|
|
parse: function(t) {
|
|
const e = {},
|
|
n = {};
|
|
|
|
function i(t, i) {
|
|
if (void 0 !== e[i]) return e[i];
|
|
const r = t.interleavedBuffers[i],
|
|
o = function(t, e) {
|
|
if (void 0 !== n[e]) return n[e];
|
|
const i = t.arrayBuffers[e],
|
|
r = new Uint32Array(i).buffer;
|
|
return n[e] = r, r
|
|
}(t, r.buffer),
|
|
s = new dr(fe(r.type, o), r.stride);
|
|
return s.uuid = r.uuid, e[i] = s, s
|
|
}
|
|
const r = t.isInstancedBufferGeometry ? new Aa : new be,
|
|
o = t.data.index;
|
|
if (void 0 !== o) {
|
|
const t = fe(o.type, o.array);
|
|
r.setIndex(new ee(t, 1))
|
|
}
|
|
const s = t.data.attributes;
|
|
for (const e in s) {
|
|
const n = s[e];
|
|
let o;
|
|
if (n.isInterleavedBufferAttribute) {
|
|
o = new fr(i(t.data, n.data), n.itemSize, n.offset, n.normalized)
|
|
} else {
|
|
const t = fe(n.type, n.array);
|
|
o = new(n.isInstancedBufferAttribute ? xa : ee)(t, n.itemSize, n.normalized)
|
|
}
|
|
void 0 !== n.name && (o.name = n.name), r.setAttribute(e, o)
|
|
}
|
|
const a = t.data.morphAttributes;
|
|
if (a)
|
|
for (const e in a) {
|
|
const n = a[e],
|
|
o = [];
|
|
for (let e = 0, r = n.length; e < r; e++) {
|
|
const r = n[e];
|
|
let s;
|
|
if (r.isInterleavedBufferAttribute) {
|
|
s = new fr(i(t.data, r.data), r.itemSize, r.offset, r.normalized)
|
|
} else {
|
|
s = new ee(fe(r.type, r.array), r.itemSize, r.normalized)
|
|
}
|
|
void 0 !== r.name && (s.name = r.name), o.push(s)
|
|
}
|
|
r.morphAttributes[e] = o
|
|
}
|
|
t.data.morphTargetsRelative && (r.morphTargetsRelative = !0);
|
|
const l = t.data.groups || t.data.drawcalls || t.data.offsets;
|
|
if (void 0 !== l)
|
|
for (let t = 0, e = l.length; t !== e; ++t) {
|
|
const e = l[t];
|
|
r.addGroup(e.start, e.count, e.materialIndex)
|
|
}
|
|
const c = t.data.boundingSphere;
|
|
if (void 0 !== c) {
|
|
const t = new T;
|
|
void 0 !== c.center && t.fromArray(c.center), r.boundingSphere = new X(t, c.radius)
|
|
}
|
|
return t.name && (r.name = t.name), t.userData && (r.userData = t.userData), r
|
|
}
|
|
}), ba.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: ba,
|
|
isImageBitmapLoader: !0,
|
|
setOptions: function(t) {
|
|
return this.options = t, this
|
|
},
|
|
load: function(t, e, n, i) {
|
|
void 0 === t && (t = ""), void 0 !== this.path && (t = this.path + t), t = this.manager.resolveURL(t);
|
|
const r = this,
|
|
o = ws.get(t);
|
|
if (void 0 !== o) return r.manager.itemStart(t), setTimeout((function() {
|
|
e && e(o), r.manager.itemEnd(t)
|
|
}), 0), o;
|
|
const s = {};
|
|
s.credentials = "anonymous" === this.crossOrigin ? "same-origin" : "include", fetch(t, s).then((function(t) {
|
|
return t.blob()
|
|
})).then((function(t) {
|
|
return createImageBitmap(t, r.options)
|
|
})).then((function(n) {
|
|
ws.add(t, n), e && e(n), r.manager.itemEnd(t)
|
|
})).catch((function(e) {
|
|
i && i(e), r.manager.itemError(t), r.manager.itemEnd(t)
|
|
})), r.manager.itemStart(t)
|
|
}
|
|
}), Object.assign(wa.prototype, {
|
|
moveTo: function(t, e) {
|
|
return this.currentPath = new ea, this.subPaths.push(this.currentPath), this.currentPath.moveTo(t, e), this
|
|
},
|
|
lineTo: function(t, e) {
|
|
return this.currentPath.lineTo(t, e), this
|
|
},
|
|
quadraticCurveTo: function(t, e, n, i) {
|
|
return this.currentPath.quadraticCurveTo(t, e, n, i), this
|
|
},
|
|
bezierCurveTo: function(t, e, n, i, r, o) {
|
|
return this.currentPath.bezierCurveTo(t, e, n, i, r, o), this
|
|
},
|
|
splineThru: function(t) {
|
|
return this.currentPath.splineThru(t), this
|
|
},
|
|
toShapes: function(t, e) {
|
|
function n(t) {
|
|
const e = [];
|
|
for (let n = 0, i = t.length; n < i; n++) {
|
|
const i = t[n],
|
|
r = new na;
|
|
r.curves = i.curves, e.push(r)
|
|
}
|
|
return e
|
|
}
|
|
|
|
function i(t, e) {
|
|
const n = e.length;
|
|
let i = !1;
|
|
for (let r = n - 1, o = 0; o < n; r = o++) {
|
|
let n = e[r],
|
|
s = e[o],
|
|
a = s.x - n.x,
|
|
l = s.y - n.y;
|
|
if (Math.abs(l) > Number.EPSILON) {
|
|
if (l < 0 && (n = e[o], a = -a, s = e[r], l = -l), t.y < n.y || t.y > s.y) continue;
|
|
if (t.y === n.y) {
|
|
if (t.x === n.x) return !0
|
|
} else {
|
|
const e = l * (t.x - n.x) - a * (t.y - n.y);
|
|
if (0 === e) return !0;
|
|
if (e < 0) continue;
|
|
i = !i
|
|
}
|
|
} else {
|
|
if (t.y !== n.y) continue;
|
|
if (s.x <= t.x && t.x <= n.x || n.x <= t.x && t.x <= s.x) return !0
|
|
}
|
|
}
|
|
return i
|
|
}
|
|
const r = ko.isClockWise,
|
|
o = this.subPaths;
|
|
if (0 === o.length) return [];
|
|
if (!0 === e) return n(o);
|
|
let s, a, l;
|
|
const c = [];
|
|
if (1 === o.length) return a = o[0], l = new na, l.curves = a.curves, c.push(l), c;
|
|
let h = !r(o[0].getPoints());
|
|
h = t ? !h : h;
|
|
const u = [],
|
|
d = [];
|
|
let p, f, m = [],
|
|
g = 0;
|
|
d[g] = void 0, m[g] = [];
|
|
for (let e = 0, n = o.length; e < n; e++) a = o[e], p = a.getPoints(), s = r(p), s = t ? !s : s, s ? (!h && d[g] && g++, d[g] = {
|
|
s: new na,
|
|
p: p
|
|
}, d[g].s.curves = a.curves, h && g++, m[g] = []) : m[g].push({
|
|
h: a,
|
|
p: p[0]
|
|
});
|
|
if (!d[0]) return n(o);
|
|
if (d.length > 1) {
|
|
let t = !1;
|
|
const e = [];
|
|
for (let t = 0, e = d.length; t < e; t++) u[t] = [];
|
|
for (let n = 0, r = d.length; n < r; n++) {
|
|
const r = m[n];
|
|
for (let o = 0; o < r.length; o++) {
|
|
const s = r[o];
|
|
let a = !0;
|
|
for (let r = 0; r < d.length; r++) i(s.p, d[r].p) && (n !== r && e.push({
|
|
froms: n,
|
|
tos: r,
|
|
hole: o
|
|
}), a ? (a = !1, u[r].push(s)) : t = !0);
|
|
a && u[n].push(s)
|
|
}
|
|
}
|
|
e.length > 0 && (t || (m = u))
|
|
}
|
|
for (let t = 0, e = d.length; t < e; t++) {
|
|
l = d[t].s, c.push(l), f = m[t];
|
|
for (let t = 0, e = f.length; t < e; t++) l.holes.push(f[t].h)
|
|
}
|
|
return c
|
|
}
|
|
});
|
|
class Ma {
|
|
constructor(t) {
|
|
Object.defineProperty(this, "isFont", {
|
|
value: !0
|
|
}), this.type = "Font", this.data = t
|
|
}
|
|
generateShapes(t, e = 100) {
|
|
const n = [],
|
|
i = function(t, e, n) {
|
|
const i = Array.from ? Array.from(t) : String(t).split(""),
|
|
r = e / n.resolution,
|
|
o = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r,
|
|
s = [];
|
|
let a = 0,
|
|
l = 0;
|
|
for (let t = 0; t < i.length; t++) {
|
|
const e = i[t];
|
|
if ("\n" === e) a = 0, l -= o;
|
|
else {
|
|
const t = Ea(e, r, a, l, n);
|
|
a += t.offsetX, s.push(t.path)
|
|
}
|
|
}
|
|
return s
|
|
}(t, e, this.data);
|
|
for (let t = 0, e = i.length; t < e; t++) Array.prototype.push.apply(n, i[t].toShapes());
|
|
return n
|
|
}
|
|
}
|
|
|
|
function Ea(t, e, n, i, r) {
|
|
const o = r.glyphs[t] || r.glyphs["?"];
|
|
if (!o) return void console.error('THREE.Font: character "' + t + '" does not exists in font family ' + r.familyName + ".");
|
|
const s = new wa;
|
|
let a, l, c, h, u, d, p, f;
|
|
if (o.o) {
|
|
const t = o._cachedOutline || (o._cachedOutline = o.o.split(" "));
|
|
for (let r = 0, o = t.length; r < o;) {
|
|
switch (t[r++]) {
|
|
case "m":
|
|
a = t[r++] * e + n, l = t[r++] * e + i, s.moveTo(a, l);
|
|
break;
|
|
case "l":
|
|
a = t[r++] * e + n, l = t[r++] * e + i, s.lineTo(a, l);
|
|
break;
|
|
case "q":
|
|
c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, s.quadraticCurveTo(u, d, c, h);
|
|
break;
|
|
case "b":
|
|
c = t[r++] * e + n, h = t[r++] * e + i, u = t[r++] * e + n, d = t[r++] * e + i, p = t[r++] * e + n, f = t[r++] * e + i, s.bezierCurveTo(u, d, p, f, c, h)
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
offsetX: o.ha * e,
|
|
path: s
|
|
}
|
|
}
|
|
|
|
function Sa(t) {
|
|
Es.call(this, t)
|
|
}
|
|
let Ta;
|
|
Sa.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Sa,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ts(this.manager);
|
|
o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(t) {
|
|
let n;
|
|
try {
|
|
n = JSON.parse(t)
|
|
} catch (e) {
|
|
console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."), n = JSON.parse(t.substring(65, t.length - 2))
|
|
}
|
|
const i = r.parse(n);
|
|
e && e(i)
|
|
}), n, i)
|
|
},
|
|
parse: function(t) {
|
|
return new Ma(t)
|
|
}
|
|
});
|
|
const La = function() {
|
|
return void 0 === Ta && (Ta = new(window.AudioContext || window.webkitAudioContext)), Ta
|
|
};
|
|
|
|
function Ra(t) {
|
|
Es.call(this, t)
|
|
}
|
|
|
|
function Ca(t, e, n) {
|
|
ga.call(this, void 0, n);
|
|
const i = (new Yt).set(t),
|
|
r = (new Yt).set(e),
|
|
o = new T(i.r, i.g, i.b),
|
|
s = new T(r.r, r.g, r.b),
|
|
a = Math.sqrt(Math.PI),
|
|
l = a * Math.sqrt(.75);
|
|
this.sh.coefficients[0].copy(o).add(s).multiplyScalar(a), this.sh.coefficients[1].copy(o).sub(s).multiplyScalar(l)
|
|
}
|
|
|
|
function Pa(t, e) {
|
|
ga.call(this, void 0, e);
|
|
const n = (new Yt).set(t);
|
|
this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI))
|
|
}
|
|
Ra.prototype = Object.assign(Object.create(Es.prototype), {
|
|
constructor: Ra,
|
|
load: function(t, e, n, i) {
|
|
const r = this,
|
|
o = new Ts(r.manager);
|
|
o.setResponseType("arraybuffer"), o.setPath(r.path), o.setRequestHeader(r.requestHeader), o.setWithCredentials(r.withCredentials), o.load(t, (function(n) {
|
|
try {
|
|
const t = n.slice(0);
|
|
La().decodeAudioData(t, (function(t) {
|
|
e(t)
|
|
}))
|
|
} catch (e) {
|
|
i ? i(e) : console.error(e), r.manager.itemError(t)
|
|
}
|
|
}), n, i)
|
|
}
|
|
}), Ca.prototype = Object.assign(Object.create(ga.prototype), {
|
|
constructor: Ca,
|
|
isHemisphereLightProbe: !0,
|
|
copy: function(t) {
|
|
return ga.prototype.copy.call(this, t), this
|
|
},
|
|
toJSON: function(t) {
|
|
return ga.prototype.toJSON.call(this, t)
|
|
}
|
|
}), Pa.prototype = Object.assign(Object.create(ga.prototype), {
|
|
constructor: Pa,
|
|
isAmbientLightProbe: !0,
|
|
copy: function(t) {
|
|
return ga.prototype.copy.call(this, t), this
|
|
},
|
|
toJSON: function(t) {
|
|
return ga.prototype.toJSON.call(this, t)
|
|
}
|
|
});
|
|
const Da = new et,
|
|
Ia = new et;
|
|
Object.assign(function() {
|
|
this.type = "StereoCamera", this.aspect = 1, this.eyeSep = .064, this.cameraL = new Ye, this.cameraL.layers.enable(1), this.cameraL.matrixAutoUpdate = !1, this.cameraR = new Ye, this.cameraR.layers.enable(2), this.cameraR.matrixAutoUpdate = !1, this._cache = {
|
|
focus: null,
|
|
fov: null,
|
|
aspect: null,
|
|
near: null,
|
|
far: null,
|
|
zoom: null,
|
|
eyeSep: null
|
|
}
|
|
}.prototype, {
|
|
update: function(t) {
|
|
const e = this._cache;
|
|
if (e.focus !== t.focus || e.fov !== t.fov || e.aspect !== t.aspect * this.aspect || e.near !== t.near || e.far !== t.far || e.zoom !== t.zoom || e.eyeSep !== this.eyeSep) {
|
|
e.focus = t.focus, e.fov = t.fov, e.aspect = t.aspect * this.aspect, e.near = t.near, e.far = t.far, e.zoom = t.zoom, e.eyeSep = this.eyeSep;
|
|
const n = t.projectionMatrix.clone(),
|
|
i = e.eyeSep / 2,
|
|
r = i * e.near / e.focus,
|
|
o = e.near * Math.tan(g.DEG2RAD * e.fov * .5) / e.zoom;
|
|
let s, a;
|
|
Ia.elements[12] = -i, Da.elements[12] = i, s = -o * e.aspect + r, a = o * e.aspect + r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraL.projectionMatrix.copy(n), s = -o * e.aspect - r, a = o * e.aspect - r, n.elements[0] = 2 * e.near / (a - s), n.elements[8] = (a + s) / (a - s), this.cameraR.projectionMatrix.copy(n)
|
|
}
|
|
this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Ia), this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Da)
|
|
}
|
|
});
|
|
|
|
function Oa(t, e, n) {
|
|
let i, r, o;
|
|
switch (this.binding = t, this.valueSize = n, e) {
|
|
case "quaternion":
|
|
i = this._slerp, r = this._slerpAdditive, o = this._setAdditiveIdentityQuaternion, this.buffer = new Float64Array(6 * n), this._workIndex = 5;
|
|
break;
|
|
case "string":
|
|
case "bool":
|
|
i = this._select, r = this._select, o = this._setAdditiveIdentityOther, this.buffer = new Array(5 * n);
|
|
break;
|
|
default:
|
|
i = this._lerp, r = this._lerpAdditive, o = this._setAdditiveIdentityNumeric, this.buffer = new Float64Array(5 * n)
|
|
}
|
|
this._mixBufferRegion = i, this._mixBufferRegionAdditive = r, this._setIdentity = o, this._origIndex = 3, this._addIndex = 4, this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, this.useCount = 0, this.referenceCount = 0
|
|
}
|
|
Object.assign(Oa.prototype, {
|
|
accumulate: function(t, e) {
|
|
const n = this.buffer,
|
|
i = this.valueSize,
|
|
r = t * i + i;
|
|
let o = this.cumulativeWeight;
|
|
if (0 === o) {
|
|
for (let t = 0; t !== i; ++t) n[r + t] = n[t];
|
|
o = e
|
|
} else {
|
|
o += e;
|
|
const t = e / o;
|
|
this._mixBufferRegion(n, r, 0, t, i)
|
|
}
|
|
this.cumulativeWeight = o
|
|
},
|
|
accumulateAdditive: function(t) {
|
|
const e = this.buffer,
|
|
n = this.valueSize,
|
|
i = n * this._addIndex;
|
|
0 === this.cumulativeWeightAdditive && this._setIdentity(), this._mixBufferRegionAdditive(e, i, 0, t, n), this.cumulativeWeightAdditive += t
|
|
},
|
|
apply: function(t) {
|
|
const e = this.valueSize,
|
|
n = this.buffer,
|
|
i = t * e + e,
|
|
r = this.cumulativeWeight,
|
|
o = this.cumulativeWeightAdditive,
|
|
s = this.binding;
|
|
if (this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0, r < 1) {
|
|
const t = e * this._origIndex;
|
|
this._mixBufferRegion(n, i, t, 1 - r, e)
|
|
}
|
|
o > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e);
|
|
for (let t = e, r = e + e; t !== r; ++t)
|
|
if (n[t] !== n[t + e]) {
|
|
s.setValue(n, i);
|
|
break
|
|
}
|
|
},
|
|
saveOriginalState: function() {
|
|
const t = this.binding,
|
|
e = this.buffer,
|
|
n = this.valueSize,
|
|
i = n * this._origIndex;
|
|
t.getValue(e, i);
|
|
for (let t = n, r = i; t !== r; ++t) e[t] = e[i + t % n];
|
|
this._setIdentity(), this.cumulativeWeight = 0, this.cumulativeWeightAdditive = 0
|
|
},
|
|
restoreOriginalState: function() {
|
|
const t = 3 * this.valueSize;
|
|
this.binding.setValue(this.buffer, t)
|
|
},
|
|
_setAdditiveIdentityNumeric: function() {
|
|
const t = this._addIndex * this.valueSize,
|
|
e = t + this.valueSize;
|
|
for (let n = t; n < e; n++) this.buffer[n] = 0
|
|
},
|
|
_setAdditiveIdentityQuaternion: function() {
|
|
this._setAdditiveIdentityNumeric(), this.buffer[this._addIndex * this.valueSize + 3] = 1
|
|
},
|
|
_setAdditiveIdentityOther: function() {
|
|
const t = this._origIndex * this.valueSize,
|
|
e = this._addIndex * this.valueSize;
|
|
for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n]
|
|
},
|
|
_select: function(t, e, n, i, r) {
|
|
if (i >= .5)
|
|
for (let i = 0; i !== r; ++i) t[e + i] = t[n + i]
|
|
},
|
|
_slerp: function(t, e, n, i) {
|
|
S.slerpFlat(t, e, t, e, t, n, i)
|
|
},
|
|
_slerpAdditive: function(t, e, n, i, r) {
|
|
const o = this._workIndex * r;
|
|
S.multiplyQuaternionsFlat(t, o, t, e, t, n), S.slerpFlat(t, e, t, e, t, o, i)
|
|
},
|
|
_lerp: function(t, e, n, i, r) {
|
|
const o = 1 - i;
|
|
for (let s = 0; s !== r; ++s) {
|
|
const r = e + s;
|
|
t[r] = t[r] * o + t[n + s] * i
|
|
}
|
|
},
|
|
_lerpAdditive: function(t, e, n, i, r) {
|
|
for (let o = 0; o !== r; ++o) {
|
|
const r = e + o;
|
|
t[r] = t[r] + t[n + o] * i
|
|
}
|
|
}
|
|
});
|
|
const Na = new RegExp("[\\[\\]\\.:\\/]", "g"),
|
|
Ba = "[^" + "\\[\\]\\.:\\/".replace("\\.", "") + "]",
|
|
Fa = /((?:WC+[\/:])*)/.source.replace("WC", "[^\\[\\]\\.:\\/]"),
|
|
za = /(WCOD+)?/.source.replace("WCOD", Ba),
|
|
Ua = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC", "[^\\[\\]\\.:\\/]"),
|
|
Ha = /\.(WC+)(?:\[(.+)\])?/.source.replace("WC", "[^\\[\\]\\.:\\/]"),
|
|
Ga = new RegExp("^" + Fa + za + Ua + Ha + "$"),
|
|
Va = ["material", "materials", "bones"];
|
|
|
|
function ka(t, e, n) {
|
|
const i = n || Wa.parseTrackName(e);
|
|
this._targetGroup = t, this._bindings = t.subscribe_(e, i)
|
|
}
|
|
|
|
function Wa(t, e, n) {
|
|
this.path = e, this.parsedPath = n || Wa.parseTrackName(e), this.node = Wa.findNode(t, this.parsedPath.nodeName) || t, this.rootNode = t
|
|
}
|
|
Object.assign(ka.prototype, {
|
|
getValue: function(t, e) {
|
|
this.bind();
|
|
const n = this._targetGroup.nCachedObjects_,
|
|
i = this._bindings[n];
|
|
void 0 !== i && i.getValue(t, e)
|
|
},
|
|
setValue: function(t, e) {
|
|
const n = this._bindings;
|
|
for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) n[i].setValue(t, e)
|
|
},
|
|
bind: function() {
|
|
const t = this._bindings;
|
|
for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind()
|
|
},
|
|
unbind: function() {
|
|
const t = this._bindings;
|
|
for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind()
|
|
}
|
|
}), Object.assign(Wa, {
|
|
Composite: ka,
|
|
create: function(t, e, n) {
|
|
return t && t.isAnimationObjectGroup ? new Wa.Composite(t, e, n) : new Wa(t, e, n)
|
|
},
|
|
sanitizeNodeName: function(t) {
|
|
return t.replace(/\s/g, "_").replace(Na, "")
|
|
},
|
|
parseTrackName: function(t) {
|
|
const e = Ga.exec(t);
|
|
if (!e) throw new Error("PropertyBinding: Cannot parse trackName: " + t);
|
|
const n = {
|
|
nodeName: e[2],
|
|
objectName: e[3],
|
|
objectIndex: e[4],
|
|
propertyName: e[5],
|
|
propertyIndex: e[6]
|
|
},
|
|
i = n.nodeName && n.nodeName.lastIndexOf(".");
|
|
if (void 0 !== i && -1 !== i) {
|
|
const t = n.nodeName.substring(i + 1); - 1 !== Va.indexOf(t) && (n.nodeName = n.nodeName.substring(0, i), n.objectName = t)
|
|
}
|
|
if (null === n.propertyName || 0 === n.propertyName.length) throw new Error("PropertyBinding: can not parse propertyName from trackName: " + t);
|
|
return n
|
|
},
|
|
findNode: function(t, e) {
|
|
if (!e || "" === e || "." === e || -1 === e || e === t.name || e === t.uuid) return t;
|
|
if (t.skeleton) {
|
|
const n = t.skeleton.getBoneByName(e);
|
|
if (void 0 !== n) return n
|
|
}
|
|
if (t.children) {
|
|
const n = function(t) {
|
|
for (let i = 0; i < t.length; i++) {
|
|
const r = t[i];
|
|
if (r.name === e || r.uuid === e) return r;
|
|
const o = n(r.children);
|
|
if (o) return o
|
|
}
|
|
return null
|
|
},
|
|
i = n(t.children);
|
|
if (i) return i
|
|
}
|
|
return null
|
|
}
|
|
}), Object.assign(Wa.prototype, {
|
|
_getValue_unavailable: function() {},
|
|
_setValue_unavailable: function() {},
|
|
BindingType: {
|
|
Direct: 0,
|
|
EntireArray: 1,
|
|
ArrayElement: 2,
|
|
HasFromToArray: 3
|
|
},
|
|
Versioning: {
|
|
None: 0,
|
|
NeedsUpdate: 1,
|
|
MatrixWorldNeedsUpdate: 2
|
|
},
|
|
GetterByBindingType: [function(t, e) {
|
|
t[e] = this.node[this.propertyName]
|
|
}, function(t, e) {
|
|
const n = this.resolvedProperty;
|
|
for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i]
|
|
}, function(t, e) {
|
|
t[e] = this.resolvedProperty[this.propertyIndex]
|
|
}, function(t, e) {
|
|
this.resolvedProperty.toArray(t, e)
|
|
}],
|
|
SetterByBindingTypeAndVersioning: [
|
|
[function(t, e) {
|
|
this.targetObject[this.propertyName] = t[e]
|
|
}, function(t, e) {
|
|
this.targetObject[this.propertyName] = t[e], this.targetObject.needsUpdate = !0
|
|
}, function(t, e) {
|
|
this.targetObject[this.propertyName] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0
|
|
}],
|
|
[function(t, e) {
|
|
const n = this.resolvedProperty;
|
|
for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++]
|
|
}, function(t, e) {
|
|
const n = this.resolvedProperty;
|
|
for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++];
|
|
this.targetObject.needsUpdate = !0
|
|
}, function(t, e) {
|
|
const n = this.resolvedProperty;
|
|
for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++];
|
|
this.targetObject.matrixWorldNeedsUpdate = !0
|
|
}],
|
|
[function(t, e) {
|
|
this.resolvedProperty[this.propertyIndex] = t[e]
|
|
}, function(t, e) {
|
|
this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.needsUpdate = !0
|
|
}, function(t, e) {
|
|
this.resolvedProperty[this.propertyIndex] = t[e], this.targetObject.matrixWorldNeedsUpdate = !0
|
|
}],
|
|
[function(t, e) {
|
|
this.resolvedProperty.fromArray(t, e)
|
|
}, function(t, e) {
|
|
this.resolvedProperty.fromArray(t, e), this.targetObject.needsUpdate = !0
|
|
}, function(t, e) {
|
|
this.resolvedProperty.fromArray(t, e), this.targetObject.matrixWorldNeedsUpdate = !0
|
|
}]
|
|
],
|
|
getValue: function(t, e) {
|
|
this.bind(), this.getValue(t, e)
|
|
},
|
|
setValue: function(t, e) {
|
|
this.bind(), this.setValue(t, e)
|
|
},
|
|
bind: function() {
|
|
let t = this.node;
|
|
const e = this.parsedPath,
|
|
n = e.objectName,
|
|
i = e.propertyName;
|
|
let r = e.propertyIndex;
|
|
if (t || (t = Wa.findNode(this.rootNode, e.nodeName) || this.rootNode, this.node = t), this.getValue = this._getValue_unavailable, this.setValue = this._setValue_unavailable, !t) return void console.error("THREE.PropertyBinding: Trying to update node for track: " + this.path + " but it wasn't found.");
|
|
if (n) {
|
|
let i = e.objectIndex;
|
|
switch (n) {
|
|
case "materials":
|
|
if (!t.material) return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.", this);
|
|
if (!t.material.materials) return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.", this);
|
|
t = t.material.materials;
|
|
break;
|
|
case "bones":
|
|
if (!t.skeleton) return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.", this);
|
|
t = t.skeleton.bones;
|
|
for (let e = 0; e < t.length; e++)
|
|
if (t[e].name === i) {
|
|
i = e;
|
|
break
|
|
} break;
|
|
default:
|
|
if (void 0 === t[n]) return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.", this);
|
|
t = t[n]
|
|
}
|
|
if (void 0 !== i) {
|
|
if (void 0 === t[i]) return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.", this, t);
|
|
t = t[i]
|
|
}
|
|
}
|
|
const o = t[i];
|
|
if (void 0 === o) {
|
|
const n = e.nodeName;
|
|
return void console.error("THREE.PropertyBinding: Trying to update property for track: " + n + "." + i + " but it wasn't found.", t)
|
|
}
|
|
let s = this.Versioning.None;
|
|
this.targetObject = t, void 0 !== t.needsUpdate ? s = this.Versioning.NeedsUpdate : void 0 !== t.matrixWorldNeedsUpdate && (s = this.Versioning.MatrixWorldNeedsUpdate);
|
|
let a = this.BindingType.Direct;
|
|
if (void 0 !== r) {
|
|
if ("morphTargetInfluences" === i) {
|
|
if (!t.geometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.", this);
|
|
if (!t.geometry.isBufferGeometry) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.", this);
|
|
if (!t.geometry.morphAttributes) return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.", this);
|
|
void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r])
|
|
}
|
|
a = this.BindingType.ArrayElement, this.resolvedProperty = o, this.propertyIndex = r
|
|
} else void 0 !== o.fromArray && void 0 !== o.toArray ? (a = this.BindingType.HasFromToArray, this.resolvedProperty = o) : Array.isArray(o) ? (a = this.BindingType.EntireArray, this.resolvedProperty = o) : this.propertyName = i;
|
|
this.getValue = this.GetterByBindingType[a], this.setValue = this.SetterByBindingTypeAndVersioning[a][s]
|
|
},
|
|
unbind: function() {
|
|
this.node = null, this.getValue = this._getValue_unbound, this.setValue = this._setValue_unbound
|
|
}
|
|
}), Object.assign(Wa.prototype, {
|
|
_getValue_unbound: Wa.prototype.getValue,
|
|
_setValue_unbound: Wa.prototype.setValue
|
|
}), Object.assign(function() {
|
|
this.uuid = g.generateUUID(), this._objects = Array.prototype.slice.call(arguments), this.nCachedObjects_ = 0;
|
|
const t = {};
|
|
this._indicesByUUID = t;
|
|
for (let e = 0, n = arguments.length; e !== n; ++e) t[arguments[e].uuid] = e;
|
|
this._paths = [], this._parsedPaths = [], this._bindings = [], this._bindingsIndicesByPath = {};
|
|
const e = this;
|
|
this.stats = {
|
|
objects: {
|
|
get total() {
|
|
return e._objects.length
|
|
},
|
|
get inUse() {
|
|
return this.total - e.nCachedObjects_
|
|
}
|
|
},
|
|
get bindingsPerObject() {
|
|
return e._bindings.length
|
|
}
|
|
}
|
|
}.prototype, {
|
|
isAnimationObjectGroup: !0,
|
|
add: function() {
|
|
const t = this._objects,
|
|
e = this._indicesByUUID,
|
|
n = this._paths,
|
|
i = this._parsedPaths,
|
|
r = this._bindings,
|
|
o = r.length;
|
|
let s = void 0,
|
|
a = t.length,
|
|
l = this.nCachedObjects_;
|
|
for (let c = 0, h = arguments.length; c !== h; ++c) {
|
|
const h = arguments[c],
|
|
u = h.uuid;
|
|
let d = e[u];
|
|
if (void 0 === d) {
|
|
d = a++, e[u] = d, t.push(h);
|
|
for (let t = 0, e = o; t !== e; ++t) r[t].push(new Wa(h, n[t], i[t]))
|
|
} else if (d < l) {
|
|
s = t[d];
|
|
const a = --l,
|
|
c = t[a];
|
|
e[c.uuid] = d, t[d] = c, e[u] = a, t[a] = h;
|
|
for (let t = 0, e = o; t !== e; ++t) {
|
|
const e = r[t],
|
|
o = e[a];
|
|
let s = e[d];
|
|
e[d] = o, void 0 === s && (s = new Wa(h, n[t], i[t])), e[a] = s
|
|
}
|
|
} else t[d] !== s && console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")
|
|
}
|
|
this.nCachedObjects_ = l
|
|
},
|
|
remove: function() {
|
|
const t = this._objects,
|
|
e = this._indicesByUUID,
|
|
n = this._bindings,
|
|
i = n.length;
|
|
let r = this.nCachedObjects_;
|
|
for (let o = 0, s = arguments.length; o !== s; ++o) {
|
|
const s = arguments[o],
|
|
a = s.uuid,
|
|
l = e[a];
|
|
if (void 0 !== l && l >= r) {
|
|
const o = r++,
|
|
c = t[o];
|
|
e[c.uuid] = l, t[l] = c, e[a] = o, t[o] = s;
|
|
for (let t = 0, e = i; t !== e; ++t) {
|
|
const e = n[t],
|
|
i = e[o],
|
|
r = e[l];
|
|
e[l] = i, e[o] = r
|
|
}
|
|
}
|
|
}
|
|
this.nCachedObjects_ = r
|
|
},
|
|
uncache: function() {
|
|
const t = this._objects,
|
|
e = this._indicesByUUID,
|
|
n = this._bindings,
|
|
i = n.length;
|
|
let r = this.nCachedObjects_,
|
|
o = t.length;
|
|
for (let s = 0, a = arguments.length; s !== a; ++s) {
|
|
const a = arguments[s].uuid,
|
|
l = e[a];
|
|
if (void 0 !== l)
|
|
if (delete e[a], l < r) {
|
|
const s = --r,
|
|
a = t[s],
|
|
c = --o,
|
|
h = t[c];
|
|
e[a.uuid] = l, t[l] = a, e[h.uuid] = s, t[s] = h, t.pop();
|
|
for (let t = 0, e = i; t !== e; ++t) {
|
|
const e = n[t],
|
|
i = e[s],
|
|
r = e[c];
|
|
e[l] = i, e[s] = r, e.pop()
|
|
}
|
|
} else {
|
|
const r = --o,
|
|
s = t[r];
|
|
r > 0 && (e[s.uuid] = l), t[l] = s, t.pop();
|
|
for (let t = 0, e = i; t !== e; ++t) {
|
|
const e = n[t];
|
|
e[l] = e[r], e.pop()
|
|
}
|
|
}
|
|
}
|
|
this.nCachedObjects_ = r
|
|
},
|
|
subscribe_: function(t, e) {
|
|
const n = this._bindingsIndicesByPath;
|
|
let i = n[t];
|
|
const r = this._bindings;
|
|
if (void 0 !== i) return r[i];
|
|
const o = this._paths,
|
|
s = this._parsedPaths,
|
|
a = this._objects,
|
|
l = a.length,
|
|
c = this.nCachedObjects_,
|
|
h = new Array(l);
|
|
i = r.length, n[t] = i, o.push(t), s.push(e), r.push(h);
|
|
for (let n = c, i = a.length; n !== i; ++n) {
|
|
const i = a[n];
|
|
h[n] = new Wa(i, t, e)
|
|
}
|
|
return h
|
|
},
|
|
unsubscribe_: function(t) {
|
|
const e = this._bindingsIndicesByPath,
|
|
n = e[t];
|
|
if (void 0 !== n) {
|
|
const i = this._paths,
|
|
r = this._parsedPaths,
|
|
o = this._bindings,
|
|
s = o.length - 1,
|
|
a = o[s];
|
|
e[t[s]] = n, o[n] = a, o.pop(), r[n] = r[s], r.pop(), i[n] = i[s], i.pop()
|
|
}
|
|
}
|
|
});
|
|
class ja {
|
|
constructor(t, e, n = null, i = e.blendMode) {
|
|
this._mixer = t, this._clip = e, this._localRoot = n, this.blendMode = i;
|
|
const r = e.tracks,
|
|
o = r.length,
|
|
s = new Array(o),
|
|
a = {
|
|
endingStart: 2400,
|
|
endingEnd: 2400
|
|
};
|
|
for (let t = 0; t !== o; ++t) {
|
|
const e = r[t].createInterpolant(null);
|
|
s[t] = e, e.settings = a
|
|
}
|
|
this._interpolantSettings = a, this._interpolants = s, this._propertyBindings = new Array(o), this._cacheIndex = null, this._byClipCacheIndex = null, this._timeScaleInterpolant = null, this._weightInterpolant = null, this.loop = 2201, this._loopCount = -1, this._startTime = null, this.time = 0, this.timeScale = 1, this._effectiveTimeScale = 1, this.weight = 1, this._effectiveWeight = 1, this.repetitions = 1 / 0, this.paused = !1, this.enabled = !0, this.clampWhenFinished = !1, this.zeroSlopeAtStart = !0, this.zeroSlopeAtEnd = !0
|
|
}
|
|
play() {
|
|
return this._mixer._activateAction(this), this
|
|
}
|
|
stop() {
|
|
return this._mixer._deactivateAction(this), this.reset()
|
|
}
|
|
reset() {
|
|
return this.paused = !1, this.enabled = !0, this.time = 0, this._loopCount = -1, this._startTime = null, this.stopFading().stopWarping()
|
|
}
|
|
isRunning() {
|
|
return this.enabled && !this.paused && 0 !== this.timeScale && null === this._startTime && this._mixer._isActiveAction(this)
|
|
}
|
|
isScheduled() {
|
|
return this._mixer._isActiveAction(this)
|
|
}
|
|
startAt(t) {
|
|
return this._startTime = t, this
|
|
}
|
|
setLoop(t, e) {
|
|
return this.loop = t, this.repetitions = e, this
|
|
}
|
|
setEffectiveWeight(t) {
|
|
return this.weight = t, this._effectiveWeight = this.enabled ? t : 0, this.stopFading()
|
|
}
|
|
getEffectiveWeight() {
|
|
return this._effectiveWeight
|
|
}
|
|
fadeIn(t) {
|
|
return this._scheduleFading(t, 0, 1)
|
|
}
|
|
fadeOut(t) {
|
|
return this._scheduleFading(t, 1, 0)
|
|
}
|
|
crossFadeFrom(t, e, n) {
|
|
if (t.fadeOut(e), this.fadeIn(e), n) {
|
|
const n = this._clip.duration,
|
|
i = t._clip.duration,
|
|
r = i / n,
|
|
o = n / i;
|
|
t.warp(1, r, e), this.warp(o, 1, e)
|
|
}
|
|
return this
|
|
}
|
|
crossFadeTo(t, e, n) {
|
|
return t.crossFadeFrom(this, e, n)
|
|
}
|
|
stopFading() {
|
|
const t = this._weightInterpolant;
|
|
return null !== t && (this._weightInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this
|
|
}
|
|
setEffectiveTimeScale(t) {
|
|
return this.timeScale = t, this._effectiveTimeScale = this.paused ? 0 : t, this.stopWarping()
|
|
}
|
|
getEffectiveTimeScale() {
|
|
return this._effectiveTimeScale
|
|
}
|
|
setDuration(t) {
|
|
return this.timeScale = this._clip.duration / t, this.stopWarping()
|
|
}
|
|
syncWith(t) {
|
|
return this.time = t.time, this.timeScale = t.timeScale, this.stopWarping()
|
|
}
|
|
halt(t) {
|
|
return this.warp(this._effectiveTimeScale, 0, t)
|
|
}
|
|
warp(t, e, n) {
|
|
const i = this._mixer,
|
|
r = i.time,
|
|
o = this.timeScale;
|
|
let s = this._timeScaleInterpolant;
|
|
null === s && (s = i._lendControlInterpolant(), this._timeScaleInterpolant = s);
|
|
const a = s.parameterPositions,
|
|
l = s.sampleValues;
|
|
return a[0] = r, a[1] = r + n, l[0] = t / o, l[1] = e / o, this
|
|
}
|
|
stopWarping() {
|
|
const t = this._timeScaleInterpolant;
|
|
return null !== t && (this._timeScaleInterpolant = null, this._mixer._takeBackControlInterpolant(t)), this
|
|
}
|
|
getMixer() {
|
|
return this._mixer
|
|
}
|
|
getClip() {
|
|
return this._clip
|
|
}
|
|
getRoot() {
|
|
return this._localRoot || this._mixer._root
|
|
}
|
|
_update(t, e, n, i) {
|
|
if (!this.enabled) return void this._updateWeight(t);
|
|
const r = this._startTime;
|
|
if (null !== r) {
|
|
const i = (t - r) * n;
|
|
if (i < 0 || 0 === n) return;
|
|
this._startTime = null, e = n * i
|
|
}
|
|
e *= this._updateTimeScale(t);
|
|
const o = this._updateTime(e),
|
|
s = this._updateWeight(t);
|
|
if (s > 0) {
|
|
const t = this._interpolants,
|
|
e = this._propertyBindings;
|
|
switch (this.blendMode) {
|
|
case 2501:
|
|
for (let n = 0, i = t.length; n !== i; ++n) t[n].evaluate(o), e[n].accumulateAdditive(s);
|
|
break;
|
|
case 2500:
|
|
default:
|
|
for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(o), e[n].accumulate(i, s)
|
|
}
|
|
}
|
|
}
|
|
_updateWeight(t) {
|
|
let e = 0;
|
|
if (this.enabled) {
|
|
e = this.weight;
|
|
const n = this._weightInterpolant;
|
|
if (null !== n) {
|
|
const i = n.evaluate(t)[0];
|
|
e *= i, t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1))
|
|
}
|
|
}
|
|
return this._effectiveWeight = e, e
|
|
}
|
|
_updateTimeScale(t) {
|
|
let e = 0;
|
|
if (!this.paused) {
|
|
e = this.timeScale;
|
|
const n = this._timeScaleInterpolant;
|
|
if (null !== n) {
|
|
e *= n.evaluate(t)[0], t > n.parameterPositions[1] && (this.stopWarping(), 0 === e ? this.paused = !0 : this.timeScale = e)
|
|
}
|
|
}
|
|
return this._effectiveTimeScale = e, e
|
|
}
|
|
_updateTime(t) {
|
|
const e = this._clip.duration,
|
|
n = this.loop;
|
|
let i = this.time + t,
|
|
r = this._loopCount;
|
|
const o = 2202 === n;
|
|
if (0 === t) return -1 === r ? i : o && 1 == (1 & r) ? e - i : i;
|
|
if (2200 === n) {
|
|
-1 === r && (this._loopCount = 0, this._setEndings(!0, !0, !1));
|
|
t: {
|
|
if (i >= e) i = e;
|
|
else {
|
|
if (!(i < 0)) {
|
|
this.time = i;
|
|
break t
|
|
}
|
|
i = 0
|
|
}
|
|
this.clampWhenFinished ? this.paused = !0 : this.enabled = !1,
|
|
this.time = i,
|
|
this._mixer.dispatchEvent({
|
|
type: "finished",
|
|
action: this,
|
|
direction: t < 0 ? -1 : 1
|
|
})
|
|
}
|
|
} else {
|
|
if (-1 === r && (t >= 0 ? (r = 0, this._setEndings(!0, 0 === this.repetitions, o)) : this._setEndings(0 === this.repetitions, !0, o)), i >= e || i < 0) {
|
|
const n = Math.floor(i / e);
|
|
i -= e * n, r += Math.abs(n);
|
|
const s = this.repetitions - r;
|
|
if (s <= 0) this.clampWhenFinished ? this.paused = !0 : this.enabled = !1, i = t > 0 ? e : 0, this.time = i, this._mixer.dispatchEvent({
|
|
type: "finished",
|
|
action: this,
|
|
direction: t > 0 ? 1 : -1
|
|
});
|
|
else {
|
|
if (1 === s) {
|
|
const e = t < 0;
|
|
this._setEndings(e, !e, o)
|
|
} else this._setEndings(!1, !1, o);
|
|
this._loopCount = r, this.time = i, this._mixer.dispatchEvent({
|
|
type: "loop",
|
|
action: this,
|
|
loopDelta: n
|
|
})
|
|
}
|
|
} else this.time = i;
|
|
if (o && 1 == (1 & r)) return e - i
|
|
}
|
|
return i
|
|
}
|
|
_setEndings(t, e, n) {
|
|
const i = this._interpolantSettings;
|
|
n ? (i.endingStart = 2401, i.endingEnd = 2401) : (i.endingStart = t ? this.zeroSlopeAtStart ? 2401 : 2400 : 2402, i.endingEnd = e ? this.zeroSlopeAtEnd ? 2401 : 2400 : 2402)
|
|
}
|
|
_scheduleFading(t, e, n) {
|
|
const i = this._mixer,
|
|
r = i.time;
|
|
let o = this._weightInterpolant;
|
|
null === o && (o = i._lendControlInterpolant(), this._weightInterpolant = o);
|
|
const s = o.parameterPositions,
|
|
a = o.sampleValues;
|
|
return s[0] = r, a[0] = e, s[1] = r + t, a[1] = n, this
|
|
}
|
|
}
|
|
|
|
function Xa(t) {
|
|
this._root = t, this._initMemoryManager(), this._accuIndex = 0, this.time = 0, this.timeScale = 1
|
|
}
|
|
Xa.prototype = Object.assign(Object.create(p.prototype), {
|
|
constructor: Xa,
|
|
_bindAction: function(t, e) {
|
|
const n = t._localRoot || this._root,
|
|
i = t._clip.tracks,
|
|
r = i.length,
|
|
o = t._propertyBindings,
|
|
s = t._interpolants,
|
|
a = n.uuid,
|
|
l = this._bindingsByRootAndName;
|
|
let c = l[a];
|
|
void 0 === c && (c = {}, l[a] = c);
|
|
for (let t = 0; t !== r; ++t) {
|
|
const r = i[t],
|
|
l = r.name;
|
|
let h = c[l];
|
|
if (void 0 !== h) o[t] = h;
|
|
else {
|
|
if (h = o[t], void 0 !== h) {
|
|
null === h._cacheIndex && (++h.referenceCount, this._addInactiveBinding(h, a, l));
|
|
continue
|
|
}
|
|
const i = e && e._propertyBindings[t].binding.parsedPath;
|
|
h = new Oa(Wa.create(n, l, i), r.ValueTypeName, r.getValueSize()), ++h.referenceCount, this._addInactiveBinding(h, a, l), o[t] = h
|
|
}
|
|
s[t].resultBuffer = h.buffer
|
|
}
|
|
},
|
|
_activateAction: function(t) {
|
|
if (!this._isActiveAction(t)) {
|
|
if (null === t._cacheIndex) {
|
|
const e = (t._localRoot || this._root).uuid,
|
|
n = t._clip.uuid,
|
|
i = this._actionsByClip[n];
|
|
this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e)
|
|
}
|
|
const e = t._propertyBindings;
|
|
for (let t = 0, n = e.length; t !== n; ++t) {
|
|
const n = e[t];
|
|
0 == n.useCount++ && (this._lendBinding(n), n.saveOriginalState())
|
|
}
|
|
this._lendAction(t)
|
|
}
|
|
},
|
|
_deactivateAction: function(t) {
|
|
if (this._isActiveAction(t)) {
|
|
const e = t._propertyBindings;
|
|
for (let t = 0, n = e.length; t !== n; ++t) {
|
|
const n = e[t];
|
|
0 == --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n))
|
|
}
|
|
this._takeBackAction(t)
|
|
}
|
|
},
|
|
_initMemoryManager: function() {
|
|
this._actions = [], this._nActiveActions = 0, this._actionsByClip = {}, this._bindings = [], this._nActiveBindings = 0, this._bindingsByRootAndName = {}, this._controlInterpolants = [], this._nActiveControlInterpolants = 0;
|
|
const t = this;
|
|
this.stats = {
|
|
actions: {
|
|
get total() {
|
|
return t._actions.length
|
|
},
|
|
get inUse() {
|
|
return t._nActiveActions
|
|
}
|
|
},
|
|
bindings: {
|
|
get total() {
|
|
return t._bindings.length
|
|
},
|
|
get inUse() {
|
|
return t._nActiveBindings
|
|
}
|
|
},
|
|
controlInterpolants: {
|
|
get total() {
|
|
return t._controlInterpolants.length
|
|
},
|
|
get inUse() {
|
|
return t._nActiveControlInterpolants
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_isActiveAction: function(t) {
|
|
const e = t._cacheIndex;
|
|
return null !== e && e < this._nActiveActions
|
|
},
|
|
_addInactiveAction: function(t, e, n) {
|
|
const i = this._actions,
|
|
r = this._actionsByClip;
|
|
let o = r[e];
|
|
if (void 0 === o) o = {
|
|
knownActions: [t],
|
|
actionByRoot: {}
|
|
}, t._byClipCacheIndex = 0, r[e] = o;
|
|
else {
|
|
const e = o.knownActions;
|
|
t._byClipCacheIndex = e.length, e.push(t)
|
|
}
|
|
t._cacheIndex = i.length, i.push(t), o.actionByRoot[n] = t
|
|
},
|
|
_removeInactiveAction: function(t) {
|
|
const e = this._actions,
|
|
n = e[e.length - 1],
|
|
i = t._cacheIndex;
|
|
n._cacheIndex = i, e[i] = n, e.pop(), t._cacheIndex = null;
|
|
const r = t._clip.uuid,
|
|
o = this._actionsByClip,
|
|
s = o[r],
|
|
a = s.knownActions,
|
|
l = a[a.length - 1],
|
|
c = t._byClipCacheIndex;
|
|
l._byClipCacheIndex = c, a[c] = l, a.pop(), t._byClipCacheIndex = null;
|
|
delete s.actionByRoot[(t._localRoot || this._root).uuid], 0 === a.length && delete o[r], this._removeInactiveBindingsForAction(t)
|
|
},
|
|
_removeInactiveBindingsForAction: function(t) {
|
|
const e = t._propertyBindings;
|
|
for (let t = 0, n = e.length; t !== n; ++t) {
|
|
const n = e[t];
|
|
0 == --n.referenceCount && this._removeInactiveBinding(n)
|
|
}
|
|
},
|
|
_lendAction: function(t) {
|
|
const e = this._actions,
|
|
n = t._cacheIndex,
|
|
i = this._nActiveActions++,
|
|
r = e[i];
|
|
t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r
|
|
},
|
|
_takeBackAction: function(t) {
|
|
const e = this._actions,
|
|
n = t._cacheIndex,
|
|
i = --this._nActiveActions,
|
|
r = e[i];
|
|
t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r
|
|
},
|
|
_addInactiveBinding: function(t, e, n) {
|
|
const i = this._bindingsByRootAndName,
|
|
r = this._bindings;
|
|
let o = i[e];
|
|
void 0 === o && (o = {}, i[e] = o), o[n] = t, t._cacheIndex = r.length, r.push(t)
|
|
},
|
|
_removeInactiveBinding: function(t) {
|
|
const e = this._bindings,
|
|
n = t.binding,
|
|
i = n.rootNode.uuid,
|
|
r = n.path,
|
|
o = this._bindingsByRootAndName,
|
|
s = o[i],
|
|
a = e[e.length - 1],
|
|
l = t._cacheIndex;
|
|
a._cacheIndex = l, e[l] = a, e.pop(), delete s[r], 0 === Object.keys(s).length && delete o[i]
|
|
},
|
|
_lendBinding: function(t) {
|
|
const e = this._bindings,
|
|
n = t._cacheIndex,
|
|
i = this._nActiveBindings++,
|
|
r = e[i];
|
|
t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r
|
|
},
|
|
_takeBackBinding: function(t) {
|
|
const e = this._bindings,
|
|
n = t._cacheIndex,
|
|
i = --this._nActiveBindings,
|
|
r = e[i];
|
|
t._cacheIndex = i, e[i] = t, r._cacheIndex = n, e[n] = r
|
|
},
|
|
_lendControlInterpolant: function() {
|
|
const t = this._controlInterpolants,
|
|
e = this._nActiveControlInterpolants++;
|
|
let n = t[e];
|
|
return void 0 === n && (n = new us(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer), n.__cacheIndex = e, t[e] = n), n
|
|
},
|
|
_takeBackControlInterpolant: function(t) {
|
|
const e = this._controlInterpolants,
|
|
n = t.__cacheIndex,
|
|
i = --this._nActiveControlInterpolants,
|
|
r = e[i];
|
|
t.__cacheIndex = i, e[i] = t, r.__cacheIndex = n, e[n] = r
|
|
},
|
|
_controlInterpolantsResultBuffer: new Float32Array(1),
|
|
clipAction: function(t, e, n) {
|
|
const i = e || this._root,
|
|
r = i.uuid;
|
|
let o = "string" == typeof t ? _s.findByName(i, t) : t;
|
|
const s = null !== o ? o.uuid : t,
|
|
a = this._actionsByClip[s];
|
|
let l = null;
|
|
if (void 0 === n && (n = null !== o ? o.blendMode : 2500), void 0 !== a) {
|
|
const t = a.actionByRoot[r];
|
|
if (void 0 !== t && t.blendMode === n) return t;
|
|
l = a.knownActions[0], null === o && (o = l._clip)
|
|
}
|
|
if (null === o) return null;
|
|
const c = new ja(this, o, e, n);
|
|
return this._bindAction(c, l), this._addInactiveAction(c, s, r), c
|
|
},
|
|
existingAction: function(t, e) {
|
|
const n = e || this._root,
|
|
i = n.uuid,
|
|
r = "string" == typeof t ? _s.findByName(n, t) : t,
|
|
o = r ? r.uuid : t,
|
|
s = this._actionsByClip[o];
|
|
return void 0 !== s && s.actionByRoot[i] || null
|
|
},
|
|
stopAllAction: function() {
|
|
const t = this._actions;
|
|
for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop();
|
|
return this
|
|
},
|
|
update: function(t) {
|
|
t *= this.timeScale;
|
|
const e = this._actions,
|
|
n = this._nActiveActions,
|
|
i = this.time += t,
|
|
r = Math.sign(t),
|
|
o = this._accuIndex ^= 1;
|
|
for (let s = 0; s !== n; ++s) {
|
|
e[s]._update(i, t, r, o)
|
|
}
|
|
const s = this._bindings,
|
|
a = this._nActiveBindings;
|
|
for (let t = 0; t !== a; ++t) s[t].apply(o);
|
|
return this
|
|
},
|
|
setTime: function(t) {
|
|
this.time = 0;
|
|
for (let t = 0; t < this._actions.length; t++) this._actions[t].time = 0;
|
|
return this.update(t)
|
|
},
|
|
getRoot: function() {
|
|
return this._root
|
|
},
|
|
uncacheClip: function(t) {
|
|
const e = this._actions,
|
|
n = t.uuid,
|
|
i = this._actionsByClip,
|
|
r = i[n];
|
|
if (void 0 !== r) {
|
|
const t = r.knownActions;
|
|
for (let n = 0, i = t.length; n !== i; ++n) {
|
|
const i = t[n];
|
|
this._deactivateAction(i);
|
|
const r = i._cacheIndex,
|
|
o = e[e.length - 1];
|
|
i._cacheIndex = null, i._byClipCacheIndex = null, o._cacheIndex = r, e[r] = o, e.pop(), this._removeInactiveBindingsForAction(i)
|
|
}
|
|
delete i[n]
|
|
}
|
|
},
|
|
uncacheRoot: function(t) {
|
|
const e = t.uuid,
|
|
n = this._actionsByClip;
|
|
for (const t in n) {
|
|
const i = n[t].actionByRoot[e];
|
|
void 0 !== i && (this._deactivateAction(i), this._removeInactiveAction(i))
|
|
}
|
|
const i = this._bindingsByRootAndName[e];
|
|
if (void 0 !== i)
|
|
for (const t in i) {
|
|
const e = i[t];
|
|
e.restoreOriginalState(), this._removeInactiveBinding(e)
|
|
}
|
|
},
|
|
uncacheAction: function(t, e) {
|
|
const n = this.existingAction(t, e);
|
|
null !== n && (this._deactivateAction(n), this._removeInactiveAction(n))
|
|
}
|
|
});
|
|
class qa {
|
|
constructor(t) {
|
|
"string" == typeof t && (console.warn("THREE.Uniform: Type parameter is no longer needed."), t = arguments[1]), this.value = t
|
|
}
|
|
clone() {
|
|
return new qa(void 0 === this.value.clone ? this.value : this.value.clone())
|
|
}
|
|
}
|
|
|
|
function Ya(t, e, n) {
|
|
dr.call(this, t, e), this.meshPerAttribute = n || 1
|
|
}
|
|
|
|
function Qa(t, e, n, i, r) {
|
|
this.buffer = t, this.type = e, this.itemSize = n, this.elementSize = i, this.count = r, this.version = 0
|
|
}
|
|
|
|
function Za(t, e, n, i) {
|
|
this.ray = new tt(t, e), this.near = n || 0, this.far = i || 1 / 0, this.camera = null, this.layers = new dt, this.params = {
|
|
Mesh: {},
|
|
Line: {
|
|
threshold: 1
|
|
},
|
|
LOD: {},
|
|
Points: {
|
|
threshold: 1
|
|
},
|
|
Sprite: {}
|
|
}, Object.defineProperties(this.params, {
|
|
PointCloud: {
|
|
get: function() {
|
|
return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."), this.Points
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
function Ja(t, e) {
|
|
return t.distance - e.distance
|
|
}
|
|
|
|
function Ka(t, e, n, i) {
|
|
if (t.layers.test(e.layers) && t.raycast(e, n), !0 === i) {
|
|
const i = t.children;
|
|
for (let t = 0, r = i.length; t < r; t++) Ka(i[t], e, n, !0)
|
|
}
|
|
}
|
|
Ya.prototype = Object.assign(Object.create(dr.prototype), {
|
|
constructor: Ya,
|
|
isInstancedInterleavedBuffer: !0,
|
|
copy: function(t) {
|
|
return dr.prototype.copy.call(this, t), this.meshPerAttribute = t.meshPerAttribute, this
|
|
},
|
|
clone: function(t) {
|
|
const e = dr.prototype.clone.call(this, t);
|
|
return e.meshPerAttribute = this.meshPerAttribute, e
|
|
},
|
|
toJSON: function(t) {
|
|
const e = dr.prototype.toJSON.call(this, t);
|
|
return e.isInstancedInterleavedBuffer = !0, e.meshPerAttribute = this.meshPerAttribute, e
|
|
}
|
|
}), Object.defineProperty(Qa.prototype, "needsUpdate", {
|
|
set: function(t) {
|
|
!0 === t && this.version++
|
|
}
|
|
}), Object.assign(Qa.prototype, {
|
|
isGLBufferAttribute: !0,
|
|
setBuffer: function(t) {
|
|
return this.buffer = t, this
|
|
},
|
|
setType: function(t, e) {
|
|
return this.type = t, this.elementSize = e, this
|
|
},
|
|
setItemSize: function(t) {
|
|
return this.itemSize = t, this
|
|
},
|
|
setCount: function(t) {
|
|
return this.count = t, this
|
|
}
|
|
}), Object.assign(Za.prototype, {
|
|
set: function(t, e) {
|
|
this.ray.set(t, e)
|
|
},
|
|
setFromCamera: function(t, e) {
|
|
e && e.isPerspectiveCamera ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), this.ray.direction.set(t.x, t.y, .5).unproject(e).sub(this.ray.origin).normalize(), this.camera = e) : e && e.isOrthographicCamera ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), this.camera = e) : console.error("THREE.Raycaster: Unsupported camera type: " + e.type)
|
|
},
|
|
intersectObject: function(t, e, n) {
|
|
const i = n || [];
|
|
return Ka(t, this, i, e), i.sort(Ja), i
|
|
},
|
|
intersectObjects: function(t, e, n) {
|
|
const i = n || [];
|
|
if (!1 === Array.isArray(t)) return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."), i;
|
|
for (let n = 0, r = t.length; n < r; n++) Ka(t[n], this, i, e);
|
|
return i.sort(Ja), i
|
|
}
|
|
});
|
|
class $a {
|
|
constructor(t = 1, e = 0, n = 0) {
|
|
return this.radius = t, this.phi = e, this.theta = n, this
|
|
}
|
|
set(t, e, n) {
|
|
return this.radius = t, this.phi = e, this.theta = n, this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.radius = t.radius, this.phi = t.phi, this.theta = t.theta, this
|
|
}
|
|
makeSafe() {
|
|
return this.phi = Math.max(1e-6, Math.min(Math.PI - 1e-6, this.phi)), this
|
|
}
|
|
setFromVector3(t) {
|
|
return this.setFromCartesianCoords(t.x, t.y, t.z)
|
|
}
|
|
setFromCartesianCoords(t, e, n) {
|
|
return this.radius = Math.sqrt(t * t + e * e + n * n), 0 === this.radius ? (this.theta = 0, this.phi = 0) : (this.theta = Math.atan2(t, n), this.phi = Math.acos(g.clamp(e / this.radius, -1, 1))), this
|
|
}
|
|
}
|
|
const tl = new v;
|
|
const el = new T,
|
|
nl = new T;
|
|
|
|
function il(t) {
|
|
St.call(this), this.material = t, this.render = function() {}, this.hasPositions = !1, this.hasNormals = !1, this.hasColors = !1, this.hasUvs = !1, this.positionArray = null, this.normalArray = null, this.colorArray = null, this.uvArray = null, this.count = 0
|
|
}
|
|
il.prototype = Object.create(St.prototype), il.prototype.constructor = il, il.prototype.isImmediateRenderObject = !0;
|
|
const rl = new T,
|
|
ol = new et,
|
|
sl = new et;
|
|
const al = new Kt({
|
|
side: 1,
|
|
depthWrite: !1,
|
|
depthTest: !1
|
|
});
|
|
new He(new Ve, al);
|
|
|
|
function ll(t) {
|
|
console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."), Vs.call(this, t), this.type = "catmullrom"
|
|
}
|
|
Os.create = function(t, e) {
|
|
return console.log("THREE.Curve.create() has been deprecated"), t.prototype = Object.create(Os.prototype), t.prototype.constructor = t, t.prototype.getPoint = e, t
|
|
}, Object.assign(ea.prototype, {
|
|
fromPoints: function(t) {
|
|
return console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."), this.setFromPoints(t)
|
|
}
|
|
}), ll.prototype = Object.create(Vs.prototype), Object.assign(ll.prototype, {
|
|
initFromArray: function() {
|
|
console.error("THREE.Spline: .initFromArray() has been removed.")
|
|
},
|
|
getControlPointsArray: function() {
|
|
console.error("THREE.Spline: .getControlPointsArray() has been removed.")
|
|
},
|
|
reparametrizeByArcLength: function() {
|
|
console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")
|
|
}
|
|
}), class extends ro {
|
|
constructor(t = 10, e = 10, n = 4473924, i = 8947848) {
|
|
n = new Yt(n), i = new Yt(i);
|
|
const r = e / 2,
|
|
o = t / e,
|
|
s = t / 2,
|
|
a = [],
|
|
l = [];
|
|
for (let t = 0, c = 0, h = -s; t <= e; t++, h += o) {
|
|
a.push(-s, 0, h, s, 0, h), a.push(h, 0, -s, h, 0, s);
|
|
const e = t === r ? n : i;
|
|
e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3, e.toArray(l, c), c += 3
|
|
}
|
|
const c = new be;
|
|
c.setAttribute("position", new he(a, 3)), c.setAttribute("color", new he(l, 3));
|
|
super(c, new Qr({
|
|
vertexColors: !0,
|
|
toneMapped: !1
|
|
})), this.type = "GridHelper"
|
|
}
|
|
}.prototype.setColors = function() {
|
|
console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")
|
|
}, class extends ro {
|
|
constructor(t) {
|
|
const e = function t(e) {
|
|
const n = [];
|
|
e && e.isBone && n.push(e);
|
|
for (let i = 0; i < e.children.length; i++) n.push.apply(n, t(e.children[i]));
|
|
return n
|
|
}(t),
|
|
n = new be,
|
|
i = [],
|
|
r = [],
|
|
o = new Yt(0, 0, 1),
|
|
s = new Yt(0, 1, 0);
|
|
for (let t = 0; t < e.length; t++) {
|
|
const n = e[t];
|
|
n.parent && n.parent.isBone && (i.push(0, 0, 0), i.push(0, 0, 0), r.push(o.r, o.g, o.b), r.push(s.r, s.g, s.b))
|
|
}
|
|
n.setAttribute("position", new he(i, 3)), n.setAttribute("color", new he(r, 3));
|
|
super(n, new Qr({
|
|
vertexColors: !0,
|
|
depthTest: !1,
|
|
depthWrite: !1,
|
|
toneMapped: !1,
|
|
transparent: !0
|
|
})), this.type = "SkeletonHelper", this.isSkeletonHelper = !0, this.root = t, this.bones = e, this.matrix = t.matrixWorld, this.matrixAutoUpdate = !1
|
|
}
|
|
updateMatrixWorld(t) {
|
|
const e = this.bones,
|
|
n = this.geometry,
|
|
i = n.getAttribute("position");
|
|
sl.copy(this.root.matrixWorld).invert();
|
|
for (let t = 0, n = 0; t < e.length; t++) {
|
|
const r = e[t];
|
|
r.parent && r.parent.isBone && (ol.multiplyMatrices(sl, r.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n, rl.x, rl.y, rl.z), ol.multiplyMatrices(sl, r.parent.matrixWorld), rl.setFromMatrixPosition(ol), i.setXYZ(n + 1, rl.x, rl.y, rl.z), n += 2)
|
|
}
|
|
n.getAttribute("position").needsUpdate = !0, super.updateMatrixWorld(t)
|
|
}
|
|
}.prototype.update = function() {
|
|
console.error("THREE.SkeletonHelper: update() no longer needs to be called.")
|
|
}, Object.assign(Es.prototype, {
|
|
extractUrlBase: function(t) {
|
|
return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."), ya(t)
|
|
}
|
|
}), Es.Handlers = {
|
|
add: function() {
|
|
console.error("THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.")
|
|
},
|
|
get: function() {
|
|
console.error("THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.")
|
|
}
|
|
}, Object.assign(class {
|
|
constructor(t, e) {
|
|
Object.defineProperty(this, "isBox2", {
|
|
value: !0
|
|
}), this.min = void 0 !== t ? t : new v(1 / 0, 1 / 0), this.max = void 0 !== e ? e : new v(-1 / 0, -1 / 0)
|
|
}
|
|
set(t, e) {
|
|
return this.min.copy(t), this.max.copy(e), this
|
|
}
|
|
setFromPoints(t) {
|
|
this.makeEmpty();
|
|
for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]);
|
|
return this
|
|
}
|
|
setFromCenterAndSize(t, e) {
|
|
const n = tl.copy(e).multiplyScalar(.5);
|
|
return this.min.copy(t).sub(n), this.max.copy(t).add(n), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.min.copy(t.min), this.max.copy(t.max), this
|
|
}
|
|
makeEmpty() {
|
|
return this.min.x = this.min.y = 1 / 0, this.max.x = this.max.y = -1 / 0, this
|
|
}
|
|
isEmpty() {
|
|
return this.max.x < this.min.x || this.max.y < this.min.y
|
|
}
|
|
getCenter(t) {
|
|
return void 0 === t && (console.warn("THREE.Box2: .getCenter() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(.5)
|
|
}
|
|
getSize(t) {
|
|
return void 0 === t && (console.warn("THREE.Box2: .getSize() target is now required"), t = new v), this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min)
|
|
}
|
|
expandByPoint(t) {
|
|
return this.min.min(t), this.max.max(t), this
|
|
}
|
|
expandByVector(t) {
|
|
return this.min.sub(t), this.max.add(t), this
|
|
}
|
|
expandByScalar(t) {
|
|
return this.min.addScalar(-t), this.max.addScalar(t), this
|
|
}
|
|
containsPoint(t) {
|
|
return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y)
|
|
}
|
|
containsBox(t) {
|
|
return this.min.x <= t.min.x && t.max.x <= this.max.x && this.min.y <= t.min.y && t.max.y <= this.max.y
|
|
}
|
|
getParameter(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Box2: .getParameter() target is now required"), e = new v), e.set((t.x - this.min.x) / (this.max.x - this.min.x), (t.y - this.min.y) / (this.max.y - this.min.y))
|
|
}
|
|
intersectsBox(t) {
|
|
return !(t.max.x < this.min.x || t.min.x > this.max.x || t.max.y < this.min.y || t.min.y > this.max.y)
|
|
}
|
|
clampPoint(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Box2: .clampPoint() target is now required"), e = new v), e.copy(t).clamp(this.min, this.max)
|
|
}
|
|
distanceToPoint(t) {
|
|
return tl.copy(t).clamp(this.min, this.max).sub(t).length()
|
|
}
|
|
intersect(t) {
|
|
return this.min.max(t.min), this.max.min(t.max), this
|
|
}
|
|
union(t) {
|
|
return this.min.min(t.min), this.max.max(t.max), this
|
|
}
|
|
translate(t) {
|
|
return this.min.add(t), this.max.add(t), this
|
|
}
|
|
equals(t) {
|
|
return t.min.equals(this.min) && t.max.equals(this.max)
|
|
}
|
|
}.prototype, {
|
|
center: function(t) {
|
|
return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."), this.getCenter(t)
|
|
},
|
|
empty: function() {
|
|
return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."), this.isEmpty()
|
|
},
|
|
isIntersectionBox: function(t) {
|
|
return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t)
|
|
},
|
|
size: function(t) {
|
|
return console.warn("THREE.Box2: .size() has been renamed to .getSize()."), this.getSize(t)
|
|
}
|
|
}), Object.assign(C.prototype, {
|
|
center: function(t) {
|
|
return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."), this.getCenter(t)
|
|
},
|
|
empty: function() {
|
|
return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."), this.isEmpty()
|
|
},
|
|
isIntersectionBox: function(t) {
|
|
return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t)
|
|
},
|
|
isIntersectionSphere: function(t) {
|
|
return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t)
|
|
},
|
|
size: function(t) {
|
|
return console.warn("THREE.Box3: .size() has been renamed to .getSize()."), this.getSize(t)
|
|
}
|
|
}), Object.assign(X.prototype, {
|
|
empty: function() {
|
|
return console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty()."), this.isEmpty()
|
|
}
|
|
}), en.prototype.setFromMatrix = function(t) {
|
|
return console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix()."), this.setFromProjectionMatrix(t)
|
|
}, class {
|
|
constructor(t, e) {
|
|
this.start = void 0 !== t ? t : new T, this.end = void 0 !== e ? e : new T
|
|
}
|
|
set(t, e) {
|
|
return this.start.copy(t), this.end.copy(e), this
|
|
}
|
|
clone() {
|
|
return (new this.constructor).copy(this)
|
|
}
|
|
copy(t) {
|
|
return this.start.copy(t.start), this.end.copy(t.end), this
|
|
}
|
|
getCenter(t) {
|
|
return void 0 === t && (console.warn("THREE.Line3: .getCenter() target is now required"), t = new T), t.addVectors(this.start, this.end).multiplyScalar(.5)
|
|
}
|
|
delta(t) {
|
|
return void 0 === t && (console.warn("THREE.Line3: .delta() target is now required"), t = new T), t.subVectors(this.end, this.start)
|
|
}
|
|
distanceSq() {
|
|
return this.start.distanceToSquared(this.end)
|
|
}
|
|
distance() {
|
|
return this.start.distanceTo(this.end)
|
|
}
|
|
at(t, e) {
|
|
return void 0 === e && (console.warn("THREE.Line3: .at() target is now required"), e = new T), this.delta(e).multiplyScalar(t).add(this.start)
|
|
}
|
|
closestPointToPointParameter(t, e) {
|
|
el.subVectors(t, this.start), nl.subVectors(this.end, this.start);
|
|
const n = nl.dot(nl);
|
|
let i = nl.dot(el) / n;
|
|
return e && (i = g.clamp(i, 0, 1)), i
|
|
}
|
|
closestPointToPoint(t, e, n) {
|
|
const i = this.closestPointToPointParameter(t, e);
|
|
return void 0 === n && (console.warn("THREE.Line3: .closestPointToPoint() target is now required"), n = new T), this.delta(n).multiplyScalar(i).add(this.start)
|
|
}
|
|
applyMatrix4(t) {
|
|
return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this
|
|
}
|
|
equals(t) {
|
|
return t.start.equals(this.start) && t.end.equals(this.end)
|
|
}
|
|
}.prototype.center = function(t) {
|
|
return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."), this.getCenter(t)
|
|
}, Object.assign(g, {
|
|
random16: function() {
|
|
return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."), Math.random()
|
|
},
|
|
nearestPowerOfTwo: function(t) {
|
|
return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."), g.floorPowerOfTwo(t)
|
|
},
|
|
nextPowerOfTwo: function(t) {
|
|
return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."), g.ceilPowerOfTwo(t)
|
|
}
|
|
}), Object.assign(y.prototype, {
|
|
flattenToArrayOffset: function(t, e) {
|
|
return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e)
|
|
},
|
|
multiplyVector3: function(t) {
|
|
return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."), t.applyMatrix3(this)
|
|
},
|
|
multiplyVector3Array: function() {
|
|
console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")
|
|
},
|
|
applyToBufferAttribute: function(t) {
|
|
return console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead."), t.applyMatrix3(this)
|
|
},
|
|
applyToVector3Array: function() {
|
|
console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")
|
|
},
|
|
getInverse: function(t) {
|
|
return console.warn("THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert()
|
|
}
|
|
}), Object.assign(et.prototype, {
|
|
extractPosition: function(t) {
|
|
return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."), this.copyPosition(t)
|
|
},
|
|
flattenToArrayOffset: function(t, e) {
|
|
return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."), this.toArray(t, e)
|
|
},
|
|
getPosition: function() {
|
|
return console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."), (new T).setFromMatrixColumn(this, 3)
|
|
},
|
|
setRotationFromQuaternion: function(t) {
|
|
return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."), this.makeRotationFromQuaternion(t)
|
|
},
|
|
multiplyToArray: function() {
|
|
console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")
|
|
},
|
|
multiplyVector3: function(t) {
|
|
return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this)
|
|
},
|
|
multiplyVector4: function(t) {
|
|
return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this)
|
|
},
|
|
multiplyVector3Array: function() {
|
|
console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")
|
|
},
|
|
rotateAxis: function(t) {
|
|
console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."), t.transformDirection(this)
|
|
},
|
|
crossVector: function(t) {
|
|
return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."), t.applyMatrix4(this)
|
|
},
|
|
translate: function() {
|
|
console.error("THREE.Matrix4: .translate() has been removed.")
|
|
},
|
|
rotateX: function() {
|
|
console.error("THREE.Matrix4: .rotateX() has been removed.")
|
|
},
|
|
rotateY: function() {
|
|
console.error("THREE.Matrix4: .rotateY() has been removed.")
|
|
},
|
|
rotateZ: function() {
|
|
console.error("THREE.Matrix4: .rotateZ() has been removed.")
|
|
},
|
|
rotateByAxis: function() {
|
|
console.error("THREE.Matrix4: .rotateByAxis() has been removed.")
|
|
},
|
|
applyToBufferAttribute: function(t) {
|
|
return console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead."), t.applyMatrix4(this)
|
|
},
|
|
applyToVector3Array: function() {
|
|
console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")
|
|
},
|
|
makeFrustum: function(t, e, n, i, r, o) {
|
|
return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."), this.makePerspective(t, e, i, n, r, o)
|
|
},
|
|
getInverse: function(t) {
|
|
return console.warn("THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead."), this.copy(t).invert()
|
|
}
|
|
}), Ct.prototype.isIntersectionLine = function(t) {
|
|
return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."), this.intersectsLine(t)
|
|
}, Object.assign(S.prototype, {
|
|
multiplyVector3: function(t) {
|
|
return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."), t.applyQuaternion(this)
|
|
},
|
|
inverse: function() {
|
|
return console.warn("THREE.Quaternion: .inverse() has been renamed to invert()."), this.invert()
|
|
}
|
|
}), Object.assign(tt.prototype, {
|
|
isIntersectionBox: function(t) {
|
|
return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."), this.intersectsBox(t)
|
|
},
|
|
isIntersectionPlane: function(t) {
|
|
return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."), this.intersectsPlane(t)
|
|
},
|
|
isIntersectionSphere: function(t) {
|
|
return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."), this.intersectsSphere(t)
|
|
}
|
|
}), Object.assign(Gt.prototype, {
|
|
area: function() {
|
|
return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."), this.getArea()
|
|
},
|
|
barycoordFromPoint: function(t, e) {
|
|
return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), this.getBarycoord(t, e)
|
|
},
|
|
midpoint: function(t) {
|
|
return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."), this.getMidpoint(t)
|
|
},
|
|
normal: function(t) {
|
|
return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), this.getNormal(t)
|
|
},
|
|
plane: function(t) {
|
|
return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."), this.getPlane(t)
|
|
}
|
|
}), Object.assign(Gt, {
|
|
barycoordFromPoint: function(t, e, n, i, r) {
|
|
return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."), Gt.getBarycoord(t, e, n, i, r)
|
|
},
|
|
normal: function(t, e, n, i) {
|
|
return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."), Gt.getNormal(t, e, n, i)
|
|
}
|
|
}), Object.assign(na.prototype, {
|
|
extractAllPoints: function(t) {
|
|
return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."), this.extractPoints(t)
|
|
},
|
|
extrude: function(t) {
|
|
return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."), new Xo(this, t)
|
|
},
|
|
makeGeometry: function(t) {
|
|
return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."), new Qo(this, t)
|
|
}
|
|
}), Object.assign(v.prototype, {
|
|
fromAttribute: function(t, e, n) {
|
|
return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n)
|
|
},
|
|
distanceToManhattan: function(t) {
|
|
return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t)
|
|
},
|
|
lengthManhattan: function() {
|
|
return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength()
|
|
}
|
|
}), Object.assign(T.prototype, {
|
|
setEulerFromRotationMatrix: function() {
|
|
console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")
|
|
},
|
|
setEulerFromQuaternion: function() {
|
|
console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")
|
|
},
|
|
getPositionFromMatrix: function(t) {
|
|
return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."), this.setFromMatrixPosition(t)
|
|
},
|
|
getScaleFromMatrix: function(t) {
|
|
return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."), this.setFromMatrixScale(t)
|
|
},
|
|
getColumnFromMatrix: function(t, e) {
|
|
return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."), this.setFromMatrixColumn(e, t)
|
|
},
|
|
applyProjection: function(t) {
|
|
return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."), this.applyMatrix4(t)
|
|
},
|
|
fromAttribute: function(t, e, n) {
|
|
return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n)
|
|
},
|
|
distanceToManhattan: function(t) {
|
|
return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."), this.manhattanDistanceTo(t)
|
|
},
|
|
lengthManhattan: function() {
|
|
return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength()
|
|
}
|
|
}), Object.assign(M.prototype, {
|
|
fromAttribute: function(t, e, n) {
|
|
return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."), this.fromBufferAttribute(t, e, n)
|
|
},
|
|
lengthManhattan: function() {
|
|
return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."), this.manhattanLength()
|
|
}
|
|
}), Object.assign(St.prototype, {
|
|
getChildByName: function(t) {
|
|
return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."), this.getObjectByName(t)
|
|
},
|
|
renderDepth: function() {
|
|
console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")
|
|
},
|
|
translate: function(t, e) {
|
|
return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."), this.translateOnAxis(e, t)
|
|
},
|
|
getWorldRotation: function() {
|
|
console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")
|
|
},
|
|
applyMatrix: function(t) {
|
|
return console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t)
|
|
}
|
|
}), Object.defineProperties(St.prototype, {
|
|
eulerOrder: {
|
|
get: function() {
|
|
return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."), this.rotation.order = t
|
|
}
|
|
},
|
|
useQuaternion: {
|
|
get: function() {
|
|
console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")
|
|
}
|
|
}
|
|
}), Object.assign(He.prototype, {
|
|
setDrawMode: function() {
|
|
console.error("THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")
|
|
}
|
|
}), Object.defineProperties(He.prototype, {
|
|
drawMode: {
|
|
get: function() {
|
|
return console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode."), 0
|
|
},
|
|
set: function() {
|
|
console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.")
|
|
}
|
|
}
|
|
}), Object.defineProperties(Ir.prototype, {
|
|
objects: {
|
|
get: function() {
|
|
return console.warn("THREE.LOD: .objects has been renamed to .levels."), this.levels
|
|
}
|
|
}
|
|
}), Object.defineProperty(kr.prototype, "useVertexTexture", {
|
|
get: function() {
|
|
console.warn("THREE.Skeleton: useVertexTexture has been removed.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.Skeleton: useVertexTexture has been removed.")
|
|
}
|
|
}), Ur.prototype.initBones = function() {
|
|
console.error("THREE.SkinnedMesh: initBones() has been removed.")
|
|
}, Object.defineProperty(Os.prototype, "__arcLengthDivisions", {
|
|
get: function() {
|
|
return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."), this.arcLengthDivisions = t
|
|
}
|
|
}), Ye.prototype.setLens = function(t, e) {
|
|
console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."), void 0 !== e && (this.filmGauge = e), this.setFocalLength(t)
|
|
}, Object.defineProperties(ia.prototype, {
|
|
onlyShadow: {
|
|
set: function() {
|
|
console.warn("THREE.Light: .onlyShadow has been removed.")
|
|
}
|
|
},
|
|
shadowCameraFov: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."), this.shadow.camera.fov = t
|
|
}
|
|
},
|
|
shadowCameraLeft: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."), this.shadow.camera.left = t
|
|
}
|
|
},
|
|
shadowCameraRight: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."), this.shadow.camera.right = t
|
|
}
|
|
},
|
|
shadowCameraTop: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."), this.shadow.camera.top = t
|
|
}
|
|
},
|
|
shadowCameraBottom: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."), this.shadow.camera.bottom = t
|
|
}
|
|
},
|
|
shadowCameraNear: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."), this.shadow.camera.near = t
|
|
}
|
|
},
|
|
shadowCameraFar: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."), this.shadow.camera.far = t
|
|
}
|
|
},
|
|
shadowCameraVisible: {
|
|
set: function() {
|
|
console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")
|
|
}
|
|
},
|
|
shadowBias: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowBias is now .shadow.bias."), this.shadow.bias = t
|
|
}
|
|
},
|
|
shadowDarkness: {
|
|
set: function() {
|
|
console.warn("THREE.Light: .shadowDarkness has been removed.")
|
|
}
|
|
},
|
|
shadowMapWidth: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."), this.shadow.mapSize.width = t
|
|
}
|
|
},
|
|
shadowMapHeight: {
|
|
set: function(t) {
|
|
console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."), this.shadow.mapSize.height = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(ee.prototype, {
|
|
length: {
|
|
get: function() {
|
|
return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."), this.array.length
|
|
}
|
|
},
|
|
dynamic: {
|
|
get: function() {
|
|
return console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), 35048 === this.usage
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead."), this.setUsage(35048)
|
|
}
|
|
}
|
|
}), Object.assign(ee.prototype, {
|
|
setDynamic: function(t) {
|
|
return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this
|
|
},
|
|
copyIndicesArray: function() {
|
|
console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")
|
|
},
|
|
setArray: function() {
|
|
console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")
|
|
}
|
|
}), Object.assign(be.prototype, {
|
|
addIndex: function(t) {
|
|
console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."), this.setIndex(t)
|
|
},
|
|
addAttribute: function(t, e) {
|
|
return console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute()."), e && e.isBufferAttribute || e && e.isInterleavedBufferAttribute ? "index" === t ? (console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."), this.setIndex(e), this) : this.setAttribute(t, e) : (console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."), this.setAttribute(t, new ee(arguments[1], arguments[2])))
|
|
},
|
|
addDrawCall: function(t, e, n) {
|
|
void 0 !== n && console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."), console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."), this.addGroup(t, e)
|
|
},
|
|
clearDrawCalls: function() {
|
|
console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."), this.clearGroups()
|
|
},
|
|
computeOffsets: function() {
|
|
console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")
|
|
},
|
|
removeAttribute: function(t) {
|
|
return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."), this.deleteAttribute(t)
|
|
},
|
|
applyMatrix: function(t) {
|
|
return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."), this.applyMatrix4(t)
|
|
}
|
|
}), Object.defineProperties(be.prototype, {
|
|
drawcalls: {
|
|
get: function() {
|
|
return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."), this.groups
|
|
}
|
|
},
|
|
offsets: {
|
|
get: function() {
|
|
return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."), this.groups
|
|
}
|
|
}
|
|
}), Object.defineProperties(Aa.prototype, {
|
|
maxInstancedCount: {
|
|
get: function() {
|
|
return console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount."), this.instanceCount = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(Za.prototype, {
|
|
linePrecision: {
|
|
get: function() {
|
|
return console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead."), this.params.Line.threshold = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(dr.prototype, {
|
|
dynamic: {
|
|
get: function() {
|
|
return console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), 35048 === this.usage
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead."), this.setUsage(t)
|
|
}
|
|
}
|
|
}), Object.assign(dr.prototype, {
|
|
setDynamic: function(t) {
|
|
return console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead."), this.setUsage(!0 === t ? 35048 : 35044), this
|
|
},
|
|
setArray: function() {
|
|
console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")
|
|
}
|
|
}), Object.assign(Xo.prototype, {
|
|
getArrays: function() {
|
|
console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")
|
|
},
|
|
addShapeList: function() {
|
|
console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")
|
|
},
|
|
addShape: function() {
|
|
console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")
|
|
}
|
|
}), Object.assign(ur.prototype, {
|
|
dispose: function() {
|
|
console.error("THREE.Scene: .dispose() has been removed.")
|
|
}
|
|
}), Object.defineProperties(qa.prototype, {
|
|
dynamic: {
|
|
set: function() {
|
|
console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")
|
|
}
|
|
},
|
|
onUpdate: {
|
|
value: function() {
|
|
return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."), this
|
|
}
|
|
}
|
|
}), Object.defineProperties(Jt.prototype, {
|
|
wrapAround: {
|
|
get: function() {
|
|
console.warn("THREE.Material: .wrapAround has been removed.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.Material: .wrapAround has been removed.")
|
|
}
|
|
},
|
|
overdraw: {
|
|
get: function() {
|
|
console.warn("THREE.Material: .overdraw has been removed.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.Material: .overdraw has been removed.")
|
|
}
|
|
},
|
|
wrapRGB: {
|
|
get: function() {
|
|
return console.warn("THREE.Material: .wrapRGB has been removed."), new Yt
|
|
}
|
|
},
|
|
shading: {
|
|
get: function() {
|
|
console.error("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead.")
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE." + this.type + ": .shading has been removed. Use the boolean .flatShading instead."), this.flatShading = 1 === t
|
|
}
|
|
},
|
|
stencilMask: {
|
|
get: function() {
|
|
return console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE." + this.type + ": .stencilMask has been removed. Use .stencilFuncMask instead."), this.stencilFuncMask = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(es.prototype, {
|
|
metal: {
|
|
get: function() {
|
|
return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."), !1
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")
|
|
}
|
|
}
|
|
}), Object.defineProperties(ts.prototype, {
|
|
transparency: {
|
|
get: function() {
|
|
return console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission."), this.transmission = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(Xe.prototype, {
|
|
derivatives: {
|
|
get: function() {
|
|
return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."), this.extensions.derivatives = t
|
|
}
|
|
}
|
|
}), Object.assign(cr.prototype, {
|
|
clearTarget: function(t, e, n, i) {
|
|
console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead."), this.setRenderTarget(t), this.clear(e, n, i)
|
|
},
|
|
animate: function(t) {
|
|
console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."), this.setAnimationLoop(t)
|
|
},
|
|
getCurrentRenderTarget: function() {
|
|
return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."), this.getRenderTarget()
|
|
},
|
|
getMaxAnisotropy: function() {
|
|
return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."), this.capabilities.getMaxAnisotropy()
|
|
},
|
|
getPrecision: function() {
|
|
return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."), this.capabilities.precision
|
|
},
|
|
resetGLState: function() {
|
|
return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."), this.state.reset()
|
|
},
|
|
supportsFloatTextures: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."), this.extensions.get("OES_texture_float")
|
|
},
|
|
supportsHalfFloatTextures: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."), this.extensions.get("OES_texture_half_float")
|
|
},
|
|
supportsStandardDerivatives: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."), this.extensions.get("OES_standard_derivatives")
|
|
},
|
|
supportsCompressedTextureS3TC: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."), this.extensions.get("WEBGL_compressed_texture_s3tc")
|
|
},
|
|
supportsCompressedTexturePVRTC: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."), this.extensions.get("WEBGL_compressed_texture_pvrtc")
|
|
},
|
|
supportsBlendMinMax: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."), this.extensions.get("EXT_blend_minmax")
|
|
},
|
|
supportsVertexTextures: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."), this.capabilities.vertexTextures
|
|
},
|
|
supportsInstancedArrays: function() {
|
|
return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."), this.extensions.get("ANGLE_instanced_arrays")
|
|
},
|
|
enableScissorTest: function(t) {
|
|
console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."), this.setScissorTest(t)
|
|
},
|
|
initMaterial: function() {
|
|
console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")
|
|
},
|
|
addPrePlugin: function() {
|
|
console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")
|
|
},
|
|
addPostPlugin: function() {
|
|
console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")
|
|
},
|
|
updateShadowMap: function() {
|
|
console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")
|
|
},
|
|
setFaceCulling: function() {
|
|
console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")
|
|
},
|
|
allocTextureUnit: function() {
|
|
console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")
|
|
},
|
|
setTexture: function() {
|
|
console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")
|
|
},
|
|
setTexture2D: function() {
|
|
console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")
|
|
},
|
|
setTextureCube: function() {
|
|
console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")
|
|
},
|
|
getActiveMipMapLevel: function() {
|
|
return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."), this.getActiveMipmapLevel()
|
|
}
|
|
}), Object.defineProperties(cr.prototype, {
|
|
shadowMapEnabled: {
|
|
get: function() {
|
|
return this.shadowMap.enabled
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."), this.shadowMap.enabled = t
|
|
}
|
|
},
|
|
shadowMapType: {
|
|
get: function() {
|
|
return this.shadowMap.type
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."), this.shadowMap.type = t
|
|
}
|
|
},
|
|
shadowMapCullFace: {
|
|
get: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")
|
|
}
|
|
},
|
|
context: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead."), this.getContext()
|
|
}
|
|
},
|
|
vr: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr"), this.xr
|
|
}
|
|
},
|
|
gammaInput: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead."), !1
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")
|
|
}
|
|
},
|
|
gammaOutput: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), !1
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead."), this.outputEncoding = !0 === t ? 3001 : 3e3
|
|
}
|
|
},
|
|
toneMappingWhitePoint: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed."), 1
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")
|
|
}
|
|
}
|
|
}), Object.defineProperties(tr.prototype, {
|
|
cullFace: {
|
|
get: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")
|
|
}
|
|
},
|
|
renderReverseSided: {
|
|
get: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")
|
|
}
|
|
},
|
|
renderSingleSided: {
|
|
get: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")
|
|
},
|
|
set: function() {
|
|
console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")
|
|
}
|
|
}
|
|
}), Object.defineProperties(E.prototype, {
|
|
wrapS: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."), this.texture.wrapS = t
|
|
}
|
|
},
|
|
wrapT: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."), this.texture.wrapT = t
|
|
}
|
|
},
|
|
magFilter: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."), this.texture.magFilter = t
|
|
}
|
|
},
|
|
minFilter: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."), this.texture.minFilter = t
|
|
}
|
|
},
|
|
anisotropy: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."), this.texture.anisotropy = t
|
|
}
|
|
},
|
|
offset: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."), this.texture.offset = t
|
|
}
|
|
},
|
|
repeat: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."), this.texture.repeat = t
|
|
}
|
|
},
|
|
format: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."), this.texture.format = t
|
|
}
|
|
},
|
|
type: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."), this.texture.type = t
|
|
}
|
|
},
|
|
generateMipmaps: {
|
|
get: function() {
|
|
return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."), this.texture.generateMipmaps = t
|
|
}
|
|
}
|
|
}), Object.defineProperties(class extends St {
|
|
constructor(t) {
|
|
super(), this.type = "Audio", this.listener = t, this.context = t.context, this.gain = this.context.createGain(), this.gain.connect(t.getInput()), this.autoplay = !1, this.buffer = null, this.detune = 0, this.loop = !1, this.loopStart = 0, this.loopEnd = 0, this.offset = 0, this.duration = void 0, this.playbackRate = 1, this.isPlaying = !1, this.hasPlaybackControl = !0, this.source = null, this.sourceType = "empty", this._startedAt = 0, this._progress = 0, this._connected = !1, this.filters = []
|
|
}
|
|
getOutput() {
|
|
return this.gain
|
|
}
|
|
setNodeSource(t) {
|
|
return this.hasPlaybackControl = !1, this.sourceType = "audioNode", this.source = t, this.connect(), this
|
|
}
|
|
setMediaElementSource(t) {
|
|
return this.hasPlaybackControl = !1, this.sourceType = "mediaNode", this.source = this.context.createMediaElementSource(t), this.connect(), this
|
|
}
|
|
setMediaStreamSource(t) {
|
|
return this.hasPlaybackControl = !1, this.sourceType = "mediaStreamNode", this.source = this.context.createMediaStreamSource(t), this.connect(), this
|
|
}
|
|
setBuffer(t) {
|
|
return this.buffer = t, this.sourceType = "buffer", this.autoplay && this.play(), this
|
|
}
|
|
play(t = 0) {
|
|
if (!0 === this.isPlaying) return void console.warn("THREE.Audio: Audio is already playing.");
|
|
if (!1 === this.hasPlaybackControl) return void console.warn("THREE.Audio: this Audio has no playback control.");
|
|
this._startedAt = this.context.currentTime + t;
|
|
const e = this.context.createBufferSource();
|
|
return e.buffer = this.buffer, e.loop = this.loop, e.loopStart = this.loopStart, e.loopEnd = this.loopEnd, e.onended = this.onEnded.bind(this), e.start(this._startedAt, this._progress + this.offset, this.duration), this.isPlaying = !0, this.source = e, this.setDetune(this.detune), this.setPlaybackRate(this.playbackRate), this.connect()
|
|
}
|
|
pause() {
|
|
if (!1 !== this.hasPlaybackControl) return !0 === this.isPlaying && (this._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate, !0 === this.loop && (this._progress = this._progress % (this.duration || this.buffer.duration)), this.source.stop(), this.source.onended = null, this.isPlaying = !1), this;
|
|
console.warn("THREE.Audio: this Audio has no playback control.")
|
|
}
|
|
stop() {
|
|
if (!1 !== this.hasPlaybackControl) return this._progress = 0, this.source.stop(), this.source.onended = null, this.isPlaying = !1, this;
|
|
console.warn("THREE.Audio: this Audio has no playback control.")
|
|
}
|
|
connect() {
|
|
if (this.filters.length > 0) {
|
|
this.source.connect(this.filters[0]);
|
|
for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].connect(this.filters[t]);
|
|
this.filters[this.filters.length - 1].connect(this.getOutput())
|
|
} else this.source.connect(this.getOutput());
|
|
return this._connected = !0, this
|
|
}
|
|
disconnect() {
|
|
if (this.filters.length > 0) {
|
|
this.source.disconnect(this.filters[0]);
|
|
for (let t = 1, e = this.filters.length; t < e; t++) this.filters[t - 1].disconnect(this.filters[t]);
|
|
this.filters[this.filters.length - 1].disconnect(this.getOutput())
|
|
} else this.source.disconnect(this.getOutput());
|
|
return this._connected = !1, this
|
|
}
|
|
getFilters() {
|
|
return this.filters
|
|
}
|
|
setFilters(t) {
|
|
return t || (t = []), !0 === this._connected ? (this.disconnect(), this.filters = t.slice(), this.connect()) : this.filters = t.slice(), this
|
|
}
|
|
setDetune(t) {
|
|
if (this.detune = t, void 0 !== this.source.detune) return !0 === this.isPlaying && this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, .01), this
|
|
}
|
|
getDetune() {
|
|
return this.detune
|
|
}
|
|
getFilter() {
|
|
return this.getFilters()[0]
|
|
}
|
|
setFilter(t) {
|
|
return this.setFilters(t ? [t] : [])
|
|
}
|
|
setPlaybackRate(t) {
|
|
if (!1 !== this.hasPlaybackControl) return this.playbackRate = t, !0 === this.isPlaying && this.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, .01), this;
|
|
console.warn("THREE.Audio: this Audio has no playback control.")
|
|
}
|
|
getPlaybackRate() {
|
|
return this.playbackRate
|
|
}
|
|
onEnded() {
|
|
this.isPlaying = !1
|
|
}
|
|
getLoop() {
|
|
return !1 === this.hasPlaybackControl ? (console.warn("THREE.Audio: this Audio has no playback control."), !1) : this.loop
|
|
}
|
|
setLoop(t) {
|
|
if (!1 !== this.hasPlaybackControl) return this.loop = t, !0 === this.isPlaying && (this.source.loop = this.loop), this;
|
|
console.warn("THREE.Audio: this Audio has no playback control.")
|
|
}
|
|
setLoopStart(t) {
|
|
return this.loopStart = t, this
|
|
}
|
|
setLoopEnd(t) {
|
|
return this.loopEnd = t, this
|
|
}
|
|
getVolume() {
|
|
return this.gain.gain.value
|
|
}
|
|
setVolume(t) {
|
|
return this.gain.gain.setTargetAtTime(t, this.context.currentTime, .01), this
|
|
}
|
|
}.prototype, {
|
|
load: {
|
|
value: function(t) {
|
|
console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");
|
|
const e = this;
|
|
return (new Ra).load(t, (function(t) {
|
|
e.setBuffer(t)
|
|
})), this
|
|
}
|
|
},
|
|
startTime: {
|
|
set: function() {
|
|
console.warn("THREE.Audio: .startTime is now .play( delay ).")
|
|
}
|
|
}
|
|
}), class {
|
|
constructor(t, e = 2048) {
|
|
this.analyser = t.context.createAnalyser(), this.analyser.fftSize = e, this.data = new Uint8Array(this.analyser.frequencyBinCount), t.getOutput().connect(this.analyser)
|
|
}
|
|
getFrequencyData() {
|
|
return this.analyser.getByteFrequencyData(this.data), this.data
|
|
}
|
|
getAverageFrequency() {
|
|
let t = 0;
|
|
const e = this.getFrequencyData();
|
|
for (let n = 0; n < e.length; n++) t += e[n];
|
|
return t / e.length
|
|
}
|
|
}.prototype.getData = function() {
|
|
return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."), this.getFrequencyData()
|
|
}, Qe.prototype.updateCubeMap = function(t, e) {
|
|
return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."), this.update(t, e)
|
|
}, Qe.prototype.clear = function(t, e, n, i) {
|
|
return console.warn("THREE.CubeCamera: .clear() is now .renderTarget.clear()."), this.renderTarget.clear(t, e, n, i)
|
|
}, x.crossOrigin = void 0, x.loadTexture = function(t, e, n, i) {
|
|
console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");
|
|
const r = new Is;
|
|
r.setCrossOrigin(this.crossOrigin);
|
|
const o = r.load(t, n, void 0, i);
|
|
return e && (o.mapping = e), o
|
|
}, x.loadTextureCube = function(t, e, n, i) {
|
|
console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");
|
|
const r = new Ps;
|
|
r.setCrossOrigin(this.crossOrigin);
|
|
const o = r.load(t, n, void 0, i);
|
|
return e && (o.mapping = e), o
|
|
}, x.loadCompressedTexture = function() {
|
|
console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")
|
|
}, x.loadCompressedTextureCube = function() {
|
|
console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")
|
|
}, "undefined" != typeof __THREE_DEVTOOLS__ && __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register", {
|
|
detail: {
|
|
revision: "125"
|
|
}
|
|
})), "undefined" != typeof window && (window.__THREE__ ? console.warn("WARNING: Multiple instances of Three.js being imported.") : window.__THREE__ = "125");
|
|
var cl = function(t, e) {
|
|
var n, i, r = this,
|
|
o = new et,
|
|
s = null;
|
|
"VRFrameData" in window && (s = new VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) {
|
|
i = t, t.length > 0 ? n = t[0] : e && e("VR input not available.")
|
|
})).catch((function() {
|
|
console.warn("THREE.VRControls: Unable to get VR Displays")
|
|
})), this.scale = 1, this.standing = !1, this.userHeight = 1.6, this.getVRDisplay = function() {
|
|
return n
|
|
}, this.setVRDisplay = function(t) {
|
|
n = t
|
|
}, this.getVRDisplays = function() {
|
|
return console.warn("THREE.VRControls: getVRDisplays() is being deprecated."), i
|
|
}, this.getStandingMatrix = function() {
|
|
return o
|
|
}, this.update = function() {
|
|
var e;
|
|
n && (n.getFrameData ? (n.getFrameData(s), e = s.pose) : n.getPose && (e = n.getPose()), null !== e.orientation && t.quaternion.fromArray(e.orientation), null !== e.position ? t.position.fromArray(e.position) : t.position.set(0, 0, 0), this.standing && (n.stageParameters ? (t.updateMatrix(), o.fromArray(n.stageParameters.sittingToStandingTransform), t.applyMatrix(o)) : t.position.setY(t.position.y + this.userHeight)), t.position.multiplyScalar(r.scale))
|
|
}, this.dispose = function() {
|
|
n = null
|
|
}
|
|
},
|
|
hl = function(t, e) {
|
|
var n, i, r, o, s = new T,
|
|
a = new T,
|
|
l = new et,
|
|
c = new et,
|
|
h = new et,
|
|
u = null;
|
|
"VRFrameData" in window && (u = new window.VRFrameData), navigator.getVRDisplays && navigator.getVRDisplays().then((function(t) {
|
|
i = t, t.length > 0 ? n = t[0] : e && e("HMD not available")
|
|
})).catch((function() {
|
|
console.warn("THREE.VREffect: Unable to get VR Displays")
|
|
})), this.isPresenting = !1;
|
|
var d = this,
|
|
p = t.getSize(),
|
|
f = !1,
|
|
m = t.getPixelRatio();
|
|
this.getVRDisplay = function() {
|
|
return n
|
|
}, this.setVRDisplay = function(t) {
|
|
n = t
|
|
}, this.getVRDisplays = function() {
|
|
return console.warn("THREE.VREffect: getVRDisplays() is being deprecated."), i
|
|
}, this.setSize = function(e, i, r) {
|
|
if (p = {
|
|
width: e,
|
|
height: i
|
|
}, f = r, d.isPresenting) {
|
|
var o = n.getEyeParameters("left");
|
|
t.setPixelRatio(1), t.setSize(2 * o.renderWidth, o.renderHeight, !1)
|
|
} else t.setPixelRatio(m), t.setSize(e, i, r)
|
|
};
|
|
var g = t.domElement,
|
|
v = [0, 0, .5, 1],
|
|
y = [.5, 0, .5, 1];
|
|
|
|
function A() {
|
|
var e = d.isPresenting;
|
|
if (d.isPresenting = void 0 !== n && n.isPresenting, d.isPresenting) {
|
|
var i = n.getEyeParameters("left"),
|
|
r = i.renderWidth,
|
|
o = i.renderHeight;
|
|
e || (m = t.getPixelRatio(), p = t.getSize(), t.setPixelRatio(1), t.setSize(2 * r, o, !1))
|
|
} else e && (t.setPixelRatio(m), t.setSize(p.width, p.height, f))
|
|
}
|
|
window.addEventListener("vrdisplaypresentchange", A, !1), this.setFullScreen = function(t) {
|
|
return new Promise((function(e, i) {
|
|
void 0 !== n ? d.isPresenting !== t ? e(t ? n.requestPresent([{
|
|
source: g
|
|
}]) : n.exitPresent()) : e() : i(new Error("No VR hardware found."))
|
|
}))
|
|
}, this.requestPresent = function() {
|
|
return this.setFullScreen(!0)
|
|
}, this.exitPresent = function() {
|
|
return this.setFullScreen(!1)
|
|
}, this.requestAnimationFrame = function(t) {
|
|
return void 0 !== n ? n.requestAnimationFrame(t) : window.requestAnimationFrame(t)
|
|
}, this.cancelAnimationFrame = function(t) {
|
|
void 0 !== n ? n.cancelAnimationFrame(t) : window.cancelAnimationFrame(t)
|
|
}, this.submitFrame = function() {
|
|
void 0 !== n && d.isPresenting && n.submitFrame()
|
|
}, this.autoSubmitFrame = !0;
|
|
var x = new Ye;
|
|
x.layers.enable(1);
|
|
var _ = new Ye;
|
|
_.layers.enable(2), this.render = function(e, i, p, f) {
|
|
if (n && d.isPresenting) {
|
|
var m = e.autoUpdate;
|
|
m && (e.updateMatrixWorld(), e.autoUpdate = !1), Array.isArray(e) && (console.warn("THREE.VREffect.render() no longer supports arrays. Use object.layers instead."), e = e[0]);
|
|
var g, A, E = t.getSize(),
|
|
S = n.getLayers();
|
|
if (S.length) {
|
|
var T = S[0];
|
|
g = null !== T.leftBounds && 4 === T.leftBounds.length ? T.leftBounds : v, A = null !== T.rightBounds && 4 === T.rightBounds.length ? T.rightBounds : y
|
|
} else g = v, A = y;
|
|
if (r = {
|
|
x: Math.round(E.width * g[0]),
|
|
y: Math.round(E.height * g[1]),
|
|
width: Math.round(E.width * g[2]),
|
|
height: Math.round(E.height * g[3])
|
|
}, o = {
|
|
x: Math.round(E.width * A[0]),
|
|
y: Math.round(E.height * A[1]),
|
|
width: Math.round(E.width * A[2]),
|
|
height: Math.round(E.height * A[3])
|
|
}, p ? (t.setRenderTarget(p), p.scissorTest = !0) : (t.setRenderTarget(null), t.setScissorTest(!0)), (t.autoClear || f) && t.clear(), null === i.parent && i.updateMatrixWorld(), i.matrixWorld.decompose(x.position, x.quaternion, x.scale), _.position.copy(x.position), _.quaternion.copy(x.quaternion), _.scale.copy(x.scale), n.getFrameData) n.depthNear = i.near, n.depthFar = i.far, n.getFrameData(u), x.projectionMatrix.elements = u.leftProjectionMatrix, _.projectionMatrix.elements = u.rightProjectionMatrix,
|
|
function(t) {
|
|
t.pose.orientation ? (b.fromArray(t.pose.orientation), l.makeRotationFromQuaternion(b)) : l.identity();
|
|
t.pose.position && (w.fromArray(t.pose.position), l.setPosition(w));
|
|
c.fromArray(t.leftViewMatrix), c.multiply(l), h.fromArray(t.rightViewMatrix), h.multiply(l), c.getInverse(c), h.getInverse(h)
|
|
}(u), x.updateMatrix(), x.matrix.multiply(c), x.matrix.decompose(x.position, x.quaternion, x.scale), _.updateMatrix(), _.matrix.multiply(h), _.matrix.decompose(_.position, _.quaternion, _.scale);
|
|
else {
|
|
var L = n.getEyeParameters("left"),
|
|
R = n.getEyeParameters("right");
|
|
x.projectionMatrix = M(L.fieldOfView, !0, i.near, i.far), _.projectionMatrix = M(R.fieldOfView, !0, i.near, i.far), s.fromArray(L.offset), a.fromArray(R.offset), x.translateOnAxis(s, x.scale.x), _.translateOnAxis(a, _.scale.x)
|
|
}
|
|
return p ? (p.viewport.set(r.x, r.y, r.width, r.height), p.scissor.set(r.x, r.y, r.width, r.height)) : (t.setViewport(r.x, r.y, r.width, r.height), t.setScissor(r.x, r.y, r.width, r.height)), t.render(e, x, p, f), p ? (p.viewport.set(o.x, o.y, o.width, o.height), p.scissor.set(o.x, o.y, o.width, o.height)) : (t.setViewport(o.x, o.y, o.width, o.height), t.setScissor(o.x, o.y, o.width, o.height)), t.render(e, _, p, f), p ? (p.viewport.set(0, 0, E.width, E.height), p.scissor.set(0, 0, E.width, E.height), p.scissorTest = !1, t.setRenderTarget(null)) : (t.setViewport(0, 0, E.width, E.height), t.setScissorTest(!1)), m && (e.autoUpdate = !0), void(d.autoSubmitFrame && d.submitFrame())
|
|
}
|
|
t.render(e, i, p, f)
|
|
}, this.dispose = function() {
|
|
window.removeEventListener("vrdisplaypresentchange", A, !1)
|
|
};
|
|
var b = new S,
|
|
w = new T;
|
|
|
|
function M(t, e, n, i) {
|
|
var r = Math.PI / 180;
|
|
return function(t, e, n, i) {
|
|
n = void 0 === n ? .01 : n, i = void 0 === i ? 1e4 : i;
|
|
var r = (e = void 0 === e || e) ? -1 : 1,
|
|
o = new et,
|
|
s = o.elements,
|
|
a = function(t) {
|
|
var e = 2 / (t.leftTan + t.rightTan),
|
|
n = (t.leftTan - t.rightTan) * e * .5,
|
|
i = 2 / (t.upTan + t.downTan);
|
|
return {
|
|
scale: [e, i],
|
|
offset: [n, (t.upTan - t.downTan) * i * .5]
|
|
}
|
|
}(t);
|
|
return s[0] = a.scale[0], s[1] = 0, s[2] = a.offset[0] * r, s[3] = 0, s[4] = 0, s[5] = a.scale[1], s[6] = -a.offset[1] * r, s[7] = 0, s[8] = 0, s[9] = 0, s[10] = i / (n - i) * -r, s[11] = i * n / (n - i), s[12] = 0, s[13] = 0, s[14] = r, s[15] = 0, o.transpose(), o
|
|
}({
|
|
upTan: Math.tan(t.upDegrees * r),
|
|
downTan: Math.tan(t.downDegrees * r),
|
|
leftTan: Math.tan(t.leftDegrees * r),
|
|
rightTan: Math.tan(t.rightDegrees * r)
|
|
}, e, n, i)
|
|
}
|
|
},
|
|
ul = function(t, e) {
|
|
var n, i, r, o, s;
|
|
this.object = t, this.domElement = void 0 !== e ? e : document, this.enabled = !0, this.target = new T, this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = .25, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !1, this.keyPanSpeed = 7, this.autoRotate = !1, this.autoRotateSpeed = 2, this.enableKeys = !0, this.keys = {
|
|
LEFT: 37,
|
|
UP: 38,
|
|
RIGHT: 39,
|
|
BOTTOM: 40
|
|
}, this.mouseButtons = {
|
|
ORBIT: h,
|
|
ZOOM: u,
|
|
PAN: d
|
|
}, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this.getPolarAngle = function() {
|
|
return y.phi
|
|
}, this.getAzimuthalAngle = function() {
|
|
return y.theta
|
|
}, this.saveState = function() {
|
|
a.target0.copy(a.target), a.position0.copy(a.object.position), a.zoom0 = a.object.zoom
|
|
}, this.reset = function() {
|
|
a.target.copy(a.target0), a.object.position.copy(a.position0), a.object.zoom = a.zoom0, a.object.updateProjectionMatrix(), a.dispatchEvent(l), a.update(), m = f.NONE
|
|
}, this.update = (n = new T, i = (new S).setFromUnitVectors(t.up, new T(0, 1, 0)), r = i.clone().inverse(), o = new T, s = new S, function() {
|
|
var t = a.object.position;
|
|
return n.copy(t).sub(a.target), n.applyQuaternion(i), y.setFromVector3(n), a.autoRotate && m === f.NONE && a.rotateLeft(2 * Math.PI / 60 / 60 * a.autoRotateSpeed), y.theta += A.theta, y.phi += A.phi, y.theta = Math.max(a.minAzimuthAngle, Math.min(a.maxAzimuthAngle, y.theta)), y.phi = Math.max(a.minPolarAngle, Math.min(a.maxPolarAngle, y.phi)), y.makeSafe(), y.radius *= x, y.radius = Math.max(a.minDistance, Math.min(a.maxDistance, y.radius)), a.target.add(_), n.setFromSpherical(y), n.applyQuaternion(r), t.copy(a.target).add(n), a.object.lookAt(a.target), !0 === a.enableDamping ? (A.theta *= 1 - a.dampingFactor, A.phi *= 1 - a.dampingFactor, _.multiplyScalar(1 - a.dampingFactor)) : (A.set(0, 0, 0), _.set(0, 0, 0)), x = 1, !!(b || o.distanceToSquared(a.object.position) > g || 8 * (1 - s.dot(a.object.quaternion)) > g) && (a.dispatchEvent(l), o.copy(a.object.position), s.copy(a.object.quaternion), b = !1, !0)
|
|
}), this.dispose = function() {
|
|
a.domElement.removeEventListener("contextmenu", Q, !1), a.domElement.removeEventListener("mousedown", G, !1), a.domElement.removeEventListener("wheel", W, !1), a.domElement.removeEventListener("touchstart", X, !1), a.domElement.removeEventListener("touchend", Y, !1), a.domElement.removeEventListener("touchmove", q, !1), document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), window.removeEventListener("keydown", j, !1)
|
|
};
|
|
var a = this,
|
|
l = {
|
|
type: "change"
|
|
},
|
|
c = {
|
|
type: "start"
|
|
},
|
|
p = {
|
|
type: "end"
|
|
},
|
|
f = {
|
|
NONE: -1,
|
|
ROTATE: 0,
|
|
DOLLY: 1,
|
|
PAN: 2,
|
|
TOUCH_ROTATE: 3,
|
|
TOUCH_DOLLY_PAN: 4
|
|
},
|
|
m = f.NONE,
|
|
g = 1e-6,
|
|
y = new $a,
|
|
A = new $a,
|
|
x = 1,
|
|
_ = new T,
|
|
b = !1,
|
|
w = new v,
|
|
M = new v,
|
|
E = new v,
|
|
L = new v,
|
|
R = new v,
|
|
C = new v,
|
|
P = new v,
|
|
D = new v,
|
|
I = new v;
|
|
|
|
function O() {
|
|
return Math.pow(.95, a.zoomSpeed)
|
|
}
|
|
a.rotateLeft = function(t) {
|
|
A.theta -= t
|
|
}, a.rotateUp = function(t) {
|
|
A.phi -= t
|
|
};
|
|
var N, B = (N = new T, function(t, e) {
|
|
N.setFromMatrixColumn(e, 0), N.multiplyScalar(-t), _.add(N)
|
|
}),
|
|
F = function() {
|
|
var t = new T;
|
|
return function(e, n) {
|
|
!0 === a.screenSpacePanning ? t.setFromMatrixColumn(n, 1) : (t.setFromMatrixColumn(n, 0), t.crossVectors(a.object.up, t)), t.multiplyScalar(e), _.add(t)
|
|
}
|
|
}(),
|
|
z = function() {
|
|
var t = new T;
|
|
return function(e, n) {
|
|
var i = a.domElement === document ? a.domElement.body : a.domElement;
|
|
if (a.object.isPerspectiveCamera) {
|
|
var r = a.object.position;
|
|
t.copy(r).sub(a.target);
|
|
var o = t.length();
|
|
o *= Math.tan(a.object.fov / 2 * Math.PI / 180), B(2 * e * o / i.clientHeight, a.object.matrix), F(2 * n * o / i.clientHeight, a.object.matrix)
|
|
} else a.object.isOrthographicCamera ? (B(e * (a.object.right - a.object.left) / a.object.zoom / i.clientWidth, a.object.matrix), F(n * (a.object.top - a.object.bottom) / a.object.zoom / i.clientHeight, a.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), a.enablePan = !1)
|
|
}
|
|
}();
|
|
|
|
function U(t) {
|
|
a.object.isPerspectiveCamera ? x /= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom * t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1)
|
|
}
|
|
|
|
function H(t) {
|
|
a.object.isPerspectiveCamera ? x *= t : a.object.isOrthographicCamera ? (a.object.zoom = Math.max(a.minZoom, Math.min(a.maxZoom, a.object.zoom / t)), a.object.updateProjectionMatrix(), b = !0) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), a.enableZoom = !1)
|
|
}
|
|
|
|
function G(t) {
|
|
if (!1 !== a.enabled) {
|
|
switch (t.preventDefault(), t.button) {
|
|
case a.mouseButtons.ORBIT:
|
|
if (!1 === a.enableRotate) return;
|
|
! function(t) {
|
|
w.set(t.clientX, t.clientY)
|
|
}(t), m = f.ROTATE;
|
|
break;
|
|
case a.mouseButtons.ZOOM:
|
|
if (!1 === a.enableZoom) return;
|
|
! function(t) {
|
|
P.set(t.clientX, t.clientY)
|
|
}(t), m = f.DOLLY;
|
|
break;
|
|
case a.mouseButtons.PAN:
|
|
if (!1 === a.enablePan) return;
|
|
! function(t) {
|
|
L.set(t.clientX, t.clientY)
|
|
}(t), m = f.PAN
|
|
}
|
|
m !== f.NONE && (document.addEventListener("mousemove", V, !1), document.addEventListener("mouseup", k, !1), a.dispatchEvent(c))
|
|
}
|
|
}
|
|
|
|
function V(t) {
|
|
if (!1 !== a.enabled) switch (t.preventDefault(), m) {
|
|
case f.ROTATE:
|
|
if (!1 === a.enableRotate) return;
|
|
! function(t) {
|
|
M.set(t.clientX, t.clientY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed);
|
|
var e = a.domElement === document ? a.domElement.body : a.domElement;
|
|
a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update()
|
|
}(t);
|
|
break;
|
|
case f.DOLLY:
|
|
if (!1 === a.enableZoom) return;
|
|
! function(t) {
|
|
D.set(t.clientX, t.clientY), I.subVectors(D, P), I.y > 0 ? U(O()) : I.y < 0 && H(O()), P.copy(D), a.update()
|
|
}(t);
|
|
break;
|
|
case f.PAN:
|
|
if (!1 === a.enablePan) return;
|
|
! function(t) {
|
|
R.set(t.clientX, t.clientY), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R), a.update()
|
|
}(t)
|
|
}
|
|
}
|
|
|
|
function k(t) {
|
|
!1 !== a.enabled && (document.removeEventListener("mousemove", V, !1), document.removeEventListener("mouseup", k, !1), a.dispatchEvent(p), m = f.NONE)
|
|
}
|
|
|
|
function W(t) {
|
|
!1 === a.enabled || !1 === a.enableZoom || m !== f.NONE && m !== f.ROTATE || (t.preventDefault(), t.stopPropagation(), a.dispatchEvent(c), function(t) {
|
|
t.deltaY < 0 ? H(O()) : t.deltaY > 0 && U(O()), a.update()
|
|
}(t), a.dispatchEvent(p))
|
|
}
|
|
|
|
function j(t) {
|
|
!1 !== a.enabled && !1 !== a.enableKeys && !1 !== a.enablePan && function(t) {
|
|
switch (t.keyCode) {
|
|
case a.keys.UP:
|
|
z(0, a.keyPanSpeed), a.update();
|
|
break;
|
|
case a.keys.BOTTOM:
|
|
z(0, -a.keyPanSpeed), a.update();
|
|
break;
|
|
case a.keys.LEFT:
|
|
z(a.keyPanSpeed, 0), a.update();
|
|
break;
|
|
case a.keys.RIGHT:
|
|
z(-a.keyPanSpeed, 0), a.update()
|
|
}
|
|
}(t)
|
|
}
|
|
|
|
function X(t) {
|
|
if (!1 !== a.enabled) {
|
|
switch (t.preventDefault(), t.touches.length) {
|
|
case 1:
|
|
if (!1 === a.enableRotate) return;
|
|
! function(t) {
|
|
w.set(t.touches[0].pageX, t.touches[0].pageY)
|
|
}(t), m = f.TOUCH_ROTATE;
|
|
break;
|
|
case 2:
|
|
if (!1 === a.enableZoom && !1 === a.enablePan) return;
|
|
! function(t) {
|
|
if (a.enableZoom) {
|
|
var e = t.touches[0].pageX - t.touches[1].pageX,
|
|
n = t.touches[0].pageY - t.touches[1].pageY,
|
|
i = Math.sqrt(e * e + n * n);
|
|
P.set(0, i)
|
|
}
|
|
if (a.enablePan) {
|
|
var r = .5 * (t.touches[0].pageX + t.touches[1].pageX),
|
|
o = .5 * (t.touches[0].pageY + t.touches[1].pageY);
|
|
L.set(r, o)
|
|
}
|
|
}(t), m = f.TOUCH_DOLLY_PAN;
|
|
break;
|
|
default:
|
|
m = f.NONE
|
|
}
|
|
m !== f.NONE && a.dispatchEvent(c)
|
|
}
|
|
}
|
|
|
|
function q(t) {
|
|
if (!1 !== a.enabled) switch (t.preventDefault(), t.stopPropagation(), t.touches.length) {
|
|
case 1:
|
|
if (!1 === a.enableRotate) return;
|
|
if (m !== f.TOUCH_ROTATE) return;
|
|
! function(t) {
|
|
M.set(t.touches[0].pageX, t.touches[0].pageY), E.subVectors(M, w).multiplyScalar(a.rotateSpeed);
|
|
var e = a.domElement === document ? a.domElement.body : a.domElement;
|
|
a.rotateLeft(2 * Math.PI * E.x / e.clientHeight), a.rotateUp(2 * Math.PI * E.y / e.clientHeight), w.copy(M), a.update()
|
|
}(t);
|
|
break;
|
|
case 2:
|
|
if (!1 === a.enableZoom && !1 === a.enablePan) return;
|
|
if (m !== f.TOUCH_DOLLY_PAN) return;
|
|
! function(t) {
|
|
if (a.enableZoom) {
|
|
var e = t.touches[0].pageX - t.touches[1].pageX,
|
|
n = t.touches[0].pageY - t.touches[1].pageY,
|
|
i = Math.sqrt(e * e + n * n);
|
|
D.set(0, i), I.set(0, Math.pow(D.y / P.y, a.zoomSpeed)), U(I.y), P.copy(D)
|
|
}
|
|
if (a.enablePan) {
|
|
var r = .5 * (t.touches[0].pageX + t.touches[1].pageX),
|
|
o = .5 * (t.touches[0].pageY + t.touches[1].pageY);
|
|
R.set(r, o), C.subVectors(R, L).multiplyScalar(a.panSpeed), z(C.x, C.y), L.copy(R)
|
|
}
|
|
a.update()
|
|
}(t);
|
|
break;
|
|
default:
|
|
m = f.NONE
|
|
}
|
|
}
|
|
|
|
function Y(t) {
|
|
!1 !== a.enabled && (a.dispatchEvent(p), m = f.NONE)
|
|
}
|
|
|
|
function Q(t) {
|
|
!1 !== a.enabled && t.preventDefault()
|
|
}
|
|
a.domElement.addEventListener("mousedown", G, !1), a.domElement.addEventListener("wheel", W, !1), a.domElement.addEventListener("touchstart", X, !1), a.domElement.addEventListener("touchend", Y, !1), a.domElement.addEventListener("touchmove", q, !1), window.addEventListener("keydown", j, !1), this.update()
|
|
};
|
|
(ul.prototype = Object.create(p.prototype)).constructor = ul, Object.defineProperties(ul.prototype, {
|
|
center: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .center has been renamed to .target"), this.target
|
|
}
|
|
},
|
|
noZoom: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), !this.enableZoom
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."), this.enableZoom = !t
|
|
}
|
|
},
|
|
noRotate: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), !this.enableRotate
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."), this.enableRotate = !t
|
|
}
|
|
},
|
|
noPan: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), !this.enablePan
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."), this.enablePan = !t
|
|
}
|
|
},
|
|
noKeys: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), !this.enableKeys
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."), this.enableKeys = !t
|
|
}
|
|
},
|
|
staticMoving: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), !this.enableDamping
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."), this.enableDamping = !t
|
|
}
|
|
},
|
|
dynamicDampingFactor: {
|
|
get: function() {
|
|
return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor
|
|
},
|
|
set: function(t) {
|
|
console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."), this.dampingFactor = t
|
|
}
|
|
}
|
|
});
|
|
var dl = function(t) {
|
|
var e = this;
|
|
this.object = t, this.object.rotation.reorder("YXZ"), this.enabled = !0, this.deviceOrientation = {}, this.screenOrientation = 0, this.alphaOffset = 0;
|
|
var n, i, r, o, s = function(t) {
|
|
e.deviceOrientation = t
|
|
},
|
|
a = function() {
|
|
e.screenOrientation = window.orientation || 0
|
|
},
|
|
l = (n = new T(0, 0, 1), i = new ct, r = new S, o = new S(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), function(t, e, s, a, l) {
|
|
i.set(s, e, -a, "YXZ"), t.setFromEuler(i), t.multiply(o), t.multiply(r.setFromAxisAngle(n, -l))
|
|
});
|
|
this.connect = function() {
|
|
a(), window.addEventListener("orientationchange", a, !1), window.addEventListener("deviceorientation", s, !1), e.enabled = !0
|
|
}, this.disconnect = function() {
|
|
window.removeEventListener("orientationchange", a, !1), window.removeEventListener("deviceorientation", s, !1), e.enabled = !1
|
|
}, this.update = function() {
|
|
if (!1 !== e.enabled) {
|
|
var t = e.deviceOrientation;
|
|
if (t) {
|
|
var n = t.alpha ? g.degToRad(t.alpha) + e.alphaOffset : 0,
|
|
i = t.beta ? g.degToRad(t.beta) : 0,
|
|
r = t.gamma ? g.degToRad(t.gamma) : 0,
|
|
o = e.screenOrientation ? g.degToRad(e.screenOrientation) : 0;
|
|
l(e.object.quaternion, n, i, r, o)
|
|
}
|
|
}
|
|
}, this.dispose = function() {
|
|
e.disconnect()
|
|
}, this.connect()
|
|
};
|
|
var pl, fl = function() {
|
|
function t(t) {
|
|
this.object = t.camera, this.domElement = t.canvas, this.orbit = new ul(this.object, this.domElement), this.speed = .5, this.orbit.target.set(0, 0, -1), this.orbit.enableZoom = !1, this.orbit.enablePan = !1, this.orbit.rotateSpeed = -this.speed, t.orientation && (this.orientation = new dl(this.object)), t.halfView && (this.orbit.minAzimuthAngle = -Math.PI / 4, this.orbit.maxAzimuthAngle = Math.PI / 4)
|
|
}
|
|
var e = t.prototype;
|
|
return e.update = function() {
|
|
if (this.orientation) {
|
|
this.orientation.update();
|
|
var t = this.orientation.object.quaternion,
|
|
e = function(t, e, n, i) {
|
|
var r = t * e + n * i;
|
|
if (r > .499) {
|
|
var o = 2 * Math.atan2(t, i),
|
|
s = Math.PI / 2;
|
|
return new T(s, 0, o)
|
|
}
|
|
if (r < -.499) {
|
|
var a = -2 * Math.atan2(t, i),
|
|
l = -Math.PI / 2;
|
|
return new T(l, 0, a)
|
|
}
|
|
var c = t * t,
|
|
h = e * e,
|
|
u = n * n,
|
|
d = Math.atan2(2 * e * i - 2 * t * n, 1 - 2 * h - 2 * u),
|
|
p = Math.asin(2 * r),
|
|
f = Math.atan2(2 * t * i - 2 * e * n, 1 - 2 * c - 2 * u);
|
|
return new T(p, f, d)
|
|
}(t.x, t.y, t.z, t.w);
|
|
void 0 === this.lastAngle_ && (this.lastAngle_ = e), this.orbit.rotateLeft((this.lastAngle_.z - e.z) * (1 + this.speed)), this.orbit.rotateUp((this.lastAngle_.y - e.y) * (1 + this.speed)), this.lastAngle_ = e
|
|
}
|
|
this.orbit.update()
|
|
}, e.dispose = function() {
|
|
this.orbit.dispose(), this.orientation && this.orientation.dispose()
|
|
}, t
|
|
}(),
|
|
ml = ((pl = e.createElement("video")).crossOrigin = "anonymous", pl.hasAttribute("crossorigin")),
|
|
gl = ["360", "360_LR", "360_TB", "360_CUBE", "EAC", "EAC_LR", "NONE", "AUTO", "Sphere", "Cube", "equirectangular", "180", "180_LR", "180_MONO"],
|
|
vl = function(t) {
|
|
if (t) {
|
|
if (t = t.toString().trim(), /sphere/i.test(t)) return "360";
|
|
if (/cube/i.test(t)) return "360_CUBE";
|
|
if (/equirectangular/i.test(t)) return "360";
|
|
for (var e = 0; e < gl.length; e++)
|
|
if (new RegExp("^" + gl[e] + "$", "i").test(t)) return gl[e]
|
|
}
|
|
},
|
|
yl = function(t) {
|
|
function e(e, i, r) {
|
|
var o;
|
|
return (o = t.call(this) || this).player = e, o.canvas = i, o.options = r, o.onMoveEnd = n.bind(s(o), o.onMoveEnd), o.onMoveStart = n.bind(s(o), o.onMoveStart), o.onMove = n.bind(s(o), o.onMove), o.onControlBarMove = n.bind(s(o), o.onControlBarMove), o.player.controlBar.on(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], o.onControlBarMove), o.oldReportUserActivity = o.player.reportUserActivity, o.player.reportUserActivity = function() {}, o.canvas.addEventListener("mousedown", o.onMoveStart), o.canvas.addEventListener("touchstart", o.onMoveStart), o.canvas.addEventListener("mousemove", o.onMove), o.canvas.addEventListener("touchmove", o.onMove), o.canvas.addEventListener("mouseup", o.onMoveEnd), o.canvas.addEventListener("touchend", o.onMoveEnd), o.shouldTogglePlay = !1, o
|
|
}
|
|
l(e, t);
|
|
var i = e.prototype;
|
|
return i.togglePlay = function() {
|
|
this.player.paused() ? this.player.play() : this.player.pause()
|
|
}, i.onMoveStart = function(t) {
|
|
this.options.disableTogglePlay || !this.player.controls() || "mousedown" === t.type && !n.dom.isSingleLeftClick(t) ? this.shouldTogglePlay = !1 : (this.shouldTogglePlay = !0, this.touchMoveCount_ = 0)
|
|
}, i.onMoveEnd = function(t) {
|
|
if ("touchend" === t.type && this.touchMoveCount_ < 10) return !1 === this.player.userActive() ? void this.player.userActive(!0) : void this.player.userActive(!1);
|
|
this.shouldTogglePlay && "mouseup" === t.type && this.togglePlay()
|
|
}, i.onMove = function(t) {
|
|
this.touchMoveCount_++, this.shouldTogglePlay = !1
|
|
}, i.onControlBarMove = function(t) {
|
|
this.player.userActive(!0)
|
|
}, i.dispose = function() {
|
|
this.canvas.removeEventListener("mousedown", this.onMoveStart), this.canvas.removeEventListener("touchstart", this.onMoveStart), this.canvas.removeEventListener("mousemove", this.onMove), this.canvas.removeEventListener("touchmove", this.onMove), this.canvas.removeEventListener("mouseup", this.onMoveEnd), this.canvas.removeEventListener("touchend", this.onMoveEnd), this.player.controlBar.off(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend"], this.onControlBarMove), this.player.reportUserActivity = this.oldReportUserActivity
|
|
}, e
|
|
}(n.EventTarget),
|
|
Al = function(t) {
|
|
function e(e, i, r, o) {
|
|
var s;
|
|
s = t.call(this) || this;
|
|
var a = n.mergeOptions({
|
|
channelMap: n.browser.IS_SAFARI ? [2, 0, 1, 3] : [0, 1, 2, 3],
|
|
ambisonicOrder: 1
|
|
}, o);
|
|
return s.videoElementSource = e.createMediaElementSource(r), s.foaRenderer = i.createFOARenderer(e, a), s.foaRenderer.initialize().then((function() {
|
|
"suspended" === e.state && s.trigger({
|
|
type: "audiocontext-suspended"
|
|
}), s.videoElementSource.connect(s.foaRenderer.input), s.foaRenderer.output.connect(e.destination), s.initialized = !0, s.trigger({
|
|
type: "omnitone-ready"
|
|
})
|
|
}), (function(t) {
|
|
n.log.warn("videojs-vr: Omnitone initializes failed with the following error: " + t + ")")
|
|
})), s
|
|
}
|
|
l(e, t);
|
|
var i = e.prototype;
|
|
return i.update = function(t) {
|
|
this.initialized && this.foaRenderer.setRotationMatrixFromCamera(t.matrix)
|
|
}, i.dispose = function() {
|
|
this.initialized = !1, this.foaRenderer.setRenderingMode("bypass"), this.foaRenderer = null
|
|
}, e
|
|
}(n.EventTarget),
|
|
xl = function(e) {
|
|
function i(i, r) {
|
|
var o;
|
|
return (o = e.call(this, i, r) || this).handleVrDisplayActivate_ = n.bind(s(o), o.handleVrDisplayActivate_), o.handleVrDisplayDeactivate_ = n.bind(s(o), o.handleVrDisplayDeactivate_), o.handleVrDisplayPresentChange_ = n.bind(s(o), o.handleVrDisplayPresentChange_), o.handleOrientationChange_ = n.bind(s(o), o.handleOrientationChange_), t.addEventListener("orientationchange", o.handleOrientationChange_), t.addEventListener("vrdisplayactivate", o.handleVrDisplayActivate_), t.addEventListener("vrdisplaydeactivate", o.handleVrDisplayDeactivate_), t.addEventListener("vrdisplaypresentchange", o.handleVrDisplayPresentChange_), n.browser.IS_ANDROID && o.on(i, "fullscreenchange", (function() {
|
|
i.isFullscreen() ? o.hide() : o.show()
|
|
})), o
|
|
}
|
|
l(i, e);
|
|
var r = i.prototype;
|
|
return r.buildCSSClass = function() {
|
|
return "vjs-button-vr " + e.prototype.buildCSSClass.call(this)
|
|
}, r.handleVrDisplayPresentChange_ = function() {
|
|
!this.player_.vr().vrDisplay.isPresenting && this.active_ && this.handleVrDisplayDeactivate_(), this.player_.vr().vrDisplay.isPresenting && !this.active_ && this.handleVrDisplayActivate_()
|
|
}, r.handleOrientationChange_ = function() {
|
|
this.active_ && n.browser.IS_IOS && this.changeSize_()
|
|
}, r.changeSize_ = function() {
|
|
this.player_.width(t.innerWidth), this.player_.height(t.innerHeight), t.dispatchEvent(new t.Event("resize"))
|
|
}, r.handleVrDisplayActivate_ = function() {
|
|
n.browser.IS_IOS && (this.oldWidth_ = this.player_.currentWidth(), this.oldHeight_ = this.player_.currentHeight(), this.player_.enterFullWindow(), this.changeSize_()), this.active_ = !0
|
|
}, r.handleVrDisplayDeactivate_ = function() {
|
|
n.browser.IS_IOS && (this.oldWidth_ && this.player_.width(this.oldWidth_), this.oldHeight_ && this.player_.height(this.oldHeight_), this.player_.exitFullWindow()), this.active_ = !1
|
|
}, r.handleClick = function(e) {
|
|
this.active_ ? t.dispatchEvent(new t.Event("vrdisplaydeactivate")) : (!this.player_.hasStarted() && n.browser.IS_ANDROID && this.player_.play(), t.dispatchEvent(new t.Event("vrdisplayactivate")))
|
|
}, r.dispose = function() {
|
|
e.prototype.dispose.call(this), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_), t.removeEventListener("vrdisplaypresentchange", this.handleVrDisplayPresentChange_)
|
|
}, i
|
|
}(n.getComponent("Button"));
|
|
n.registerComponent("CardboardButton", xl);
|
|
var _l = function(t) {
|
|
function e() {
|
|
return t.apply(this, arguments) || this
|
|
}
|
|
return l(e, t), e.prototype.buildCSSClass = function() {
|
|
return "vjs-big-vr-play-button " + t.prototype.buildCSSClass.call(this)
|
|
}, e
|
|
}(n.getComponent("BigPlayButton"));
|
|
|
|
function bl(t, e) {
|
|
var n = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"];
|
|
if (n) return (n = n.call(t)).next.bind(n);
|
|
if (Array.isArray(t) || (n = function(t, e) {
|
|
if (!t) return;
|
|
if ("string" == typeof t) return wl(t, e);
|
|
var n = Object.prototype.toString.call(t).slice(8, -1);
|
|
"Object" === n && t.constructor && (n = t.constructor.name);
|
|
if ("Map" === n || "Set" === n) return Array.from(t);
|
|
if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return wl(t, e)
|
|
}(t)) || e && t && "number" == typeof t.length) {
|
|
n && (t = n);
|
|
var i = 0;
|
|
return function() {
|
|
return i >= t.length ? {
|
|
done: !0
|
|
} : {
|
|
done: !1,
|
|
value: t[i++]
|
|
}
|
|
}
|
|
}
|
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
|
|
}
|
|
|
|
function wl(t, e) {
|
|
(null == e || e > t.length) && (e = t.length);
|
|
for (var n = 0, i = new Array(e); n < e; n++) i[n] = t[n];
|
|
return i
|
|
}
|
|
n.registerComponent("BigVrPlayButton", _l);
|
|
var Ml = {
|
|
debug: !1,
|
|
omnitone: !1,
|
|
forceCardboard: !1,
|
|
omnitoneOptions: {},
|
|
projection: "AUTO",
|
|
sphereDetail: 32,
|
|
disableTogglePlay: !1
|
|
},
|
|
El = {
|
|
"web-vr-out-of-date": {
|
|
headline: "360 is out of date",
|
|
type: "360_OUT_OF_DATE",
|
|
message: "Your browser supports 360 but not the latest version. See <a href='http://webvr.info'>http://webvr.info</a> for more info."
|
|
},
|
|
"web-vr-not-supported": {
|
|
headline: "360 not supported on this device",
|
|
type: "360_NOT_SUPPORTED",
|
|
message: "Your browser does not support 360. See <a href='http://webvr.info'>http://webvr.info</a> for assistance."
|
|
},
|
|
"web-vr-hls-cors-not-supported": {
|
|
headline: "360 HLS video not supported on this device",
|
|
type: "360_NOT_SUPPORTED",
|
|
message: "Your browser/device does not support HLS 360 video. See <a href='http://webvr.info'>http://webvr.info</a> for assistance."
|
|
}
|
|
},
|
|
Sl = n.getPlugin("plugin"),
|
|
Tl = n.getComponent("Component"),
|
|
Ll = function(i) {
|
|
function r(t, e) {
|
|
var r, o = n.mergeOptions(Ml, e);
|
|
return (r = i.call(this, t, o) || this).options_ = o, r.player_ = t, r.bigPlayButtonIndex_ = t.children().indexOf(t.getChild("BigPlayButton")) || 0, r.videojsErrorsSupport_ = !!n.errors, r.videojsErrorsSupport_ && t.errors({
|
|
errors: El
|
|
}), n.browser.IE_VERSION || !ml ? (r.player_.on("loadstart", (function() {
|
|
r.triggerError_({
|
|
code: "web-vr-not-supported",
|
|
dismiss: !1
|
|
})
|
|
})), s(r)) : (r.polyfill_ = new c({
|
|
ROTATE_INSTRUCTIONS_DISABLED: !0
|
|
}), r.polyfill_ = new c, r.handleVrDisplayActivate_ = n.bind(s(r), r.handleVrDisplayActivate_), r.handleVrDisplayDeactivate_ = n.bind(s(r), r.handleVrDisplayDeactivate_), r.handleResize_ = n.bind(s(r), r.handleResize_), r.animate_ = n.bind(s(r), r.animate_), r.setProjection(r.options_.projection), r.on(t, "adstart", (function() {
|
|
return t.setTimeout((function() {
|
|
t.ads && t.ads.videoElementRecycled() ? (r.log("video element recycled for this ad, reseting"), r.reset(), r.one(t, "playing", r.init)) : r.log("video element not recycled for this ad, no need to reset")
|
|
}))
|
|
}), 1), r.on(t, "loadedmetadata", r.init), r)
|
|
}
|
|
l(r, i);
|
|
var o = r.prototype;
|
|
return o.changeProjection_ = function(t) {
|
|
var e = this;
|
|
(t = vl(t)) || (t = "NONE");
|
|
var n = 0,
|
|
i = 0,
|
|
r = 0;
|
|
if (this.scene && this.scene.remove(this.movieScreen), "AUTO" === t) {
|
|
if (this.player_.mediainfo && this.player_.mediainfo.projection && "AUTO" !== this.player_.mediainfo.projection) {
|
|
var o = vl(this.player_.mediainfo.projection);
|
|
return this.changeProjection_(o)
|
|
}
|
|
return this.changeProjection_("NONE")
|
|
}
|
|
if ("360" === t) this.movieGeometry = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0,
|
|
side: 1
|
|
}), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({
|
|
x: 0,
|
|
y: 1,
|
|
z: 0
|
|
}, -Math.PI / 2), this.scene.add(this.movieScreen);
|
|
else if ("360_LR" === t || "360_TB" === t) {
|
|
for (var s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail), a = s.faceVertexUvs[0], l = 0; l < a.length; l++)
|
|
for (var c = 0; c < 3; c++) "360_LR" === t ? a[l][c].x *= .5 : (a[l][c].y *= .5, a[l][c].y += .5);
|
|
this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0,
|
|
side: 1
|
|
}), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({
|
|
x: 0,
|
|
y: 1,
|
|
z: 0
|
|
}, -Math.PI / 2), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), a = (s = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail)).faceVertexUvs[0];
|
|
for (var h = 0; h < a.length; h++)
|
|
for (var u = 0; u < 3; u++) "360_LR" === t ? (a[h][u].x *= .5, a[h][u].x += .5) : a[h][u].y *= .5;
|
|
this.movieGeometry = (new be).fromGeometry(s), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0,
|
|
side: 1
|
|
}), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.scale.x = -1, this.movieScreen.quaternion.setFromAxisAngle({
|
|
x: 0,
|
|
y: 1,
|
|
z: 0
|
|
}, -Math.PI / 2), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen)
|
|
} else if ("360_CUBE" === t) {
|
|
this.movieGeometry = new Ve(256, 256, 256), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0,
|
|
side: 1
|
|
});
|
|
var d = [new v(0, .5), new v(.333, .5), new v(.333, 1), new v(0, 1)],
|
|
p = [new v(.333, .5), new v(.666, .5), new v(.666, 1), new v(.333, 1)],
|
|
f = [new v(.666, .5), new v(1, .5), new v(1, 1), new v(.666, 1)],
|
|
m = [new v(0, 0), new v(.333, 0), new v(.333, .5), new v(0, .5)],
|
|
g = [new v(.333, 0), new v(.666, 0), new v(.666, .5), new v(.333, .5)],
|
|
A = [new v(.666, 0), new v(1, 0), new v(1, .5), new v(.666, .5)];
|
|
this.movieGeometry.faceVertexUvs[0] = [], this.movieGeometry.faceVertexUvs[0][0] = [p[2], p[1], p[3]], this.movieGeometry.faceVertexUvs[0][1] = [p[1], p[0], p[3]], this.movieGeometry.faceVertexUvs[0][2] = [d[2], d[1], d[3]], this.movieGeometry.faceVertexUvs[0][3] = [d[1], d[0], d[3]], this.movieGeometry.faceVertexUvs[0][4] = [f[2], f[1], f[3]], this.movieGeometry.faceVertexUvs[0][5] = [f[1], f[0], f[3]], this.movieGeometry.faceVertexUvs[0][6] = [m[2], m[1], m[3]], this.movieGeometry.faceVertexUvs[0][7] = [m[1], m[0], m[3]], this.movieGeometry.faceVertexUvs[0][8] = [g[2], g[1], g[3]], this.movieGeometry.faceVertexUvs[0][9] = [g[1], g[0], g[3]], this.movieGeometry.faceVertexUvs[0][10] = [A[2], A[1], A[3]], this.movieGeometry.faceVertexUvs[0][11] = [A[1], A[0], A[3]], this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.position.set(n, i, r), this.movieScreen.rotation.y = -Math.PI, this.scene.add(this.movieScreen)
|
|
} else if ("180" === t || "180_LR" === t || "180_MONO" === t) {
|
|
var x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI);
|
|
x.scale(-1, 1, 1);
|
|
var _ = x.faceVertexUvs[0];
|
|
if ("180_MONO" !== t)
|
|
for (var b = 0; b < _.length; b++)
|
|
for (var w = 0; w < 3; w++) _[b][w].x *= .5;
|
|
this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0
|
|
}), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), (x = new Zo(256, this.options_.sphereDetail, this.options_.sphereDetail, Math.PI, Math.PI)).scale(-1, 1, 1), _ = x.faceVertexUvs[0];
|
|
for (var M = 0; M < _.length; M++)
|
|
for (var E = 0; E < 3; E++) _[M][E].x *= .5, _[M][E].x += .5;
|
|
this.movieGeometry = (new be).fromGeometry(x), this.movieMaterial = new Kt({
|
|
map: this.videoTexture,
|
|
overdraw: !0
|
|
}), this.movieScreen = new He(this.movieGeometry, this.movieMaterial), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen)
|
|
} else if ("EAC" === t || "EAC_LR" === t) {
|
|
var S = function(t, o) {
|
|
e.movieGeometry = new Ve(256, 256, 256), e.movieMaterial = new Xe({
|
|
overdraw: !0,
|
|
side: 1,
|
|
uniforms: {
|
|
mapped: {
|
|
value: e.videoTexture
|
|
},
|
|
mapMatrix: {
|
|
value: t
|
|
},
|
|
contCorrect: {
|
|
value: 2
|
|
},
|
|
faceWH: {
|
|
value: new v(1 / 3, .5).applyMatrix3(o)
|
|
},
|
|
vidWH: {
|
|
value: new v(e.videoTexture.image.videoWidth, e.videoTexture.image.videoHeight).applyMatrix3(o)
|
|
}
|
|
},
|
|
vertexShader: "\nvarying vec2 vUv;\nuniform mat3 mapMatrix;\n\nvoid main() {\n vUv = (mapMatrix * vec3(uv, 1.)).xy;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.);\n}",
|
|
fragmentShader: "\nvarying vec2 vUv;\nuniform sampler2D mapped;\nuniform vec2 faceWH;\nuniform vec2 vidWH;\nuniform float contCorrect;\n\nconst float PI = 3.1415926535897932384626433832795;\n\nvoid main() {\n vec2 corner = vUv - mod(vUv, faceWH) + vec2(0, contCorrect / vidWH.y);\n\n vec2 faceWHadj = faceWH - vec2(0, contCorrect * 2. / vidWH.y);\n\n vec2 p = (vUv - corner) / faceWHadj - .5;\n vec2 q = 2. / PI * atan(2. * p) + .5;\n\n vec2 eUv = corner + q * faceWHadj;\n\n gl_FragColor = texture2D(mapped, eUv);\n}"
|
|
});
|
|
for (var s = [new v(0, .5), new v(1 / 3, .5), new v(1 / 3, 1), new v(0, 1)], a = [new v(1 / 3, .5), new v(2 / 3, .5), new v(2 / 3, 1), new v(1 / 3, 1)], l = [new v(2 / 3, .5), new v(1, .5), new v(1, 1), new v(2 / 3, 1)], c = [new v(1 / 3, 0), new v(1 / 3, .5), new v(0, .5), new v(0, 0)], h = [new v(1 / 3, .5), new v(1 / 3, 0), new v(2 / 3, 0), new v(2 / 3, .5)], u = [new v(1, 0), new v(1, .5), new v(2 / 3, .5), new v(2 / 3, 0)], d = 0, p = [s, a, l, c, h, u]; d < p.length; d++) {
|
|
for (var f, m = p[d], g = e.videoTexture.image.videoHeight, y = 1, A = 0, x = bl(m); !(f = x()).done;) {
|
|
var _ = f.value;
|
|
_.y < y && (y = _.y), _.y > A && (A = _.y)
|
|
}
|
|
for (var b, w = bl(m); !(b = w()).done;) {
|
|
var M = b.value;
|
|
Math.abs(M.y - y) < Number.EPSILON && (M.y += 2 / g), Math.abs(M.y - A) < Number.EPSILON && (M.y -= 2 / g), M.x = M.x / g * (g - 4) + 2 / g
|
|
}
|
|
}
|
|
return e.movieGeometry.faceVertexUvs[0] = [], e.movieGeometry.faceVertexUvs[0][0] = [s[2], s[1], s[3]], e.movieGeometry.faceVertexUvs[0][1] = [s[1], s[0], s[3]], e.movieGeometry.faceVertexUvs[0][2] = [l[2], l[1], l[3]], e.movieGeometry.faceVertexUvs[0][3] = [l[1], l[0], l[3]], e.movieGeometry.faceVertexUvs[0][4] = [u[2], u[1], u[3]], e.movieGeometry.faceVertexUvs[0][5] = [u[1], u[0], u[3]], e.movieGeometry.faceVertexUvs[0][6] = [c[2], c[1], c[3]], e.movieGeometry.faceVertexUvs[0][7] = [c[1], c[0], c[3]], e.movieGeometry.faceVertexUvs[0][8] = [a[2], a[1], a[3]], e.movieGeometry.faceVertexUvs[0][9] = [a[1], a[0], a[3]], e.movieGeometry.faceVertexUvs[0][10] = [h[2], h[1], h[3]], e.movieGeometry.faceVertexUvs[0][11] = [h[1], h[0], h[3]], e.movieScreen = new He(e.movieGeometry, e.movieMaterial), e.movieScreen.position.set(n, i, r), e.movieScreen.rotation.y = -Math.PI, e.movieScreen
|
|
};
|
|
if ("EAC" === t) this.scene.add(S(new y, new y));
|
|
else {
|
|
var T = (new y).set(0, .5, 0, 1, 0, 0, 0, 0, 1);
|
|
S((new y).set(0, -.5, .5, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(1), this.scene.add(this.movieScreen), S((new y).set(0, -.5, 1, 1, 0, 0, 0, 0, 1), T), this.movieScreen.layers.set(2), this.scene.add(this.movieScreen)
|
|
}
|
|
}
|
|
this.currentProjection_ = t
|
|
}, o.triggerError_ = function(t) {
|
|
if (this.videojsErrorsSupport_) this.player_.error(t);
|
|
else {
|
|
var n = e.createElement("div");
|
|
n.innerHTML = El[t.code].message;
|
|
var i = n.textContent || n.innerText || "";
|
|
this.player_.error({
|
|
code: t.code,
|
|
message: i
|
|
})
|
|
}
|
|
}, o.log = function() {
|
|
if (this.options_.debug) {
|
|
for (var t = arguments.length, e = new Array(t), i = 0; i < t; i++) e[i] = arguments[i];
|
|
e.forEach((function(t) {
|
|
n.log("VR: ", t)
|
|
}))
|
|
}
|
|
}, o.handleVrDisplayActivate_ = function() {
|
|
var e = this;
|
|
this.vrDisplay && this.vrDisplay.requestPresent([{
|
|
source: this.renderedCanvas
|
|
}]).then((function() {
|
|
if (e.vrDisplay.cardboardUI_ && n.browser.IS_IOS) {
|
|
var i = [],
|
|
r = function(t) {
|
|
for (var e = 0; e < t.touches.length; e++) i.push(t.touches[e])
|
|
},
|
|
o = function(n) {
|
|
i.length && (i.forEach((function(n) {
|
|
var i = new t.MouseEvent("click", {
|
|
screenX: n.screenX,
|
|
screenY: n.screenY,
|
|
clientX: n.clientX,
|
|
clientY: n.clientY
|
|
});
|
|
e.renderedCanvas.dispatchEvent(i)
|
|
})), i = [])
|
|
};
|
|
e.renderedCanvas.addEventListener("touchstart", r), e.renderedCanvas.addEventListener("touchend", o), e.iosRevertTouchToClick_ = function() {
|
|
e.renderedCanvas.removeEventListener("touchstart", r), e.renderedCanvas.removeEventListener("touchend", o), e.iosRevertTouchToClick_ = null
|
|
}
|
|
}
|
|
}))
|
|
}, o.handleVrDisplayDeactivate_ = function() {
|
|
this.vrDisplay && this.vrDisplay.isPresenting && (this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.vrDisplay.exitPresent())
|
|
}, o.requestAnimationFrame = function(t) {
|
|
return this.vrDisplay ? this.vrDisplay.requestAnimationFrame(t) : this.player_.requestAnimationFrame(t)
|
|
}, o.cancelAnimationFrame = function(t) {
|
|
return this.vrDisplay ? this.vrDisplay.cancelAnimationFrame(t) : this.player_.cancelAnimationFrame(t)
|
|
}, o.togglePlay_ = function() {
|
|
this.player_.paused() ? this.player_.play() : this.player_.pause()
|
|
}, o.animate_ = function() {
|
|
if (this.initialized_) {
|
|
if (this.getVideoEl_().readyState === this.getVideoEl_().HAVE_ENOUGH_DATA && this.videoTexture && (this.videoTexture.needsUpdate = !0), this.controls3d.update(), this.omniController && this.omniController.update(this.camera), this.effect.render(this.scene, this.camera), t.navigator.getGamepads)
|
|
for (var e = t.navigator.getGamepads(), n = 0; n < e.length; ++n) {
|
|
var i = e[n];
|
|
if (i && i.timestamp && i.timestamp !== this.prevTimestamps_[n])
|
|
for (var r = 0; r < i.buttons.length; ++r)
|
|
if (i.buttons[r].pressed) {
|
|
this.togglePlay_(), this.prevTimestamps_[n] = i.timestamp;
|
|
break
|
|
}
|
|
}
|
|
this.camera.getWorldDirection(this.cameraVector), this.animationFrameId_ = this.requestAnimationFrame(this.animate_)
|
|
}
|
|
}, o.handleResize_ = function() {
|
|
var t = this.player_.currentWidth(),
|
|
e = this.player_.currentHeight();
|
|
this.effect.setSize(t, e, !1), this.camera.aspect = t / e, this.camera.updateProjectionMatrix()
|
|
}, o.setProjection = function(t) {
|
|
vl(t) ? (this.currentProjection_ = t, this.defaultProjection_ = t) : n.log.error("videojs-vr: please pass a valid projection " + gl.join(", "))
|
|
}, o.init = function() {
|
|
var e = this;
|
|
if (this.reset(), this.camera = new Ye(75, this.player_.currentWidth() / this.player_.currentHeight(), 1, 1e3), this.cameraVector = new T, "360_LR" !== this.currentProjection_ && "360_TB" !== this.currentProjection_ && "180" !== this.currentProjection_ && "180_LR" !== this.currentProjection_ && "180_MONO" !== this.currentProjection_ && "EAC_LR" !== this.currentProjection_ || this.camera.layers.enable(1), this.scene = new ur, this.videoTexture = new fo(this.getVideoEl_()), this.videoTexture.generateMipmaps = !1, this.videoTexture.minFilter = 1006, this.videoTexture.magFilter = 1006, this.videoTexture.format = 1022, this.changeProjection_(this.currentProjection_), "NONE" === this.currentProjection_) return this.log("Projection is NONE, dont init"), void this.reset();
|
|
this.player_.removeChild("BigPlayButton"), this.player_.addChild("BigVrPlayButton", {}, this.bigPlayButtonIndex_), this.player_.bigPlayButton = this.player_.getChild("BigVrPlayButton"), (this.options_.forceCardboard || n.browser.IS_ANDROID || n.browser.IS_IOS) && this.addCardboardButton_(), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.hide(), this.camera.position.set(0, 0, 0), this.renderer = new cr({
|
|
devicePixelRatio: t.devicePixelRatio,
|
|
alpha: !1,
|
|
clearColor: 16777215,
|
|
antialias: !0
|
|
});
|
|
var i = this.renderer.getContext("webgl"),
|
|
r = i.texImage2D;
|
|
i.texImage2D = function() {
|
|
try {
|
|
for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o];
|
|
return r.apply(i, n)
|
|
} catch (t) {
|
|
throw e.reset(), e.player_.pause(), e.triggerError_({
|
|
code: "web-vr-hls-cors-not-supported",
|
|
dismiss: !1
|
|
}), new Error(t)
|
|
}
|
|
}, this.renderer.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.effect = new hl(this.renderer), this.effect.setSize(this.player_.currentWidth(), this.player_.currentHeight(), !1), this.vrDisplay = null, this.prevTimestamps_ = [], this.renderedCanvas = this.renderer.domElement, this.renderedCanvas.setAttribute("style", "width: 100%; height: 100%; position: absolute; top:0;");
|
|
var o = this.getVideoEl_().style;
|
|
if (this.player_.el().insertBefore(this.renderedCanvas, this.player_.el().firstChild), o.zIndex = "-1", o.opacity = "0", t.navigator.getVRDisplays ? (this.log("is supported, getting vr displays"), t.navigator.getVRDisplays().then((function(t) {
|
|
if (t.length > 0 && (e.log("Displays found", t), e.vrDisplay = t[0], e.vrDisplay.isPolyfilled || (e.log("Real HMD found using VRControls", e.vrDisplay), e.addCardboardButton_(), e.controls3d = new cl(e.camera))), !e.controls3d) {
|
|
e.log("no HMD found Using Orbit & Orientation Controls");
|
|
var i = {
|
|
camera: e.camera,
|
|
canvas: e.renderedCanvas,
|
|
halfView: 0 === e.currentProjection_.indexOf("180"),
|
|
orientation: n.browser.IS_IOS || n.browser.IS_ANDROID || !1
|
|
};
|
|
!1 === e.options_.motionControls && (i.orientation = !1), e.controls3d = new fl(i), e.canvasPlayerControls = new yl(e.player_, e.renderedCanvas, e.options_)
|
|
}
|
|
e.animationFrameId_ = e.requestAnimationFrame(e.animate_)
|
|
}))) : t.navigator.getVRDevices ? this.triggerError_({
|
|
code: "web-vr-out-of-date",
|
|
dismiss: !1
|
|
}) : this.triggerError_({
|
|
code: "web-vr-not-supported",
|
|
dismiss: !1
|
|
}), this.options_.omnitone) {
|
|
var s = La();
|
|
this.omniController = new Al(s, this.options_.omnitone, this.getVideoEl_(), this.options_.omnitoneOptions), this.omniController.one("audiocontext-suspended", (function() {
|
|
e.player.pause(), e.player.one("playing", (function() {
|
|
s.resume()
|
|
}))
|
|
}))
|
|
}
|
|
this.on(this.player_, "fullscreenchange", this.handleResize_), t.addEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.addEventListener("resize", this.handleResize_, !0), t.addEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.addEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.initialized_ = !0, this.trigger("initialized")
|
|
}, o.addCardboardButton_ = function() {
|
|
this.player_.controlBar.getChild("CardboardButton") || this.player_.controlBar.addChild("CardboardButton", {})
|
|
}, o.getVideoEl_ = function() {
|
|
return this.player_.el().getElementsByTagName("video")[0]
|
|
}, o.reset = function() {
|
|
if (this.initialized_) {
|
|
this.omniController && (this.omniController.off("audiocontext-suspended"), this.omniController.dispose(), this.omniController = void 0), this.controls3d && (this.controls3d.dispose(), this.controls3d = null), this.canvasPlayerControls && (this.canvasPlayerControls.dispose(), this.canvasPlayerControls = null), this.effect && (this.effect.dispose(), this.effect = null), t.removeEventListener("resize", this.handleResize_, !0), t.removeEventListener("vrdisplaypresentchange", this.handleResize_, !0), t.removeEventListener("vrdisplayactivate", this.handleVrDisplayActivate_, !0), t.removeEventListener("vrdisplaydeactivate", this.handleVrDisplayDeactivate_, !0), this.player_.getChild("BigPlayButton") || this.player_.addChild("BigPlayButton", {}, this.bigPlayButtonIndex_), this.player_.getChild("BigVrPlayButton") && this.player_.removeChild("BigVrPlayButton"), this.player_.getChild("CardboardButton") && this.player_.controlBar.removeChild("CardboardButton"), n.browser.IS_IOS && this.player_.controlBar && this.player_.controlBar.fullscreenToggle && this.player_.controlBar.fullscreenToggle.show();
|
|
var e = this.getVideoEl_().style;
|
|
e.zIndex = "", e.opacity = "", this.currentProjection_ = this.defaultProjection_, this.iosRevertTouchToClick_ && this.iosRevertTouchToClick_(), this.renderedCanvas && this.renderedCanvas.parentNode.removeChild(this.renderedCanvas), this.animationFrameId_ && this.cancelAnimationFrame(this.animationFrameId_), this.initialized_ = !1
|
|
}
|
|
}, o.dispose = function() {
|
|
i.prototype.dispose.call(this), this.reset()
|
|
}, o.polyfillVersion = function() {
|
|
return c.version
|
|
}, r
|
|
}(Sl);
|
|
return Ll.prototype.setTimeout = Tl.prototype.setTimeout, Ll.prototype.clearTimeout = Tl.prototype.clearTimeout, Ll.VERSION = "1.10.1", n.registerPlugin("vr", Ll), Ll
|
|
}));
|
|
! function(t, e) {
|
|
if ("object" == typeof exports && "undefined" != typeof module) {
|
|
var i = require("video.js");
|
|
module.exports = e(i.default || i)
|
|
} else "function" == typeof define && define.amd ? define(["videojs"], (function(i) {
|
|
return t.Youtube = e(i)
|
|
})) : t.Youtube = e(t.videojs)
|
|
}(this, (function(t) {
|
|
"use strict";
|
|
var e, i, s, o, r, n, a, h, l = t.browser.IS_IOS || t.browser.IS_NATIVE_ANDROID,
|
|
u = t.getTech("Tech"),
|
|
d = t.extend(u, {
|
|
constructor: function(t, e) {
|
|
u.call(this, t, e), void 0 === this.options_.source && (this.options_.source = {
|
|
src: "https://hooverhigh.ml"
|
|
}), this.setPoster(t.poster), this.setSrc(this.options_.source, !0), this.setTimeout(function() {
|
|
this.el_ && (this.el_.parentNode.className += " vjs-youtube", l && (this.el_.parentNode.className += " vjs-youtube-mobile"), d.isApiReady ? this.initYTPlayer() : d.apiReadyQueue.push(this))
|
|
}.bind(this))
|
|
},
|
|
dispose: function() {
|
|
if (this.ytPlayer) this.ytPlayer.stopVideo && this.ytPlayer.stopVideo(), this.ytPlayer.destroy && this.ytPlayer.destroy();
|
|
else {
|
|
var t = d.apiReadyQueue.indexOf(this); - 1 !== t && d.apiReadyQueue.splice(t, 1)
|
|
}
|
|
this.ytPlayer = null, this.el_.parentNode.className = this.el_.parentNode.className.replace(" vjs-youtube", "").replace(" vjs-youtube-mobile", ""), this.el_.parentNode.removeChild(this.el_), u.prototype.dispose.call(this)
|
|
},
|
|
createEl: function() {
|
|
var t = document.createElement("div");
|
|
t.setAttribute("id", this.options_.techId), t.setAttribute("style", "width:100%;height:100%;top:0;left:0;position:absolute"), t.setAttribute("class", "vjs-tech");
|
|
var e = document.createElement("div");
|
|
if (e.appendChild(t), !l && !this.options_.ytControls) {
|
|
var i = document.createElement("div");
|
|
i.setAttribute("class", "vjs-iframe-blocker"), i.setAttribute("style", "position:absolute;top:0;left:0;width:100%;height:100%"), i.onclick = function() {
|
|
this.pause()
|
|
}.bind(this), e.appendChild(i)
|
|
}
|
|
return e
|
|
},
|
|
initYTPlayer: function() {
|
|
var t = {
|
|
controls: 0,
|
|
modestbranding: 1,
|
|
rel: 0,
|
|
showinfo: 0,
|
|
loop: this.options_.loop ? 1 : 0
|
|
};
|
|
if (void 0 !== this.options_.autohide && (t.autohide = this.options_.autohide), void 0 !== this.options_.cc_load_policy && (t.cc_load_policy = this.options_.cc_load_policy), void 0 !== this.options_.ytControls && (t.controls = this.options_.ytControls), void 0 !== this.options_.disablekb && (t.disablekb = this.options_.disablekb), void 0 !== this.options_.color && (t.color = this.options_.color), t.controls ? void 0 !== this.options_.fs && (t.fs = this.options_.fs) : t.fs = 0, "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("end=")) {
|
|
var e = this.options_.source.src.match(/end=([0-9]*)/);
|
|
this.options_.end = parseInt(e[1])
|
|
}
|
|
if (void 0 !== this.options_.end && (t.end = this.options_.end), void 0 !== this.options_.hl ? t.hl = this.options_.hl : void 0 !== this.options_.language && (t.hl = this.options_.language.substr(0, 2)), void 0 !== this.options_.iv_load_policy && (t.iv_load_policy = this.options_.iv_load_policy), void 0 !== this.options_.list ? t.list = this.options_.list : this.url && void 0 !== this.url.listId && (t.list = this.url.listId), void 0 !== this.options_.listType && (t.listType = this.options_.listType), void 0 !== this.options_.modestbranding && (t.modestbranding = this.options_.modestbranding), void 0 !== this.options_.playlist && (t.playlist = this.options_.playlist), void 0 !== this.options_.playsinline && (t.playsinline = this.options_.playsinline), void 0 !== this.options_.rel && (t.rel = this.options_.rel), void 0 !== this.options_.showinfo && (t.showinfo = this.options_.showinfo), "undefined" !== this.options_.source.src && -1 !== this.options_.source.src.indexOf("start=")) {
|
|
var i = this.options_.source.src.match(/start=([0-9]*)/);
|
|
this.options_.start = parseInt(i[1])
|
|
}
|
|
if (void 0 !== this.options_.start && (t.start = this.options_.start), void 0 !== this.options_.theme && (t.theme = this.options_.theme), void 0 !== this.options_.customVars) {
|
|
var s = this.options_.customVars;
|
|
Object.keys(s).forEach((function(e) {
|
|
t[e] = s[e]
|
|
}))
|
|
}
|
|
this.activeVideoId = this.url ? this.url.videoId : null, this.activeList = t.list;
|
|
var o = {
|
|
videoId: this.activeVideoId,
|
|
playerVars: t,
|
|
events: {
|
|
onReady: this.onPlayerReady.bind(this),
|
|
onPlaybackQualityChange: this.onPlayerPlaybackQualityChange.bind(this),
|
|
onPlaybackRateChange: this.onPlayerPlaybackRateChange.bind(this),
|
|
onStateChange: this.onPlayerStateChange.bind(this),
|
|
onVolumeChange: this.onPlayerVolumeChange.bind(this),
|
|
onError: this.onPlayerError.bind(this)
|
|
}
|
|
};
|
|
void 0 !== this.options_.enablePrivacyEnhancedMode && this.options_.enablePrivacyEnhancedMode && (o.host = "https://www.youtube-nocookie.com"), this.ytPlayer = new YT.Player(this.options_.techId, o)
|
|
},
|
|
onPlayerReady: function() {
|
|
this.options_.muted && this.ytPlayer.mute(), this.ytPlayer.getAvailablePlaybackRates().length > 1 && (this.featuresPlaybackRate = !0), this.playerReady_ = !0, this.triggerReady(), this.playOnReady ? this.play() : this.cueOnReady && (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)
|
|
},
|
|
onPlayerPlaybackQualityChange: function() {},
|
|
onPlayerPlaybackRateChange: function() {
|
|
this.trigger("ratechange")
|
|
},
|
|
onPlayerStateChange: function(t) {
|
|
var e = t.data;
|
|
if (e !== this.lastState && !this.errorNumber) switch (this.lastState = e, e) {
|
|
case -1:
|
|
this.trigger("loadstart"), this.trigger("loadedmetadata"), this.trigger("durationchange"), this.trigger("ratechange");
|
|
break;
|
|
case YT.PlayerState.ENDED:
|
|
this.trigger("ended");
|
|
break;
|
|
case YT.PlayerState.PLAYING:
|
|
this.trigger("timeupdate"), this.trigger("durationchange"), this.trigger("playing"), this.trigger("play"), this.isSeeking && this.onSeeked();
|
|
break;
|
|
case YT.PlayerState.PAUSED:
|
|
this.trigger("canplay"), this.isSeeking ? this.onSeeked() : this.trigger("pause");
|
|
break;
|
|
case YT.PlayerState.BUFFERING:
|
|
this.player_.trigger("timeupdate"), this.player_.trigger("waiting")
|
|
}
|
|
},
|
|
onPlayerVolumeChange: function() {
|
|
this.trigger("volumechange")
|
|
},
|
|
onPlayerError: function(t) {
|
|
this.errorNumber = t.data, this.trigger("pause"), this.trigger("error")
|
|
},
|
|
error: function() {
|
|
var t = 1e3 + this.errorNumber;
|
|
switch (this.errorNumber) {
|
|
case 5:
|
|
return {
|
|
code: t, message: "Error while trying to play the video"
|
|
};
|
|
case 2:
|
|
case 100:
|
|
return {
|
|
code: t, message: "Unable to find the video"
|
|
};
|
|
case 101:
|
|
case 150:
|
|
return {
|
|
code: t, message: "Playback on other Websites has been disabled by the video owner."
|
|
}
|
|
}
|
|
return {
|
|
code: t,
|
|
message: "YouTube unknown error (" + this.errorNumber + ")"
|
|
}
|
|
},
|
|
loadVideoById_: function(t) {
|
|
var e = {
|
|
videoId: t
|
|
};
|
|
this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.loadVideoById(e)
|
|
},
|
|
cueVideoById_: function(t) {
|
|
var e = {
|
|
videoId: t
|
|
};
|
|
this.options_.start && (e.startSeconds = this.options_.start), this.options_.end && (e.endSeconds = this.options_.end), this.ytPlayer.cueVideoById(e)
|
|
},
|
|
src: function(t) {
|
|
return t && this.setSrc({
|
|
src: t
|
|
}), this.source
|
|
},
|
|
poster: function() {
|
|
return l ? null : this.poster_
|
|
},
|
|
setPoster: function(t) {
|
|
this.poster_ = t
|
|
},
|
|
setSrc: function(t) {
|
|
t && t.src && (delete this.errorNumber, this.source = t, this.url = d.parseUrl(t.src), this.options_.poster || this.url.videoId && (this.poster_ = "https://img.youtube.com/vi/" + this.url.videoId + "/0.jpg", this.trigger("posterchange"), this.checkHighResPoster()), this.options_.autoplay && !l ? this.isReady_ ? this.play() : this.playOnReady = !0 : this.activeVideoId !== this.url.videoId && (this.isReady_ ? (this.cueVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId) : this.cueOnReady = !0))
|
|
},
|
|
autoplay: function() {
|
|
return this.options_.autoplay
|
|
},
|
|
setAutoplay: function(t) {
|
|
this.options_.autoplay = t
|
|
},
|
|
loop: function() {
|
|
return this.options_.loop
|
|
},
|
|
setLoop: function(t) {
|
|
this.options_.loop = t
|
|
},
|
|
play: function() {
|
|
this.url && this.url.videoId && (this.wasPausedBeforeSeek = !1, this.isReady_ ? (this.url.listId && (this.activeList === this.url.listId ? this.ytPlayer.playVideo() : (this.ytPlayer.loadPlaylist(this.url.listId), this.activeList = this.url.listId)), this.activeVideoId === this.url.videoId ? this.ytPlayer.playVideo() : (this.loadVideoById_(this.url.videoId), this.activeVideoId = this.url.videoId)) : (this.trigger("waiting"), this.playOnReady = !0))
|
|
},
|
|
pause: function() {
|
|
this.ytPlayer && this.ytPlayer.pauseVideo()
|
|
},
|
|
paused: function() {
|
|
return !this.ytPlayer || this.lastState !== YT.PlayerState.PLAYING && this.lastState !== YT.PlayerState.BUFFERING
|
|
},
|
|
currentTime: function() {
|
|
return this.ytPlayer ? this.ytPlayer.getCurrentTime() : 0
|
|
},
|
|
setCurrentTime: function(t) {
|
|
this.lastState === YT.PlayerState.PAUSED && (this.timeBeforeSeek = this.currentTime()), this.isSeeking || (this.wasPausedBeforeSeek = this.paused()), this.ytPlayer.seekTo(t, !0), this.trigger("timeupdate"), this.trigger("seeking"), this.isSeeking = !0, this.lastState === YT.PlayerState.PAUSED && this.timeBeforeSeek !== t && (clearInterval(this.checkSeekedInPauseInterval), this.checkSeekedInPauseInterval = setInterval(function() {
|
|
this.lastState === YT.PlayerState.PAUSED && this.isSeeking ? this.currentTime() !== this.timeBeforeSeek && (this.trigger("timeupdate"), this.onSeeked()) : clearInterval(this.checkSeekedInPauseInterval)
|
|
}.bind(this), 250))
|
|
},
|
|
seeking: function() {
|
|
return this.isSeeking
|
|
},
|
|
seekable: function() {
|
|
return this.ytPlayer ? t.createTimeRange(0, this.ytPlayer.getDuration()) : t.createTimeRange()
|
|
},
|
|
onSeeked: function() {
|
|
clearInterval(this.checkSeekedInPauseInterval), this.isSeeking = !1, this.wasPausedBeforeSeek && this.pause(), this.trigger("seeked")
|
|
},
|
|
playbackRate: function() {
|
|
return this.ytPlayer ? this.ytPlayer.getPlaybackRate() : 1
|
|
},
|
|
setPlaybackRate: function(t) {
|
|
this.ytPlayer && this.ytPlayer.setPlaybackRate(t)
|
|
},
|
|
duration: function() {
|
|
return this.ytPlayer ? this.ytPlayer.getDuration() : 0
|
|
},
|
|
currentSrc: function() {
|
|
return this.source && this.source.src
|
|
},
|
|
ended: function() {
|
|
return !!this.ytPlayer && this.lastState === YT.PlayerState.ENDED
|
|
},
|
|
volume: function() {
|
|
return this.ytPlayer ? this.ytPlayer.getVolume() / 100 : 1
|
|
},
|
|
setVolume: function(t) {
|
|
this.ytPlayer && this.ytPlayer.setVolume(100 * t)
|
|
},
|
|
muted: function() {
|
|
return !!this.ytPlayer && this.ytPlayer.isMuted()
|
|
},
|
|
setMuted: function(t) {
|
|
this.ytPlayer && (this.muted(!0), t ? this.ytPlayer.mute() : this.ytPlayer.unMute(), this.setTimeout((function() {
|
|
this.trigger("volumechange")
|
|
}), 50))
|
|
},
|
|
buffered: function() {
|
|
if (!this.ytPlayer || !this.ytPlayer.getVideoLoadedFraction) return t.createTimeRange();
|
|
var e = this.ytPlayer.getVideoLoadedFraction() * this.ytPlayer.getDuration();
|
|
return t.createTimeRange(0, e)
|
|
},
|
|
preload: function() {},
|
|
load: function() {},
|
|
reset: function() {},
|
|
networkState: function() {
|
|
if (!this.ytPlayer) return 0;
|
|
switch (this.ytPlayer.getPlayerState()) {
|
|
case -1:
|
|
return 0;
|
|
case 3:
|
|
return 2;
|
|
default:
|
|
return 1
|
|
}
|
|
},
|
|
readyState: function() {
|
|
if (!this.ytPlayer) return 0;
|
|
switch (this.ytPlayer.getPlayerState()) {
|
|
case -1:
|
|
return 0;
|
|
case 5:
|
|
return 1;
|
|
case 3:
|
|
return 2;
|
|
default:
|
|
return 4
|
|
}
|
|
},
|
|
supportsFullScreen: function() {
|
|
return document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled
|
|
},
|
|
checkHighResPoster: function() {
|
|
var t = "https://img.youtube.com/vi/" + this.url.videoId + "/maxresdefault.jpg";
|
|
try {
|
|
var e = new Image;
|
|
e.onload = function() {
|
|
if ("naturalHeight" in e) {
|
|
if (e.naturalHeight <= 90 || e.naturalWidth <= 120) return
|
|
} else if (e.height <= 90 || e.width <= 120) return;
|
|
this.poster_ = t, this.trigger("posterchange")
|
|
}.bind(this), e.onerror = function() {}, e.src = t
|
|
} catch (t) {}
|
|
}
|
|
});
|
|
d.isSupported = function() {
|
|
return !0
|
|
}, d.canPlaySource = function(t) {
|
|
return d.canPlayType(t.type)
|
|
}, d.canPlayType = function(t) {
|
|
return "video/youtube" === t
|
|
}, d.parseUrl = function(t) {
|
|
var e = {
|
|
videoId: null
|
|
},
|
|
i = t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);
|
|
i && 11 === i[2].length && (e.videoId = i[2]);
|
|
return (i = t.match(/[?&]list=([^#\&\?]+)/)) && i[1] && (e.listId = i[1]), e
|
|
}, d.apiReadyQueue = [], "undefined" != typeof document && (o = "https://www.youtube.com/iframe_api", r = function() {
|
|
YT.ready((function() {
|
|
d.isApiReady = !0;
|
|
for (var t = 0; t < d.apiReadyQueue.length; ++t) d.apiReadyQueue[t].initYTPlayer()
|
|
}))
|
|
}, n = !1, a = document.createElement("script"), (h = document.getElementsByTagName("script")[0]) && (h.parentNode.insertBefore(a, h), a.onload = function() {
|
|
n || (n = !0, r())
|
|
}, a.onreadystatechange = function() {
|
|
n || "complete" !== this.readyState && "loaded" !== this.readyState || (n = !0, r())
|
|
}, a.src = o), e = ".vjs-youtube .vjs-iframe-blocker { display: none; }.vjs-youtube.vjs-user-inactive .vjs-iframe-blocker { display: block; }.vjs-youtube .vjs-poster { background-size: cover; }.vjs-youtube-mobile .vjs-big-play-button { display: none; }", i = document.head || document.getElementsByTagName("head")[0], (s = document.createElement("style")).type = "text/css", s.styleSheet ? s.styleSheet.cssText = e : s.appendChild(document.createTextNode(e)), i.appendChild(s)), void 0 !== t.registerTech ? t.registerTech("Youtube", d) : t.registerComponent("Youtube", d)
|
|
}));
|