UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

53 lines (48 loc) 1.82 kB
import {Object3D, Material} from 'three'; import {clothControllerFromObject} from './ClothControllerRegister'; import { ClothMaterialUniformConfig, ClothMaterialUniformConfigRef, ClothMaterialUniformNameConfig, } from './modules/ClothFBOController'; import {MaterialUserDataUniforms} from '../../engine/nodes/gl/code/assemblers/materials/OnBeforeCompile'; import {UNIFORM_PARAM_PREFIX, UNIFORM_TEXTURE_PREFIX} from '../material/uniform'; function _addParamPrefix(uniformName: string): string { return `${UNIFORM_PARAM_PREFIX}${uniformName}`; } function _addTexturePrefix(uniformName: string): string { return `${UNIFORM_TEXTURE_PREFIX}${uniformName}`; } export function clothSolverStepSimulation( clothObject: Object3D, stepsCount: number, constraintInfluence: number, viscosity: number, spring: number, uniformConfig: ClothMaterialUniformConfigRef ) { 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: Material, uniformConfig: ClothMaterialUniformConfig, uniformNameConfig: ClothMaterialUniformNameConfig ) { 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; }