@types/three
Version:
TypeScript definitions for three
784 lines (719 loc) • 24.2 kB
TypeScript
import { Vector2 } from "../../math/Vector2.js";
import { Vector3 } from "../../math/Vector3.js";
import { Vector4 } from "../../math/Vector4.js";
import Node from "../core/Node.js";
import TempNode from "../core/TempNode.js";
export type MathNodeMethod1 =
| typeof MathNode.RADIANS
| typeof MathNode.DEGREES
| typeof MathNode.EXP
| typeof MathNode.EXP2
| typeof MathNode.LOG
| typeof MathNode.LOG2
| typeof MathNode.SQRT
| typeof MathNode.INVERSE_SQRT
| typeof MathNode.FLOOR
| typeof MathNode.CEIL
| typeof MathNode.NORMALIZE
| typeof MathNode.FRACT
| typeof MathNode.SIN
| typeof MathNode.COS
| typeof MathNode.TAN
| typeof MathNode.ASIN
| typeof MathNode.ACOS
| typeof MathNode.ATAN
| typeof MathNode.ABS
| typeof MathNode.SIGN
| typeof MathNode.LENGTH
| typeof MathNode.NEGATE
| typeof MathNode.ONE_MINUS
| typeof MathNode.DFDX
| typeof MathNode.DFDY
| typeof MathNode.ROUND
| typeof MathNode.RECIPROCAL
| typeof MathNode.TRUNC
| typeof MathNode.FWIDTH
| typeof MathNode.TRANSPOSE
| typeof MathNode.DETERMINANT
| typeof MathNode.INVERSE;
export type MathNodeMethod2 =
| typeof MathNode.MIN
| typeof MathNode.MAX
| typeof MathNode.STEP
| typeof MathNode.REFLECT
| typeof MathNode.DISTANCE
| typeof MathNode.DOT
| typeof MathNode.CROSS
| typeof MathNode.POW
| typeof MathNode.TRANSFORM_DIRECTION;
export type MathNodeMethod3 =
| typeof MathNode.MIX
| typeof MathNode.CLAMP
| typeof MathNode.REFRACT
| typeof MathNode.SMOOTHSTEP
| typeof MathNode.FACEFORWARD;
export type MathNodeMethod = MathNodeMethod1 | MathNodeMethod2 | MathNodeMethod3;
export default class MathNode extends TempNode {
// 1 input
static ALL: "all";
static ANY: "any";
static RADIANS: "radians";
static DEGREES: "degrees";
static EXP: "exp";
static EXP2: "exp2";
static LOG: "log";
static LOG2: "log2";
static SQRT: "sqrt";
static INVERSE_SQRT: "inversesqrt";
static FLOOR: "floor";
static CEIL: "ceil";
static NORMALIZE: "normalize";
static FRACT: "fract";
static SIN: "sin";
static COS: "cos";
static TAN: "tan";
static ASIN: "asin";
static ACOS: "acos";
static ATAN: "atan";
static ABS: "abs";
static SIGN: "sign";
static LENGTH: "length";
static NEGATE: "negate";
static ONE_MINUS: "oneMinus";
static DFDX: "dFdx";
static DFDY: "dFdy";
static ROUND: "round";
static RECIPROCAL: "reciprocal";
static TRUNC: "trunc";
static FWIDTH: "fwidth";
static TRANSPOSE: "transpose";
static DETERMINANT: "determinant";
static INVERSE: "inverse";
// 2 inputs
static EQUALS: "equals";
static MIN: "min";
static MAX: "max";
static STEP: "step";
static REFLECT: "reflect";
static DISTANCE: "distance";
static DOT: "dot";
static CROSS: "cross";
static POW: "pow";
static TRANSFORM_DIRECTION: "transformDirection";
// 3 inputs
static MIX: "mix";
static CLAMP: "clamp";
static REFRACT: "refract";
static SMOOTHSTEP: "smoothstep";
static FACEFORWARD: "faceforward";
method: MathNodeMethod;
aNode: Node;
bNode: Node | null;
cNode: Node | null;
readonly isMathNode: true;
constructor(method: MathNodeMethod1, aNode: Node);
constructor(method: MathNodeMethod2, aNode: Node, bNode: Node);
constructor(method: MathNodeMethod3, aNode: Node, bNode: Node, cNode: Node);
}
type FloatOrNumber = Node<"float"> | number;
type IntOrNumber = Node<"int"> | number;
type FloatVector = Node<"vec2"> | Node<"vec3"> | Node<"vec4">;
type FloatVectorOrNumber = FloatOrNumber | Node<"vec2"> | Node<"vec3"> | Node<"vec4">;
type BoolVector = Node<"bvec2"> | Node<"bvec3"> | Node<"bvec4">;
type Matrix = Node<"mat2"> | Node<"mat3"> | Node<"mat4">;
type Vec2OrLessOrFloat = FloatOrNumber | Node<"vec2">;
type Vec3OrLessOrFloat = Vec2OrLessOrFloat | Node<"vec3">;
type Vec4OrLessOrFloat = Vec3OrLessOrFloat | Node<"vec4">;
export const EPSILON: Node<"float">;
export const INFINITY: Node<"float">;
export const PI: Node<"float">;
/**
* @deprecated Please use the non-deprecated version `TWO_PI`.
*/
export const PI2: Node<"float">;
export const TWO_PI: Node<"float">;
export const HALF_PI: Node<"float">;
export const all: (x: BoolVector) => Node<"bool">;
export const any: (x: BoolVector) => Node<"bool">;
declare module "../core/Node.js" {
interface BvecExtensions {
all: () => Node<"bool">;
any: () => Node<"bool">;
}
}
interface UnaryFunction {
(x: FloatOrNumber): Node<"float">;
}
export const radians: UnaryFunction;
export const degrees: UnaryFunction;
export const exp: UnaryFunction;
export const exp2: UnaryFunction;
export const log: UnaryFunction;
export const log2: UnaryFunction;
export const sqrt: UnaryFunction;
export const inverseSqrt: UnaryFunction;
declare module "../core/Node.js" {
interface FloatExtensions {
radians: () => Node<"float">;
degrees: () => Node<"float">;
exp: () => Node<"float">;
exp2: () => Node<"float">;
log: () => Node<"float">;
log2: () => Node<"float">;
sqrt: () => Node<"float">;
inverseSqrt: () => Node<"float">;
}
}
interface FloorCeil {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const floor: FloorCeil;
export const ceil: FloorCeil;
declare module "../core/Node.js" {
interface FloatExtensions {
floor: () => Node<"float">;
ceil: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
floor: () => Node<TVec>;
ceil: () => Node<TVec>;
}
}
interface Normalize {
(x: Node<"vec2"> | Vector2): Node<"vec2">;
(x: Node<"vec3"> | Vector3): Node<"vec3">;
(x: Node<"vec4"> | Vector4): Node<"vec4">;
}
export const normalize: Normalize;
declare module "../core/Node.js" {
interface FloatVecExtensions<TVec extends FloatVecType> {
normalize: () => Node<TVec>;
}
}
interface Fract {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const fract: Fract;
declare module "../core/Node.js" {
interface FloatExtensions {
fract: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
fract: () => Node<TVec>;
}
}
export const sin: (x: FloatOrNumber) => Node<"float">;
export const cos: (x: FloatOrNumber) => Node<"float">;
export const tan: (x: FloatOrNumber) => Node<"float">;
export const asin: (x: FloatOrNumber) => Node<"float">;
export const acos: (x: FloatOrNumber) => Node<"float">;
export const atan: (y: FloatOrNumber, x?: FloatOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
sin: () => Node<"float">;
cos: () => Node<"float">;
tan: () => Node<"float">;
asin: () => Node<"float">;
acos: () => Node<"float">;
atan: (x?: FloatOrNumber) => Node<"float">;
}
}
interface Abs {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
(x: IntOrNumber): Node<"int">;
}
export const abs: Abs;
declare module "../core/Node.js" {
interface FloatExtensions {
abs: () => Node<"float">;
}
interface IntExtensions {
abs: () => Node<"int">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
abs: () => Node<TVec>;
}
}
interface Sign {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const sign: Sign;
declare module "../core/Node.js" {
interface FloatExtensions {
sign: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
sign: () => Node<TVec>;
}
}
export const length: (x: FloatVector | Node) => Node<"float">;
declare module "../core/Node.js" {
interface FloatVecExtensions<TVec extends FloatVecType> {
length: () => Node<"float">;
}
}
interface Negate {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const negate: Negate;
declare module "../core/Node.js" {
interface FloatExtensions {
negate: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
negate: () => Node<TVec>;
}
}
interface OneMinus {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const oneMinus: OneMinus;
declare module "../core/Node.js" {
interface FloatExtensions {
oneMinus: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
oneMinus: () => Node<TVec>;
}
}
interface Derivative {
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const dFdx: Derivative;
export const dFdy: Derivative;
declare module "../core/Node.js" {
interface FloatVecExtensions<TVec extends FloatVecType> {
dFdx: () => Node<TVec>;
dFdy: () => Node<TVec>;
}
}
export const round: (x: FloatOrNumber) => Node<"float">;
export const reciprocal: (x: FloatOrNumber) => Node<"float">;
export const trunc: (x: FloatOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
round: () => Node<"float">;
reciprocal: () => Node<"float">;
trunc: () => Node<"float">;
}
}
interface Fwidth {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const fwidth: Fwidth;
declare module "../core/Node.js" {
interface FloatExtensions {
fwidth: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
fwidth: () => Node<TVec>;
}
}
interface Transpose {
(x: Node<"mat2">): Node<"mat2">;
(x: Node<"mat3">): Node<"mat3">;
(x: Node<"mat4">): Node<"mat4">;
}
export const transpose: Transpose;
declare module "../core/Node.js" {
interface MatExtensions<TMat extends MatType> {
transpose: () => Node<TMat>;
}
}
export const determinant: (x: Matrix) => Node<"float">;
declare module "../core/Node.js" {
interface MatExtensions<TMat extends MatType> {
determinant: () => Node<"float">;
}
}
interface Inverse {
(x: Node<"mat2">): Node<"mat2">;
(x: Node<"mat3">): Node<"mat3">;
(x: Node<"mat4">): Node<"mat4">;
}
export const inverse: Inverse;
declare module "../core/Node.js" {
interface MatExtensions<TMat extends MatType> {
inverse: () => Node<TMat>;
}
}
interface MinMax {
(x: FloatOrNumber, y: FloatOrNumber, ...params: FloatOrNumber[]): Node<"float">;
(x: Vec2OrLessOrFloat, y: Vec2OrLessOrFloat, ...params: Vec2OrLessOrFloat[]): Node<"vec2">;
(x: Vec3OrLessOrFloat, y: Vec3OrLessOrFloat, ...params: Vec3OrLessOrFloat[]): Node<"vec3">;
(x: Vec4OrLessOrFloat, y: Vec4OrLessOrFloat, ...params: Vec4OrLessOrFloat[]): Node<"vec4">;
}
export const min: MinMax;
export const max: MinMax;
interface MinMaxFloatExtension {
(y: FloatOrNumber, ...params: FloatOrNumber[]): Node<"float">;
(y: Vec2OrLessOrFloat, ...params: Vec2OrLessOrFloat[]): Node<"vec2">;
(y: Vec3OrLessOrFloat, ...params: Vec3OrLessOrFloat[]): Node<"vec3">;
(y: Vec4OrLessOrFloat, ...params: Vec4OrLessOrFloat[]): Node<"vec4">;
}
interface MinMaxVec2Extension {
(y: Vec2OrLessOrFloat, ...params: Vec2OrLessOrFloat[]): Node<"vec2">;
(y: Vec3OrLessOrFloat, ...params: Vec3OrLessOrFloat[]): Node<"vec3">;
(y: Vec4OrLessOrFloat, ...params: Vec4OrLessOrFloat[]): Node<"vec4">;
}
interface MinMaxVec3Extension {
(y: Vec3OrLessOrFloat, ...params: Vec3OrLessOrFloat[]): Node<"vec3">;
(y: Vec4OrLessOrFloat, ...params: Vec4OrLessOrFloat[]): Node<"vec4">;
}
interface MinMaxVec4Extension {
(y: Vec4OrLessOrFloat, ...params: Vec4OrLessOrFloat[]): Node<"vec4">;
}
declare module "../core/Node.js" {
interface FloatExtensions {
min: MinMaxFloatExtension;
max: MinMaxFloatExtension;
}
interface Vec2Extensions {
min: MinMaxVec2Extension;
max: MinMaxVec2Extension;
}
interface Vec3Extensions {
min: MinMaxVec3Extension;
max: MinMaxVec3Extension;
}
interface Vec4Extensions {
min: MinMaxVec4Extension;
max: MinMaxVec4Extension;
}
}
export const step: (x: FloatOrNumber, y: FloatOrNumber) => Node<"float">;
interface Reflect {
(I: Vec2OrLessOrFloat, N: Vec2OrLessOrFloat): Node<"vec2">;
(I: Vec3OrLessOrFloat, N: Vec3OrLessOrFloat): Node<"vec3">;
(I: Vec4OrLessOrFloat, N: Vec4OrLessOrFloat): Node<"vec4">;
}
export const reflect: Reflect;
interface ReflectVec2Extension {
(N: Vec2OrLessOrFloat): Node<"vec2">;
(N: Vec3OrLessOrFloat): Node<"vec3">;
(N: Vec4OrLessOrFloat): Node<"vec4">;
}
interface ReflectVec3Extension {
(N: Vec3OrLessOrFloat): Node<"vec3">;
(N: Vec4OrLessOrFloat): Node<"vec4">;
}
interface ReflectVec4Extension {
(N: Vec4OrLessOrFloat): Node<"vec4">;
}
declare module "../core/Node.js" {
interface Vec2Extensions {
reflect: ReflectVec2Extension;
}
interface Vec3Extensions {
reflect: ReflectVec3Extension;
}
interface Vec4Extensions {
reflect: ReflectVec4Extension;
}
}
export const distance: (x: FloatVectorOrNumber, y: FloatVectorOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
distance: (y: FloatVectorOrNumber) => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
distance: (y: FloatVectorOrNumber) => Node<"float">;
}
}
interface Difference {
(x: FloatOrNumber, y: FloatOrNumber): Node<"float">;
(x: Vec2OrLessOrFloat, y: Vec2OrLessOrFloat): Node<"vec2">;
(x: Vec3OrLessOrFloat, y: Vec3OrLessOrFloat): Node<"vec3">;
(x: Vec4OrLessOrFloat, y: Vec4OrLessOrFloat): Node<"vec4">;
}
export const difference: Difference;
interface DifferenceFloatExtension {
(y: FloatOrNumber): Node<"float">;
(y: Vec2OrLessOrFloat): Node<"vec2">;
(y: Vec3OrLessOrFloat): Node<"vec3">;
(y: Vec4OrLessOrFloat): Node<"vec4">;
}
interface DifferenceVec2Extension {
(y: Vec2OrLessOrFloat): Node<"vec2">;
(y: Vec3OrLessOrFloat): Node<"vec3">;
(y: Vec4OrLessOrFloat): Node<"vec4">;
}
interface DifferenceVec3Extension {
(y: Vec3OrLessOrFloat): Node<"vec3">;
(y: Vec4OrLessOrFloat): Node<"vec4">;
}
interface DifferenceVec4Extension {
(y: Vec4OrLessOrFloat): Node<"vec4">;
}
declare module "../core/Node.js" {
interface FloatExtensions {
difference: DifferenceFloatExtension;
}
interface Vec2Extensions {
difference: DifferenceVec2Extension;
}
interface Vec3Extensions {
difference: DifferenceVec3Extension;
}
interface Vec4Extensions {
difference: DifferenceVec4Extension;
}
}
export const dot: (x: FloatVector, y: FloatVector) => Node<"float">;
declare module "../core/Node.js" {
interface FloatVecExtensions<TVec extends FloatVecType> {
dot: (y: FloatVector) => Node<"float">;
}
}
export const cross: (x: Node<"vec3">, y: Node<"vec3">) => Node<"vec3">;
declare module "../core/Node.js" {
interface Vec3Extensions {
cross: (y: Node<"vec3">) => Node<"vec3">;
}
}
interface Pow {
(x: FloatOrNumber, y: FloatOrNumber): Node<"float">;
(x: Node<"vec2">, y: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">, y: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">, y: Node<"vec4">): Node<"vec4">;
}
export const pow: (x: FloatOrNumber, y: FloatOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
pow: (y: FloatOrNumber) => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
pow: (y: Node<TVec>) => Node<TVec>;
}
}
interface PowConstant {
(x: FloatOrNumber): Node<"float">;
(x: Node<"vec2">): Node<"vec2">;
(x: Node<"vec3">): Node<"vec3">;
(x: Node<"vec4">): Node<"vec4">;
}
export const pow2: PowConstant;
export const pow3: PowConstant;
export const pow4: PowConstant;
declare module "../core/Node.js" {
interface FloatExtensions {
pow2: () => Node<"float">;
pow3: () => Node<"float">;
pow4: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
pow2: () => Node<TVec>;
pow3: () => Node<TVec>;
pow4: () => Node<TVec>;
}
}
export const transformDirection: (direction: Node<"vec3">, matrix: Node<"mat3"> | Node<"mat4">) => Node<"vec3">;
declare module "../core/Node.js" {
interface Vec3Extensions {
transformDirection: (matrix: Node<"mat3"> | Node<"mat4">) => Node<"vec3">;
}
}
export const cbrt: (a: FloatOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
cbrt: () => Node<"float">;
}
}
export const lengthSq: (a: FloatVector) => Node<"float">;
declare module "../core/Node.js" {
interface FloatVecExtensions<TVec extends FloatVecType> {
lengthSq: () => Node<"float">;
}
}
interface Mix {
(a: FloatOrNumber, b: FloatOrNumber, t: FloatOrNumber): Node<"float">;
(a: Vec2OrLessOrFloat, b: Vec2OrLessOrFloat, t: FloatOrNumber): Node<"vec2">;
(a: Vec3OrLessOrFloat | Node<"color">, b: Vec3OrLessOrFloat | Node<"color">, t: FloatOrNumber): Node<"vec3">;
(a: Vec4OrLessOrFloat, b: Vec4OrLessOrFloat, t: FloatOrNumber): Node<"vec4">;
}
export const mix: Mix;
interface Clamp {
(value: FloatOrNumber, low?: FloatOrNumber, high?: FloatOrNumber): Node<"float">;
(value: Vec2OrLessOrFloat, low?: Vec2OrLessOrFloat, high?: Vec2OrLessOrFloat): Node<"vec2">;
(value: Vec3OrLessOrFloat, low?: Vec3OrLessOrFloat, high?: Vec3OrLessOrFloat): Node<"vec3">;
(value: Vec4OrLessOrFloat, low?: Vec4OrLessOrFloat, high?: Vec4OrLessOrFloat): Node<"vec4">;
}
export const clamp: Clamp;
interface ClampFloatExtension {
(low?: FloatOrNumber, high?: FloatOrNumber): Node<"float">;
(low?: Vec2OrLessOrFloat, high?: Vec2OrLessOrFloat): Node<"vec2">;
(low?: Vec3OrLessOrFloat, high?: Vec3OrLessOrFloat): Node<"vec3">;
(low?: Vec4OrLessOrFloat, high?: Vec4OrLessOrFloat): Node<"vec4">;
}
interface ClampVec2Extension {
(low?: Vec2OrLessOrFloat, high?: Vec2OrLessOrFloat): Node<"vec2">;
(low?: Vec3OrLessOrFloat, high?: Vec3OrLessOrFloat): Node<"vec3">;
(low?: Vec4OrLessOrFloat, high?: Vec4OrLessOrFloat): Node<"vec4">;
}
interface ClampVec3Extension {
(low?: Vec3OrLessOrFloat, high?: Vec3OrLessOrFloat): Node<"vec3">;
(low?: Vec4OrLessOrFloat, high?: Vec4OrLessOrFloat): Node<"vec4">;
}
interface ClampVec4Extension {
(low?: Vec4OrLessOrFloat, high?: Vec4OrLessOrFloat): Node<"vec4">;
}
declare module "../core/Node.js" {
interface FloatExtensions {
clamp: ClampFloatExtension;
}
interface Vec2Extensions {
clamp: ClampVec2Extension;
}
interface Vec3Extensions {
clamp: ClampVec3Extension;
}
interface Vec4Extensions {
clamp: ClampVec4Extension;
}
}
interface Saturate {
(value: FloatOrNumber): Node<"float">;
(value: Node<"vec2">): Node<"vec2">;
(value: Node<"vec3">): Node<"vec3">;
(value: Node<"vec4">): Node<"vec4">;
}
export const saturate: Saturate;
declare module "../core/Node.js" {
interface FloatExtensions {
saturate: () => Node<"float">;
}
interface FloatVecExtensions<TVec extends FloatVecType> {
saturate: () => Node<TVec>;
}
}
interface Refract {
(I: Vec2OrLessOrFloat, N: Vec2OrLessOrFloat, ratio: FloatOrNumber): Node<"vec2">;
(I: Vec3OrLessOrFloat, N: Vec3OrLessOrFloat, ratio: FloatOrNumber): Node<"vec3">;
(I: Vec4OrLessOrFloat, N: Vec4OrLessOrFloat, ratio: FloatOrNumber): Node<"vec4">;
}
export const refract: Refract;
interface RefractVec2Extension {
(N: Vec2OrLessOrFloat, ratio: FloatOrNumber): Node<"vec2">;
(N: Vec3OrLessOrFloat, ratio: FloatOrNumber): Node<"vec3">;
(N: Vec4OrLessOrFloat, ratio: FloatOrNumber): Node<"vec4">;
}
interface RefractVec3Extension {
(N: Vec3OrLessOrFloat, ratio: FloatOrNumber): Node<"vec3">;
(N: Vec4OrLessOrFloat, ratio: FloatOrNumber): Node<"vec4">;
}
interface RefractVec4Extension {
(N: Vec4OrLessOrFloat, ratio: FloatOrNumber): Node<"vec4">;
}
declare module "../core/Node.js" {
interface Vec2Extensions {
refract: RefractVec2Extension;
}
interface Vec3Extensions {
refract: RefractVec3Extension;
}
interface Vec4Extensions {
refract: RefractVec4Extension;
}
}
interface Smoothstep {
(low: FloatOrNumber, high: FloatOrNumber, x: FloatOrNumber): Node<"float">;
}
export const smoothstep: Smoothstep;
interface FaceForward {
(N: Vec2OrLessOrFloat, I: Vec2OrLessOrFloat, Nref: Vec2OrLessOrFloat): Node<"vec2">;
(N: Vec3OrLessOrFloat, I: Vec3OrLessOrFloat, Nref: Vec3OrLessOrFloat): Node<"vec3">;
(N: Vec4OrLessOrFloat, I: Vec4OrLessOrFloat, Nref: Vec4OrLessOrFloat): Node<"vec4">;
}
export const faceForward: FaceForward;
interface FaceForwardVec2Extension {
(I: Vec2OrLessOrFloat, Nref: Vec2OrLessOrFloat): Node<"vec2">;
(I: Vec3OrLessOrFloat, Nref: Vec3OrLessOrFloat): Node<"vec3">;
(I: Vec4OrLessOrFloat, Nref: Vec4OrLessOrFloat): Node<"vec4">;
}
interface FaceForwardVec3Extension {
(N: Vec3OrLessOrFloat, ratio: Vec3OrLessOrFloat): Node<"vec3">;
(N: Vec4OrLessOrFloat, ratio: Vec4OrLessOrFloat): Node<"vec4">;
}
interface FaceForwardVec4Extension {
(N: Vec4OrLessOrFloat, ratio: Vec4OrLessOrFloat): Node<"vec4">;
}
declare module "../core/Node.js" {
interface Vec2Extensions {
faceForward: FaceForwardVec2Extension;
}
interface Vec3Extensions {
faceForward: FaceForwardVec3Extension;
}
interface Vec4Extensions {
faceForward: FaceForwardVec4Extension;
}
}
export const rand: (uv: Node<"vec2">) => Node<"float">;
declare module "../core/Node.js" {
interface Vec2Extensions {
rand: () => Node<"float">;
}
}
interface MixElement {
(t: FloatOrNumber, e1: FloatOrNumber, e2: FloatOrNumber): Node<"float">;
(t: FloatOrNumber, e1: Vec2OrLessOrFloat, e2: Vec2OrLessOrFloat): Node<"vec2">;
(t: FloatOrNumber, e1: Vec3OrLessOrFloat | Node<"color">, e2: Vec3OrLessOrFloat | Node<"color">): Node<"vec3">;
(t: FloatOrNumber, e1: Vec4OrLessOrFloat, e2: Vec4OrLessOrFloat): Node<"vec4">;
}
export const mixElement: MixElement;
interface MixExtension {
(e1: FloatOrNumber, e2: FloatOrNumber): Node<"float">;
(e1: Vec2OrLessOrFloat, e2: Vec2OrLessOrFloat): Node<"vec2">;
(e1: Vec3OrLessOrFloat | Node<"color">, e2: Vec3OrLessOrFloat | Node<"color">): Node<"vec3">;
(e1: Vec4OrLessOrFloat | Node<"color">, e2: Vec4OrLessOrFloat | Node<"color">): Node<"vec4">;
}
declare module "../core/Node.js" {
interface FloatExtensions {
mix: MixExtension;
}
}
interface SmoothstepElement {
(x: FloatOrNumber, low: FloatOrNumber, high: FloatOrNumber): Node<"float">;
}
export const smoothstepElement: SmoothstepElement;
interface SmoothstepExtension {
(low: FloatOrNumber, high: FloatOrNumber): Node<"float">;
}
declare module "../core/Node.js" {
interface FloatExtensions {
smoothstep: SmoothstepExtension;
}
}
export const stepElement: (x: FloatOrNumber, edge: FloatOrNumber) => Node<"float">;
declare module "../core/Node.js" {
interface FloatExtensions {
step: (edge: FloatOrNumber) => Node<"float">;
}
}
// GLSL alias function
export const faceforward: typeof faceForward;
export const inversesqrt: typeof inverseSqrt;
export {};