|
@@ -378,7 +378,7 @@
|
|
for ( let v = 0; v < triangles * 3; v ++ ) {
|
|
for ( let v = 0; v < triangles * 3; v ++ ) {
|
|
|
|
|
|
const triangleIndex = ~ ~ ( v / 3 );
|
|
const triangleIndex = ~ ~ ( v / 3 );
|
|
- const birdIndex = ~ ~ ( triangleIndex / trianglesPerBird )
|
|
|
|
|
|
+ const birdIndex = ~ ~ ( triangleIndex / trianglesPerBird );
|
|
const x = ( birdIndex % WIDTH ) / WIDTH;
|
|
const x = ( birdIndex % WIDTH ) / WIDTH;
|
|
const y = ~ ~ ( birdIndex / WIDTH ) / WIDTH;
|
|
const y = ~ ~ ( birdIndex / WIDTH ) / WIDTH;
|
|
|
|
|
|
@@ -468,18 +468,18 @@
|
|
|
|
|
|
const valuesChanger = function () {
|
|
const valuesChanger = function () {
|
|
|
|
|
|
- velocityUniforms[ "separationDistance" ].value = effectController.separation;
|
|
|
|
- velocityUniforms[ "alignmentDistance" ].value = effectController.alignment;
|
|
|
|
- velocityUniforms[ "cohesionDistance" ].value = effectController.cohesion;
|
|
|
|
- velocityUniforms[ "freedomFactor" ].value = effectController.freedom;
|
|
|
|
|
|
+ velocityUniforms[ 'separationDistance' ].value = effectController.separation;
|
|
|
|
+ velocityUniforms[ 'alignmentDistance' ].value = effectController.alignment;
|
|
|
|
+ velocityUniforms[ 'cohesionDistance' ].value = effectController.cohesion;
|
|
|
|
+ velocityUniforms[ 'freedomFactor' ].value = effectController.freedom;
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
valuesChanger();
|
|
valuesChanger();
|
|
|
|
|
|
- gui.add( effectController, "separation", 0.0, 100.0, 1.0 ).onChange( valuesChanger );
|
|
|
|
- gui.add( effectController, "alignment", 0.0, 100, 0.001 ).onChange( valuesChanger );
|
|
|
|
- gui.add( effectController, "cohesion", 0.0, 100, 0.025 ).onChange( valuesChanger );
|
|
|
|
|
|
+ gui.add( effectController, 'separation', 0.0, 100.0, 1.0 ).onChange( valuesChanger );
|
|
|
|
+ gui.add( effectController, 'alignment', 0.0, 100, 0.001 ).onChange( valuesChanger );
|
|
|
|
+ gui.add( effectController, 'cohesion', 0.0, 100, 0.025 ).onChange( valuesChanger );
|
|
gui.close();
|
|
gui.close();
|
|
|
|
|
|
initBirds();
|
|
initBirds();
|
|
@@ -501,8 +501,8 @@
|
|
fillPositionTexture( dtPosition );
|
|
fillPositionTexture( dtPosition );
|
|
fillVelocityTexture( dtVelocity );
|
|
fillVelocityTexture( dtVelocity );
|
|
|
|
|
|
- velocityVariable = gpuCompute.addVariable( "textureVelocity", document.getElementById( 'fragmentShaderVelocity' ).textContent, dtVelocity );
|
|
|
|
- positionVariable = gpuCompute.addVariable( "texturePosition", document.getElementById( 'fragmentShaderPosition' ).textContent, dtPosition );
|
|
|
|
|
|
+ velocityVariable = gpuCompute.addVariable( 'textureVelocity', document.getElementById( 'fragmentShaderVelocity' ).textContent, dtVelocity );
|
|
|
|
+ positionVariable = gpuCompute.addVariable( 'texturePosition', document.getElementById( 'fragmentShaderPosition' ).textContent, dtPosition );
|
|
|
|
|
|
gpuCompute.setVariableDependencies( velocityVariable, [ positionVariable, velocityVariable ] );
|
|
gpuCompute.setVariableDependencies( velocityVariable, [ positionVariable, velocityVariable ] );
|
|
gpuCompute.setVariableDependencies( positionVariable, [ positionVariable, velocityVariable ] );
|
|
gpuCompute.setVariableDependencies( positionVariable, [ positionVariable, velocityVariable ] );
|
|
@@ -510,16 +510,16 @@
|
|
positionUniforms = positionVariable.material.uniforms;
|
|
positionUniforms = positionVariable.material.uniforms;
|
|
velocityUniforms = velocityVariable.material.uniforms;
|
|
velocityUniforms = velocityVariable.material.uniforms;
|
|
|
|
|
|
- positionUniforms[ "time" ] = { value: 0.0 };
|
|
|
|
- positionUniforms[ "delta" ] = { value: 0.0 };
|
|
|
|
- velocityUniforms[ "time" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "delta" ] = { value: 0.0 };
|
|
|
|
- velocityUniforms[ "testing" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "separationDistance" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "alignmentDistance" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "cohesionDistance" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "freedomFactor" ] = { value: 1.0 };
|
|
|
|
- velocityUniforms[ "predator" ] = { value: new THREE.Vector3() };
|
|
|
|
|
|
+ positionUniforms[ 'time' ] = { value: 0.0 };
|
|
|
|
+ positionUniforms[ 'delta' ] = { value: 0.0 };
|
|
|
|
+ velocityUniforms[ 'time' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'delta' ] = { value: 0.0 };
|
|
|
|
+ velocityUniforms[ 'testing' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'separationDistance' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'alignmentDistance' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'cohesionDistance' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'freedomFactor' ] = { value: 1.0 };
|
|
|
|
+ velocityUniforms[ 'predator' ] = { value: new THREE.Vector3() };
|
|
velocityVariable.material.defines.BOUNDS = BOUNDS.toFixed( 2 );
|
|
velocityVariable.material.defines.BOUNDS = BOUNDS.toFixed( 2 );
|
|
|
|
|
|
velocityVariable.wrapS = THREE.RepeatWrapping;
|
|
velocityVariable.wrapS = THREE.RepeatWrapping;
|
|
@@ -549,11 +549,11 @@
|
|
|
|
|
|
// For Vertex and Fragment
|
|
// For Vertex and Fragment
|
|
birdUniforms = {
|
|
birdUniforms = {
|
|
- "color": { value: new THREE.Color( 0xff2200 ) },
|
|
|
|
- "texturePosition": { value: null },
|
|
|
|
- "textureVelocity": { value: null },
|
|
|
|
- "time": { value: 1.0 },
|
|
|
|
- "delta": { value: 0.0 }
|
|
|
|
|
|
+ 'color': { value: new THREE.Color( 0xff2200 ) },
|
|
|
|
+ 'texturePosition': { value: null },
|
|
|
|
+ 'textureVelocity': { value: null },
|
|
|
|
+ 'time': { value: 1.0 },
|
|
|
|
+ 'delta': { value: 0.0 }
|
|
};
|
|
};
|
|
|
|
|
|
// THREE.ShaderMaterial
|
|
// THREE.ShaderMaterial
|
|
@@ -652,22 +652,22 @@
|
|
if ( delta > 1 ) delta = 1; // safety cap on large deltas
|
|
if ( delta > 1 ) delta = 1; // safety cap on large deltas
|
|
last = now;
|
|
last = now;
|
|
|
|
|
|
- positionUniforms[ "time" ].value = now;
|
|
|
|
- positionUniforms[ "delta" ].value = delta;
|
|
|
|
- velocityUniforms[ "time" ].value = now;
|
|
|
|
- velocityUniforms[ "delta" ].value = delta;
|
|
|
|
- birdUniforms[ "time" ].value = now;
|
|
|
|
- birdUniforms[ "delta" ].value = delta;
|
|
|
|
|
|
+ positionUniforms[ 'time' ].value = now;
|
|
|
|
+ positionUniforms[ 'delta' ].value = delta;
|
|
|
|
+ velocityUniforms[ 'time' ].value = now;
|
|
|
|
+ velocityUniforms[ 'delta' ].value = delta;
|
|
|
|
+ birdUniforms[ 'time' ].value = now;
|
|
|
|
+ birdUniforms[ 'delta' ].value = delta;
|
|
|
|
|
|
- velocityUniforms[ "predator" ].value.set( 0.5 * mouseX / windowHalfX, - 0.5 * mouseY / windowHalfY, 0 );
|
|
|
|
|
|
+ velocityUniforms[ 'predator' ].value.set( 0.5 * mouseX / windowHalfX, - 0.5 * mouseY / windowHalfY, 0 );
|
|
|
|
|
|
mouseX = 10000;
|
|
mouseX = 10000;
|
|
mouseY = 10000;
|
|
mouseY = 10000;
|
|
|
|
|
|
gpuCompute.compute();
|
|
gpuCompute.compute();
|
|
|
|
|
|
- birdUniforms[ "texturePosition" ].value = gpuCompute.getCurrentRenderTarget( positionVariable ).texture;
|
|
|
|
- birdUniforms[ "textureVelocity" ].value = gpuCompute.getCurrentRenderTarget( velocityVariable ).texture;
|
|
|
|
|
|
+ birdUniforms[ 'texturePosition' ].value = gpuCompute.getCurrentRenderTarget( positionVariable ).texture;
|
|
|
|
+ birdUniforms[ 'textureVelocity' ].value = gpuCompute.getCurrentRenderTarget( velocityVariable ).texture;
|
|
|
|
|
|
renderer.render( scene, camera );
|
|
renderer.render( scene, camera );
|
|
|
|
|