@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
61 lines (60 loc) • 2.56 kB
JavaScript
;
import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig";
import { TypedGlNode } from "./_Base";
import FresnelMethods from "./gl/fresnel.glsl";
import { GlConnectionPoint, GlConnectionPointType } from "../utils/io/connections/Gl";
import { ThreeToGl } from "../../../core/ThreeToGl";
import { FunctionGLDefinition } from "./utils/GLDefinition";
import { Vector3Param } from "../../params/Vector3";
const OUTPUT_NAME = "fresnel";
class FresnelGlParamsConfig extends NodeParamsConfig {
constructor() {
super(...arguments);
this.worldPosition = ParamConfig.VECTOR4([0, 0, 0, 0]);
this.worldNormal = ParamConfig.VECTOR3([0, 0, 0]);
this.cameraPosition = ParamConfig.VECTOR3([0, 0, 0]);
}
}
const ParamsConfig = new FresnelGlParamsConfig();
export class FresnelGlNode extends TypedGlNode {
constructor() {
super(...arguments);
this.paramsConfig = ParamsConfig;
}
static type() {
return "fresnel";
}
initializeNode() {
super.initializeNode();
this.io.outputs.setNamedOutputConnectionPoints([
new GlConnectionPoint(OUTPUT_NAME, GlConnectionPointType.FLOAT)
]);
}
setLines(shadersCollectionController) {
const args = [
this._varFromParam(this.p.worldPosition, ThreeToGl.vector4, shadersCollectionController),
this._varFromParam(this.p.worldNormal, ThreeToGl.vector3, shadersCollectionController),
this._varFromParam(this.p.cameraPosition, ThreeToGl.vector3, shadersCollectionController)
];
const output = this.glVarName(OUTPUT_NAME);
const body_line = `float ${output} = fresnel(${args.join(",")})`;
shadersCollectionController.addBodyLines(this, [body_line]);
shadersCollectionController.addDefinitions(this, [new FunctionGLDefinition(this, FresnelMethods)]);
}
_varFromParam(param, convertMethod, shadersCollectionController) {
const varName = param.name();
const input = this.io.inputs.named_input(param.name());
if (input) {
return convertMethod(this.variableForInputParam(param));
} else {
const glType = param instanceof Vector3Param ? GlConnectionPointType.VEC3 : GlConnectionPointType.VEC4;
this._getGlobalVar(varName, glType, shadersCollectionController);
return this.glVarName(varName);
}
}
_getGlobalVar(varName, glType, shadersCollectionController) {
var _a;
const assembler = shadersCollectionController.assembler();
(_a = assembler.globalsHandler()) == null ? void 0 : _a.handleGlobalVar(this, varName, glType, shadersCollectionController);
}
}