day3 (german!) libs
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
import processing.opengl.*;
|
||||
|
||||
import mathematik.Vector3f;
|
||||
|
||||
import teilchen.Particle;
|
||||
import teilchen.Physics;
|
||||
import teilchen.constraint.IConstraint;
|
||||
import teilchen.constraint.Stick;
|
||||
import teilchen.force.Attractor;
|
||||
import teilchen.force.Gravity;
|
||||
import teilchen.integration.Verlet;
|
||||
|
||||
|
||||
Physics mPhysics;
|
||||
|
||||
Particle[][] mParticles;
|
||||
|
||||
final int GRID_WIDTH = 32;
|
||||
|
||||
final int GRID_HEIGHT = 16;
|
||||
|
||||
Attractor mAttractor;
|
||||
|
||||
void setup() {
|
||||
size(640, 480, OPENGL);
|
||||
frameRate(60);
|
||||
|
||||
mPhysics = new Physics();
|
||||
mPhysics.contraint_iterations_per_steps = 5;
|
||||
|
||||
Verlet myVerlet = new Verlet();
|
||||
myVerlet.damping(0.9f);
|
||||
mPhysics.setInegratorRef(myVerlet);
|
||||
mPhysics.add(new Gravity(new Vector3f(0, 1000f, 0)));
|
||||
|
||||
mAttractor = new Attractor();
|
||||
mAttractor.strength(-15000);
|
||||
mAttractor.radius(300);
|
||||
mPhysics.add(mAttractor);
|
||||
|
||||
mParticles = new Particle[GRID_WIDTH][GRID_HEIGHT];
|
||||
|
||||
/* setup cloth */
|
||||
float mGridStepX = ((float)width / GRID_WIDTH);
|
||||
float mGridStepY = (((float)height * 0.5f) / GRID_HEIGHT);
|
||||
for (int y = 0; y < GRID_HEIGHT; y++) {
|
||||
for (int x = 0; x < GRID_WIDTH; x++) {
|
||||
mParticles[x][y] = mPhysics.makeParticle();
|
||||
mParticles[x][y].position().set((x + 0.5f) * mGridStepX,
|
||||
y * mGridStepY,
|
||||
random(0, 1));
|
||||
mParticles[x][y].old_position().set(mParticles[x][y].position());
|
||||
mParticles[x][y].mass(0.1f);
|
||||
|
||||
final float DAMPING = 0.9f;
|
||||
if (y > 0) {
|
||||
Stick myStick = new Stick(mParticles[x][y - 1],
|
||||
mParticles[x][y],
|
||||
mGridStepY);
|
||||
myStick.damping(DAMPING);
|
||||
mPhysics.add(myStick);
|
||||
}
|
||||
if (x > 0) {
|
||||
Stick myStick = new Stick(mParticles[x - 1][y],
|
||||
mParticles[x][y],
|
||||
mGridStepX);
|
||||
myStick.damping(DAMPING);
|
||||
mPhysics.add(myStick);
|
||||
}
|
||||
if (x > 0 && y > 0) {
|
||||
Stick myStick1 = new Stick(mParticles[x - 1][y - 1],
|
||||
mParticles[x][y],
|
||||
new Vector3f(mGridStepX, mGridStepY).length());
|
||||
mPhysics.add(myStick1);
|
||||
Stick myStick2 = new Stick(mParticles[x][y - 1],
|
||||
mParticles[x - 1][y],
|
||||
new Vector3f(mGridStepX, mGridStepY).length());
|
||||
mPhysics.add(myStick2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* fix first row */
|
||||
for (int x = 0; x < mParticles.length; x++) {
|
||||
mParticles[x][0].fixed(true);
|
||||
}
|
||||
}
|
||||
|
||||
void draw() {
|
||||
|
||||
/* update */
|
||||
mAttractor.position().set(mouseX, mouseY, 50);
|
||||
mPhysics.step(1.0 / frameRate);
|
||||
|
||||
background(255);
|
||||
|
||||
/* draw sticks */
|
||||
stroke(0, 127);
|
||||
|
||||
for (int i = 0; i < mPhysics.constraints().size(); i++) {
|
||||
IConstraint mConstraint = mPhysics.constraints().get(i);
|
||||
if (mConstraint instanceof Stick) {
|
||||
final Stick myStick = (Stick)mConstraint;
|
||||
line(myStick.a().position().x,
|
||||
myStick.a().position().y,
|
||||
myStick.a().position().z,
|
||||
myStick.b().position().x,
|
||||
myStick.b().position().y,
|
||||
myStick.b().position().z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user