@openhps/core
Version:
Open Hybrid Positioning System - Core component
90 lines (88 loc) • 3.28 kB
JavaScript
;
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'
}]
});