if (res && !kd_res_end(res)) {
Vec3 nearest;
kd_res_item3f(res, &nearest.x, &nearest.y, &nearest.z);
+ kd_res_free(res);
if(distance_sq(rpoint, nearest) < min_dist * min_dist)
continue;
}
glVertex3f(p.x, p.y, p.z);
Vec3 dir = normalize(hair[i].pos - p) * hair_length;
Vec3 end = p + dir;
+ glColor3f(1, 1, 0);
glVertex3f(end.x, end.y, end.z);
/*
glColor3f(1, 1, 0);
hair[i].velocity += ((-hair[i].velocity * DAMPING) + accel) * dt;
Vec3 new_pos = hair[i].pos + hair[i].velocity * dt;
+ /* collision detection with the head */
+ Vec3 normal = xform.upper3x3() * hair[i].spawn_dir;
+ Vec3 root = xform * hair[i].spawn_pt;
+ Vec3 dir = new_pos - root;
+
+ normal.normalize();
+
+ /* angle that will cause the hair to be rendered inside the head */
+ float d = dot(dir, normal);
+ if(d < 0) {
+ new_pos += -d * normal;
+ }
+
hair[i].pos = handle_collision(new_pos);
dbg_force = force;