int cuantos = 40000;
Pelo[] lista ;
float radio = 100;
float rx = 0;
float ry =0;
void setup() {
 size(1024, 768, P3D);
 radio = height/1.5;
 lista = new Pelo[cuantos];
 for (int i = 0; i < lista.length; i++) {
 lista[i] = new Pelo();
 }
 noiseDetail(3);
}
void draw() {
 background(200);
 float rxp = (mouseX-(width/2)) * 0.005;
 float ryp = (mouseY-(height/2)) * 0.005;
 rx = rx*0.9 + rxp*0.1;
 ry = ry*0.9 + ryp*0.1;
 translate(width/2, height/2);
 rotateY(rx);
 rotateX(ry);
 fill(630);
 noStroke();
 sphere(radio);
 for (int i = 0; i < lista.length; i++) {
 lista[i].dibujar();
 }
}
class Pelo
{
 float z = random(-radio, radio);
 float phi = random(TWO_PI);
 float largo = random(0.15, 1.2);
 float theta = asin(z/radio);
 Pelo() { // what's wrong with a constructor here
 z = random(-radio, radio);
 phi = random(TWO_PI);
 largo = random(1.15, 1.2);
 theta = asin(z/radio);
 }
 void dibujar() {
 float off = (noise(millis() * 0.0005, sin(phi))-0.5) * 0.3;
 float offb = (noise(millis() * 0.0007, sin(z) * 0.01)-0.5) * 0.3;
 float thetaff = theta+off;
 float phff = phi+offb;
 float x = radio * cos(theta) * cos(phi);
 float y = radio * cos(theta) * sin(phi);
 float z = radio * sin(theta);
 float xo = radio * cos(thetaff) * cos(phff);
 float yo = radio * cos(thetaff) * sin(phff);
 float zo = radio * sin(thetaff);
 float xb = xo * largo;
 float yb = yo * largo;
 float zb = zo * largo;
 strokeWeight(2);
 beginShape(LINES);
 stroke(0);
 vertex(x, y, z);
 stroke(200, 150);
 vertex(xb, yb, zb);
 endShape();
 }
} 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You may also like