Différences

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
travaux:eponge_menger [2010/05/31 02:09]
nico Links to articles:mel-python:annexes:operateurs changed to articles:mel-python:operateurs
travaux:eponge_menger [2010/10/23 16:36]
nico
Ligne 1: Ligne 1:
 +~~META:date created=2010-04-18~~
 +{{tag>3d programmation python maya 3dsmax vray maths}}
 +======Éponge de Menger======
  
 +Fractale 3D dite [[wp>​Éponge de Menger]].
 +
 +**Principe grossier:** à chaque itération on coupe chaque cube en trois en long, en large et en travers, puis on retire les cubes centraux.
 +
 +Génération des modèles : Maya, Mel-Python. \\
 +Images : 3ds max, VRay.
 +
 +{{gallery>​..:​galerie?​500x500&​mengersponge_*&​showtitle}}
 +
 +^        Itération| ​    ​0 ​    ​| ​    ​1 ​    ​| ​    ​2 ​   |    3     ​| ​    ​4 ​    ​| ​     5       |
 +^         ​Éléments| ​    ​1 ​    ​| ​    ​20 ​   |   ​400 ​   |  8.000   ​| ​ 160.000 ​ |  3.200.000 ​  |
 +^        Polygones| ​    ​6 ​    ​| ​   120    |  2.400   ​| ​ 48.000 ​ |  960.000 ​ |  19.200.000 ​ |
 +^     ​Fichier .obj|  1.5 Ko   ​| ​ 30.5 Ko  |  640 Ko  |  13 Mo   ​| ​  62 Mo   ​| ​  ~500 Mo    |
 +^  Génération ((Ces temps correspondent à la génération du modèle sous Maya, pas au rendu des images. Temps enregistrés sur un i7 860 à 2.8 GHz.))| ​ < 1 sec  |  < 1 sec  |  1 sec   ​| ​ 5 sec   ​| ​ 640 sec  |      ?       |
 +^  Rendu ((Ces temps correspondent au rendu des images avec VRay sous 3ds max. Temps enregistrés sur un i7 860 à 2.8 GHz.))| ​ 20 sec  |  25 sec  |  40 sec   ​| ​ 75 sec   ​| ​ 286 sec  |      ?       |
 +
 +<file python mengerSponge.py>​
 +##
 +# Menger Sponge
 +# p01 2010
 +# Maya python script
 +##
 +
 +from maya.cmds import *
 +from math import *
 +
 +def mengerSponge(x,​ y, z, sz, it, lvl=0):
 +    if lvl==it:
 +        polyCube(w=sz,​ h=sz, d=sz)
 +        move(x, y, z)
 +    else:
 +        s = sz / 3.0;
 +        for i in range(-1, 2):
 +            for j in range(-1, 2):
 +                for k in range(-1 ,2):
 +                    sum = abs(i) + abs(j) + abs(k)
 +                    if(sum and sum!=1):
 +                        mengerSponge(x+i*s,​y+j*s,​z+k*s,​s,​it,​lvl+1)
 +
 +def run(it=0, sz=50.0):
 +    if objExists('​pCube1'​):​
 +        select(all=True)
 +        delete()
 +    mengerSponge(0,​ 0, 0, sz, it)
 +    select(cl=True)
 +    viewFit()
 +
 +def win():
 +    window(t='​Menger Sponge'​)
 +    columnLayout(rs=20)
 +    intSliderGrp(l='​Iteration',​
 +        field=1, min=0, max=3, v=0,
 +        cc=lambda x:​run(int(x)))
 +   
 +run()
 +win()
 +</​file>​
 +
 +-> La pyramide de Sierpinski a été rendue selon la même méthode : [[pyramide_sierpinski]]