Skip to content

Commit 89ca101

Browse files
committed
divide integration steps & constraint iterations
Signed-off-by: Guilherme Avila <[email protected]>
1 parent a637315 commit 89ca101

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

src/glsl/constraints.frag.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ vec2 getUV( float id ) {
2929
vec3 getDisplacement( vec3 point0, vec3 point1, float restDistance ) {
3030
3131
float curDistance = distance( point0, point1 );
32-
return 1.5 * ( curDistance - restDistance ) * ( point1 - point0 ) / curDistance;
32+
if (curDistance < 0.0001) return vec3(0.0);
33+
return .5 * ( curDistance - restDistance ) * ( point1 - point0 ) / curDistance;
3334
3435
}
3536
@@ -80,7 +81,7 @@ void main() {
8081
displacement += getDisplacement( p0, p5, distancesB.x );
8182
displacement += ( adjacentB.y > 0.0 ) ? getDisplacement( p0, p6, distancesB.y ) : vec3( 0 );
8283
83-
p0 += 0.76 * displacement / ( ( adjacentB.y > 0.0 ) ? 6.0 : 5.0 );
84+
p0 += displacement / ( ( adjacentB.y > 0.0 ) ? 6.0 : 5.0 );
8485
8586
gl_FragColor = vec4( unpackPosition( p0 ), 1.0 );
8687

src/glsl/integrate.frag.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ void main() {
2929
vec3 prv = ( texture2D( tPrevious0, uv ).xyz + texture2D( tPrevious1, uv ).xyz ) / 1024.0;
3030
vec3 pos = ( texture2D( tPosition0, uv ).xyz + texture2D( tPosition1, uv ).xyz ) / 1024.0;
3131
32-
vec3 offset = ( org - pos ) * 260.5 * dt2;
33-
vec3 disp = ( pos - prv ) * 0.94 + pos;
32+
vec3 accel = 345.*(org-pos);
33+
vec3 vel = (pos-prv)/dt+accel*dt;
34+
vec3 disp = 0.98*vel*dt;
3435
35-
gl_FragColor = vec4( unpackPosition( disp + offset ), 1.0 );
36+
gl_FragColor = vec4( unpackPosition( pos + disp ), 1.0 );
3637
3738
}
3839
`;

src/modules/fbo.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ RESOLUTION,
1414
renderer, mesh, targetRT, normalsRT,
1515
originalRT, previousRT, positionRT,
1616
adjacentsRT, distancesRT,
17-
steps = 40, prevTime, dt;
18-
17+
iterations = 5, steps = 6,
18+
prevTime, dt;
1919

2020
const
2121
tSize = new THREE.Vector2(),
@@ -300,19 +300,18 @@ function computeVertexNormals( ) {
300300
function update() {
301301

302302
const now = performance.now();
303-
dt = Math.min(now - prevTime, 33.333)/1000;
303+
const frame_dt = Math.min(now - prevTime, 33.333)/1000;
304+
dt = frame_dt/steps;
304305
prevTime = now;
305306

306-
integrate();
307-
308307
let mouseUpdating = MOUSE.updating();
309308

310309
for ( let i = 0; i < steps; i++ ) {
311-
312-
if ( mouseUpdating && i < steps - 5 ) mouseOffset();
313-
314-
solveConstraints();
315-
310+
integrate();
311+
for ( let j = 0; j < iterations; j++ ) {
312+
if ( mouseUpdating && (i<steps-2||j<iterations-2) ) mouseOffset();
313+
solveConstraints();
314+
}
316315
}
317316

318317
computeVertexNormals();

0 commit comments

Comments
 (0)