@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
53 lines (52 loc) • 2.08 kB
JavaScript
"use strict";
import { TypedGlNode } from "./_Base";
import { NodeParamsConfig, ParamConfig } from "../../nodes/utils/params/ParamsConfig";
import { GlConnectionPoint, GlConnectionPointType } from "../../nodes/utils/io/connections/Gl";
import { ThreeToGl } from "../../../core/ThreeToGl";
const OUTPUT = {
SSS_MODEL: "SSSModel"
};
class VATDataGlParamsConfig extends NodeParamsConfig {
constructor() {
super(...arguments);
this.color = ParamConfig.COLOR([1, 1, 1]);
this.thickness = ParamConfig.FLOAT(0.1);
this.power = ParamConfig.FLOAT(2);
this.scale = ParamConfig.FLOAT(16);
this.distortion = ParamConfig.FLOAT(0.1);
this.ambient = ParamConfig.FLOAT(0.4);
this.attenuation = ParamConfig.FLOAT(0.8);
}
}
const ParamsConfig = new VATDataGlParamsConfig();
export class SSSModelGlNode extends TypedGlNode {
constructor() {
super(...arguments);
this.paramsConfig = ParamsConfig;
}
static type() {
return "SSSModel";
}
initializeNode() {
this.io.outputs.setNamedOutputConnectionPoints([
new GlConnectionPoint(OUTPUT.SSS_MODEL, GlConnectionPointType.SSS_MODEL)
]);
}
setLines(shaders_collection_controller) {
const body_lines = [];
const outSSModel = this.glVarName(OUTPUT.SSS_MODEL);
body_lines.push(`SSSModel ${outSSModel}`);
body_lines.push(`${outSSModel}.isActive = true;`);
body_lines.push(this._paramLineFloat(outSSModel, this.p.color));
body_lines.push(this._paramLineFloat(outSSModel, this.p.thickness));
body_lines.push(this._paramLineFloat(outSSModel, this.p.power));
body_lines.push(this._paramLineFloat(outSSModel, this.p.scale));
body_lines.push(this._paramLineFloat(outSSModel, this.p.distortion));
body_lines.push(this._paramLineFloat(outSSModel, this.p.ambient));
body_lines.push(this._paramLineFloat(outSSModel, this.p.attenuation));
shaders_collection_controller.addBodyLines(this, body_lines);
}
_paramLineFloat(varName, param) {
return `${varName}.${param.name()} = ${ThreeToGl.vector3(this.variableForInputParam(param))};`;
}
}