UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

60 lines (55 loc) 1.39 kB
import Node from '../core/Node.js'; import { nodeImmutable, float } from '../tsl/TSLBase.js'; import { BackSide, WebGLCoordinateSystem } from '../../constants.js'; /** * This node can be used to evaluate whether a primitive is front or back facing. * * @augments Node */ class FrontFacingNode extends Node { static get type() { return 'FrontFacingNode'; } /** * Constructs a new front facing node. */ constructor() { super('bool'); /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isFrontFacingNode = true; } generate(builder) { const { renderer, material } = builder; if (renderer.coordinateSystem === WebGLCoordinateSystem) { if (material.side === BackSide) { return 'false'; } } return builder.getFrontFacing(); } } export default FrontFacingNode; /** * TSL object that represents whether a primitive is front or back facing * * @tsl * @type {FrontFacingNode<bool>} */ export const frontFacing = /*@__PURE__*/nodeImmutable(FrontFacingNode); /** * TSL object that represents the front facing status as a number instead of a bool. * `1` means front facing, `-1` means back facing. * * @tsl * @type {Node<float>} */ export const faceDirection = /*@__PURE__*/float(frontFacing).mul(2.0).sub(1.0);