![]() |
![]() |
Toute la difficulté ici, ou l'astuce plutot, est de bien positionner son tissu au départ, et de faire en sorte qu'il ait tendance à se regrouper en tas.
Une fois de plus, on va faire simple: un cube (aux bords arrondis), posé sur le sol:
#declare R = .1; #declare Cube = union { box { < R, 0, R>, < 1-R, 1, 1-R> } box { < R, 0, 0>, < 1-R, 1-R, 1> } box { < 0, 0, R>, < 1, 1-R, 1-R> } cylinder { < R, 0, R>, < R, 1-R, R>, R } cylinder { < R, 0, 1-R>, < R, 1-R, 1-R>, R } cylinder { < 1-R, 0, R>, < 1-R, 1-R, R>, R } cylinder { < 1-R, 0, 1-R>, < 1-R, 1-R, 1-R>, R } sphere { < R, 1-R, R>, R } sphere { < R, 1-R, 1-R>, R } sphere { < 1-R, 1-R, R>, R } sphere { < 1-R, 1-R, 1-R>, R } translate -.2*x } #declare Obstacle = union { plane { y,0 } object { Cube } }
On réuitilise la macro WriteClothFile(...) de l'exemple précédent, et on crée un drap rectangulaire (30 x 50 points):
WriteClothFile("drape.cth", 30, 50, 2/50, 20, 1.5) simcloth { environment Obstacle friction 0 gravity -.5*y damping 0.9 intervals 0.03 iterations 200 input "drape.cth" mesh_output "drape.msh" smooth_mesh on uv_mesh on } #declare Drap = mesh { #include "drape.msh" uv_mapping texture { pigment { checker color rgb<1, .5, .2> color rgb<1, .8 ,.4> scale <1/10, 3/50, 1> } } }
![]() |
Bon, c'est bien, mais ce n'est pas ce qu'on appelle un joli drapé (celui-ci est plutot banal...)
On va modifier le positionnement de chaque point du tissu, dans la macro WriteClothFile(...), en effectuant une rotation de -60 degrés autour de l'axe z, et en le déplacant légèrement vers la droite, comme ceci:
#local tempx = -l1/2 + i*nlng; #local tempz = -l2/2 + j*nlng; #local vtemp =; #local vtemp = vaxis_rotate(vtemp, z, -60); #local tempy = ht + (-1+2*rand(st))*nlng*0.1; #local vtemp = vtemp + tempy*y + .2*x; #write(file, vtemp.x, ",", vtemp.y, ",", vtemp.z, ", 0.0, 0.0, 0.0,\n")
On n'oublie pas de "remonter" le tissu, et on visualise la position de départ:
![]() |
Et ensuite, on laisse faire la nature... enfin ClothRay...
Pour les fainéants, le script complet: drape.pov
![]() |
||
![]() |
||
![]() |
||
Evidemment, l'absence de test de collision interne (tissu contre tissu) provoque quelques "erreurs" (voir en bas du drap).... Mais, on peut quand même obtenir des choses plus ou moins satisfaisantes.
![]() |
||
![]() |
![]() |