UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

43 lines (41 loc) 1.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.matcapUV = exports.default = void 0; var _TempNode = _interopRequireDefault(require("../core/TempNode.js")); var _Normal = require("../accessors/Normal.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 a * matcap onto a mesh. Used by {@link MeshMatcapNodeMaterial}. * * @augments TempNode */ class MatcapUVNode extends _TempNode.default { static get type() { return 'MatcapUVNode'; } /** * Constructs a new matcap uv node. */ constructor() { super('vec2'); } setup() { const x = (0, _TSLBase.vec3)(_Position.positionViewDirection.z, 0, _Position.positionViewDirection.x.negate()).normalize(); const y = _Position.positionViewDirection.cross(x); return (0, _TSLBase.vec2)(x.dot(_Normal.transformedNormalView), y.dot(_Normal.transformedNormalView)).mul(0.495).add(0.5); // 0.495 to remove artifacts caused by undersized matcap disks } } var _default = exports.default = MatcapUVNode; /** * TSL function for creating a matcap uv node. * * @tsl * @function * @returns {MatcapUVNode} */ const matcapUV = exports.matcapUV = /*@__PURE__*/(0, _TSLBase.nodeImmutable)(MatcapUVNode);