UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

90 lines (88 loc) 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mx_rgbtohsv = exports.mx_hsvtorgb = void 0; var _TSLBase = require("../../tsl/TSLBase.js"); var _OperatorNode = require("../../math/OperatorNode.js"); var _MathNode = require("../../math/MathNode.js"); // Three.js Transpiler // https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/libraries/stdlib/genglsl/lib/mx_hsv.glsl const mx_hsvtorgb = exports.mx_hsvtorgb = /*@__PURE__*/(0, _TSLBase.Fn)(([hsv]) => { const s = hsv.y; const v = hsv.z; const result = (0, _TSLBase.vec3)().toVar(); (0, _TSLBase.If)(s.lessThan(0.0001), () => { result.assign((0, _TSLBase.vec3)(v, v, v)); }).Else(() => { let h = hsv.x; h = h.sub((0, _MathNode.floor)(h)).mul(6.0).toVar(); // TODO: check what .toVar() is needed in node system cache const hi = (0, _TSLBase.int)((0, _MathNode.trunc)(h)); const f = h.sub((0, _TSLBase.float)(hi)); const p = v.mul(s.oneMinus()); const q = v.mul(s.mul(f).oneMinus()); const t = v.mul(s.mul(f.oneMinus()).oneMinus()); (0, _TSLBase.If)(hi.equal((0, _TSLBase.int)(0)), () => { result.assign((0, _TSLBase.vec3)(v, t, p)); }).ElseIf(hi.equal((0, _TSLBase.int)(1)), () => { result.assign((0, _TSLBase.vec3)(q, v, p)); }).ElseIf(hi.equal((0, _TSLBase.int)(2)), () => { result.assign((0, _TSLBase.vec3)(p, v, t)); }).ElseIf(hi.equal((0, _TSLBase.int)(3)), () => { result.assign((0, _TSLBase.vec3)(p, q, v)); }).ElseIf(hi.equal((0, _TSLBase.int)(4)), () => { result.assign((0, _TSLBase.vec3)(t, p, v)); }).Else(() => { result.assign((0, _TSLBase.vec3)(v, p, q)); }); }); return result; }).setLayout({ name: 'mx_hsvtorgb', type: 'vec3', inputs: [{ name: 'hsv', type: 'vec3' }] }); const mx_rgbtohsv = exports.mx_rgbtohsv = /*@__PURE__*/(0, _TSLBase.Fn)(([c_immutable]) => { const c = (0, _TSLBase.vec3)(c_immutable).toVar(); const r = (0, _TSLBase.float)(c.x).toVar(); const g = (0, _TSLBase.float)(c.y).toVar(); const b = (0, _TSLBase.float)(c.z).toVar(); const mincomp = (0, _TSLBase.float)((0, _MathNode.min)(r, (0, _MathNode.min)(g, b))).toVar(); const maxcomp = (0, _TSLBase.float)((0, _MathNode.max)(r, (0, _MathNode.max)(g, b))).toVar(); const delta = (0, _TSLBase.float)(maxcomp.sub(mincomp)).toVar(); const h = (0, _TSLBase.float)().toVar(), s = (0, _TSLBase.float)().toVar(), v = (0, _TSLBase.float)().toVar(); v.assign(maxcomp); (0, _TSLBase.If)(maxcomp.greaterThan(0.0), () => { s.assign(delta.div(maxcomp)); }).Else(() => { s.assign(0.0); }); (0, _TSLBase.If)(s.lessThanEqual(0.0), () => { h.assign(0.0); }).Else(() => { (0, _TSLBase.If)(r.greaterThanEqual(maxcomp), () => { h.assign(g.sub(b).div(delta)); }).ElseIf(g.greaterThanEqual(maxcomp), () => { h.assign((0, _OperatorNode.add)(2.0, b.sub(r).div(delta))); }).Else(() => { h.assign((0, _OperatorNode.add)(4.0, r.sub(g).div(delta))); }); h.mulAssign(1.0 / 6.0); (0, _TSLBase.If)(h.lessThan(0.0), () => { h.addAssign(1.0); }); }); return (0, _TSLBase.vec3)(h, s, v); }).setLayout({ name: 'mx_rgbtohsv', type: 'vec3', inputs: [{ name: 'c', type: 'vec3' }] });