Différences
Ci-dessous, les différences entre deux révisions de la page.
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]] |