@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
33 lines (32 loc) • 1.49 kB
JavaScript
;
import { clothControllerFromObject } from "./ClothControllerRegister";
import { MaterialUserDataUniforms } from "../../engine/nodes/gl/code/assemblers/materials/OnBeforeCompile";
import { UNIFORM_PARAM_PREFIX, UNIFORM_TEXTURE_PREFIX } from "../material/uniform";
function _addParamPrefix(uniformName) {
return `${UNIFORM_PARAM_PREFIX}${uniformName}`;
}
function _addTexturePrefix(uniformName) {
return `${UNIFORM_TEXTURE_PREFIX}${uniformName}`;
}
export function clothSolverStepSimulation(clothObject, stepsCount, constraintInfluence, viscosity, spring, uniformConfig) {
const controller = clothControllerFromObject(clothObject);
if (!controller) {
console.log("no controller for", clothObject.uuid);
return;
}
controller.stepsCount = stepsCount;
controller.constraintInfluence = constraintInfluence;
controller.viscosity = viscosity;
controller.spring = spring;
controller.update(uniformConfig);
}
export function clothSolverUpdateMaterial(material, uniformConfig, uniformNameConfig) {
const uniforms = MaterialUserDataUniforms.getUniforms(material);
if (!uniforms) {
return;
}
uniforms[_addParamPrefix(uniformNameConfig.tSize)].value = uniformConfig.tSize;
uniforms[_addTexturePrefix(uniformNameConfig.tPosition0)].value = uniformConfig.tPosition0;
uniforms[_addTexturePrefix(uniformNameConfig.tPosition1)].value = uniformConfig.tPosition1;
uniforms[_addTexturePrefix(uniformNameConfig.tNormal)].value = uniformConfig.tNormal;
}