UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

58 lines (55 loc) 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.equirectUV = exports.default = void 0; var _TempNode = _interopRequireDefault(require("../core/TempNode.js")); var _Position = require("../accessors/Position.js"); var _TSLBase = require("../tsl/TSLBase.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Can be used to compute texture coordinates for projecting an * equirectangular texture onto a mesh for using it as the scene's * background. * * ```js * scene.backgroundNode = texture( equirectTexture, equirectUV() ); * ``` * * @augments TempNode */ class EquirectUVNode extends _TempNode.default { static get type() { return 'EquirectUVNode'; } /** * Constructs a new equirect uv node. * * @param {Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`. */ constructor(dirNode = _Position.positionWorldDirection) { super('vec2'); /** * A direction vector for sampling why is by default `positionWorldDirection`. * * @type {Node<vec3>} */ this.dirNode = dirNode; } setup() { const dir = this.dirNode; const u = dir.z.atan(dir.x).mul(1 / (Math.PI * 2)).add(0.5); const v = dir.y.clamp(-1.0, 1.0).asin().mul(1 / Math.PI).add(0.5); return (0, _TSLBase.vec2)(u, v); } } var _default = exports.default = EquirectUVNode; /** * TSL function for creating an equirect uv node. * * @tsl * @function * @param {?Node<vec3>} [dirNode=positionWorldDirection] - A direction vector for sampling which is by default `positionWorldDirection`. * @returns {EquirectUVNode} */ const equirectUV = exports.equirectUV = /*@__PURE__*/(0, _TSLBase.nodeProxy)(EquirectUVNode).setParameterLength(0, 1);