Page 1 sur 1

Morphing 3D

Publié : sam. 06/mai/2006 13:09
par comtois
J'ai tout regroupé

à l'occasion j'ajouterai peut-être d'autres formes.

Code : Tout sélectionner

;Comtois 07/05/06
;PB4.0 Beta 11
;32 formes 3D

;Site intéressant pour choisir une couleur
;http://pourpre.com/chroma/dico.php?typ=alpha

;Pour obtenir d'autres formes
;http://www.mathcurve.com/surfaces/surfaces.shtml

Texte$ = "Morphing 3D"

Resultat = MessageRequester(Texte$,"Full Screen ?",#PB_MessageRequester_YesNo)
If Resultat = 6     
  FullScreen=1
Else           
  FullScreen=0
EndIf

;- Initialisation
If InitEngine3D() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 )
   End
EndIf
   
If InitSprite() = 0 Or InitKeyboard() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
EndIf

If Fullscreen
   ExamineDesktops()
   Sx = DesktopWidth(0)
   Sy = DesktopHeight(0)
   Sd = DesktopDepth(0)
  OpenScreen(Sx, Sy,Sd, Texte$)
Else
  OpenWindow(0,0, 0, 800 , 600 ,Texte$,#PB_Window_ScreenCentered)
  OpenWindowedScreen(WindowID(0),0,0, 800 , 600,0,0,0)
EndIf

Structure s_Vecteur
   x.f
   y.f
   z.f
EndStructure

Structure Vertex
   px.f
   py.f
   pz.f
   nx.f
   ny.f
   nz.f
   co.l
   U.f
   V.f
EndStructure

Structure FTriangle
   f1.w
   f2.w
   f3.w
EndStructure

Global Angle.f,Pas.f, CameraMode.l
Global *VBuffer,*IBuffer
Global b.f, k.f
Global NbSommet, NbTriangle, Forme3D

#E = 2.71828182
#NombreForme3D = 32
Forme3D = 31

NbSommet = 25000
NbTriangle = NbSommet

Global Dim Final.s_Vecteur(NbSommet)
Global Dim Intermediaire.Vertex(NbSommet)
*IBuffer = AllocateMemory(SizeOf(FTriangle) * NbTriangle)

Procedure.f Exp(value.f)
  ProcedureReturn Pow(#E, value)
EndProcedure

Procedure CoordonneesPoint(t,u.f,v.f,*Point.s_Vecteur)
   Select t
      Case 1 ;
         *Point\x = (3 + Cos(u)) * Cos(u)
         *Point\y = (3 + Cos(v)) * Sin(u)
         *Point\z = Sin(v)
                            
      Case 2 ; Astroide
         *Point\x = 4 * Cos(u) * Cos(u) * Cos(u) * Cos(v) * Cos(v) * Cos(v)
         *Point\y = 4 * Sin(u) * Sin(u) * Sin(u) * Cos(v) * Cos(v) * Cos(v)
         *Point\z = 4 * Sin(v) * Sin(v) * Sin(v)   

      Case 3 ; Tore
         *Point\x = (3 + Cos(v)) * Cos(u)
         *Point\y = (3 + Cos(v)) * Sin(u)
         *Point\z = Sin(v)
                 
      Case 4 ; Sphere
         *Point\x = 3 * Cos(u) * Cos(v)
         *Point\y = 3 * Sin(u) * Cos(v)
         *Point\z = 3 * Sin(v)
         
      Case 5 ; Cylindre creux
         *Point\x = 3 * Cos(u) * Cos(u)
         *Point\y = 3 * Cos(u) * Sin(u)
         *Point\z = 3 * Sin(v)
     
      Case 6 ;
         *Point\x = 3 * Cos(v) * Cos(u)
         *Point\y = 3 * Cos(v) * Sin(u)
         *Point\z = 3 * Sin(u)   

      Case 7 ;
         *Point\x = 3 * Cos(v) * Cos(v)
         *Point\y = 3 * Cos(v) * Sin(u)
         *Point\z = 3 * Sin(v)
         
      Case 8 ;
         *Point\x = 3 * Cos(u) * Cos(v)
         *Point\y = 3 * Sin(u) * Sin(v)
         *Point\z = 3 * Sin(u)
     
      Case 9 ;
         *Point\x = 3 * Cos(u) * Cos(v)
         *Point\y = 3 * Sin(u) * Sin(u)
         *Point\z = 3 * Sin(v)
         
      Case 10 ; Plan
         *Point\x = 3 * Cos(u) * Cos(u)
         *Point\y = 3 * Sin(u) * Sin(u)
         *Point\z = 3 * Sin(v)   
                 
      Case 11 ;
         *Point\x = 3 * Sin(u) * Cos(u)
         *Point\y = 3 * Sin(u) * Sin(v)
         *Point\z = 3 * Sin(v)
         
      Case 12 ;
         *Point\x = 3 * Cos(v) * Cos(v)
         *Point\y = 3 * Sin(v) * Sin(u)
         *Point\z = 3 * Sin(v)

      Case 13 ;
         *Point\x = 3 * Cos(u) * Cos(u)
         *Point\y = 3 * Cos(v) * Sin(v)
         *Point\z = 3 * Sin(v)

      Case 14 ; Coquillage
         *Point\x = 3 * (exp(u/k) * Cos(u) * (1 + b * Cos(v)))
         *Point\y = 3 * (exp(u/k) * Sin(u) * (1 + b * Cos(v)))
         *Point\z = 3 * (exp(u/k) * (1 + b * Sin(v)))
         
      Case 15 ; Trompette
         *Point\x = u * Cos(v)
         *Point\y = u * Sin(v)
         *Point\z = 1.0 / u   
         
      Case 16 ; le hasard fait bien les choses
         *Point\x = u * Cos(v)
         *Point\y = u * Sin(v)
         *Point\z = Cos(v) * Sin(u)     

      Case 17 ; Hélicoïde
         *Point\x = u * Cos(v)
         *Point\y = u * Sin(v)
         *Point\z = v
         
      Case 18 ; Hyperboloïde
         *Point\x =  0.05 * Cos(v) / Cos(u)
         *Point\y =  0.05 * Sin(v) / Cos(u)
         *Point\z =  0.05 * Tan(u)
         
      Case 19 ;Coquillage fin
         *Point\x =  0.45 * exp(u/k) * Cos(u) * (1 + b * Cos(v)) 
         *Point\y =  0.45 * exp(u/k) * Sin(u) * (1 + b * Cos(v))
         *Point\z =  0.45 * exp(u/k) * (k + b * Sin(v)) 
         
      Case 20 ;
         *Point\x = (2 + Cos(u)) * Cos(v) 
         *Point\y = (2 + Cos(v)) * Sin(u)
         *Point\z = Sin(v)

      Case 21 ; Disque
         *Point\x = 2 * Sin(v)  
         *Point\y = 2 * Sin(v)
         *Point\z = 3 * Cos(v) * Sin(u)    
         
      Case 22 ; Chapeau
         *Point\x = 3 * Cos(u)*Cos(v)
         *Point\y = 3 * Cos(u)*Sin(v)
         *Point\z = 3 * Pow(Sin(u),8) ; Changez 8 pour accentuer le rebord 

      Case 23 ; 
         *Point\x = 3 * Cos(v)*Cos(u)
         *Point\y = Sin(v)
         *Point\z = v
                  
      Case 24 ; 
         *Point\x = 3 * Pow(Cos(u)*Cos(v),3)
         *Point\y = 3 * Pow(Cos(u)*Sin(v),3)
         *Point\z = 3 * Pow(Sin(u),8)

      Case 25 ; 
         *Point\x = 3 * Pow(Cos(u)*Cos(v),3)
         *Point\y = 18 * Pow(Cos(u)*Sin(u),3)
         *Point\z = 5 * Pow(Sin(u),4)

      Case 26 ; 
         *Point\x = 2.5 * Sin(u)
         *Point\y = 2.5 * Cos(v)
         *Point\z = 3 * Pow(Sin(u),90)  
         
      Case 27 ; 
         *Point\x = 0.15 * exp(v) * Cos(u) 
         *Point\y = 0.15 * exp(v) * Sin(u) 
         *Point\z = 0.6 * Sin(v)    
      
      Case 28 ; 
         *Point\x = 2*Cos(v)+2*Cos(3*v) 
         *Point\y = 2*Sin(v)-2*Sin(3*v)
         *Point\z = Sin(2*u)      
      
      Case 29 ; 
         *Point\x = 2*Cos(v)
         *Point\y = 2*Sin(v)*Sin(u)
         *Point\z = 2*Sin(2*u)    
       
      Case 30 ;
         *Point\x = 2 * Cos(2*u)*Cos(v)
         *Point\y = 3*Sin(v)*Sin(u)
         *Point\z = 4*Sin(u)    
         
      Case 31 ;
         *Point\x = 2 * Cos(2*u)*Cos(v)
         *Point\y = 3 * Sin(v)*Sin(u)
         *Point\z = 3 * Sin(2*u) 
           
     Case 32 ;
         *Point\x = 2 * Pow(Cos(v),3)
         *Point\y = 3 * Sin(v)
         *Point\z = 3 * Sin(2*u)*Sin(v)                                                 
   EndSelect
EndProcedure

Macro vcross(N, x1, y1, z1, x2, y2, z2)
   N\x = (((y1) * (z2)) - ((z1) * (y2)))
   N\y = (((z1) * (x2)) - ((x1) * (z2)))
   N\z = (((x1) * (y2)) - ((y1) * (x2)))
EndMacro

Procedure CalculMesh(No.l)
   Define.l p, pp
   Define.f umin, umax, vmin, vmax, uiter, viter, uu, vv
   Define.f x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4
   Define.f nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4
   Define.s_Vecteur n1, n2, n3, n4, n5, n6, n7, n8, n9   
   Define.s_Vecteur vn1, vn2, vn3, vn4
   Define.s_Vecteur p1, p2, p3, p4
   Define.s_Vecteur np1, np2, np3, np4
   
   DoubleTriangle = 0

   umin.f  = -#PI               
   umax.f  = #PI     
   vmin.f  = -#PI     
   vmax.f  =  #PI     

   
   NbSommet = 24000
   If No = 9 Or No = 10 
      vmin.f  = -#PI/2     
      vmax.f  =  #PI/2    
   ElseIf No = 14 ; Coquillage
      k = 10     
      b = 0.49268
      umin.f  = -34               
      umax.f  = -4   
      vmin.f  = 0        ;
      vmax.f  =  6.3
      DoubleTriangle = 1
      NbSommet = 25000
   ElseIf No = 15 ; Trompette
      umin.f  = #PI/16           
      umax.f  = #PI  
      DoubleTriangle = 1    
   ElseIf No = 17 ; Hélicoïde
      DoubleTriangle = 1  
   ElseIf No = 18  
      vmin.f  = -#PI/2           
      vmax.f  = #PI/2   
   ElseIf  No = 19 ; Coquillage allongé   
      k       = 25       
      b.f     = 5        
      umin.f  = -90          
      umax.f  = -26.7  
      vmin.f  = 0        
      vmax.f  = #PI*2 
      DoubleTriangle = 1
   ElseIf No = 21 ; Disque
      vmin.f  = -#PI/2     
      vmax.f  =  #PI/2   
   ElseIf No = 27
      DoubleTriangle = 1  
   EndIf
   
   
   uiter.f = 150               ;  nombre de pas en u
   viter.f = 40                ;  nombre de pas en v
   iu.f    = (umax-umin)/uiter ;   increment par pas
   iv.f    = (vmax-vmin)/viter ;   
     
   *PtrF.FTriangle = *IBuffer
   uu = umin   
   p = 0
   pp = 0
   ;Coul = $318CE7
   Coul = Random($FFFFFF)
   While (uu<=umax)                     
      vv = vmin
      While (vv<=vmax)                     
         ;POINTS     
         CoordonneesPoint(No,uu,vv,@p1)
           uu=uu+iu   
         CoordonneesPoint(No,uu,vv,@p2)           
         vv=vv+iv
         CoordonneesPoint(No,uu,vv,@p3)
         uu=uu-iu
         CoordonneesPoint(No,uu,vv,@p4)
         vv=vv-iv
         ;NORMALS                 
         uu=uu+2*iu
         CoordonneesPoint(No,uu,vv,@np1)
         uu=uu-2*iu
         vv=vv+2*iv
         CoordonneesPoint(No,uu,vv,@np2)
         vv=vv-2*iv
         uu=uu-iu
         CoordonneesPoint(No,uu,vv,@np3)
         uu=uu+iu
         vv=vv-iv
         CoordonneesPoint(No,uu,vv,@np4)
         vv=vv+iv
         vcross(n1, np2\x-p4\x, np2\y-p4\y, np2\z-p4\z, np1\x-p2\x, np1\y-p2\y, np1\z-p2\z)
         vcross(n2,  p4\x-p3\x,  p4\y-p3\y,  p4\z-p3\z, np2\x-p4\x, np2\y-p4\y, np2\z-p4\z)
         vcross(n3, np3\x-p1\x, np3\y-p1\y, np3\z-p1\z, np2\x-p4\x, np2\y-p4\y, np2\z-p4\z)
         vcross(n4,  p3\x-p2\x,  p3\y-p2\y,  p3\z-p2\z, np1\x-p2\x, np1\y-p2\y, np1\z-p2\z)
         vcross(n5,  p1\x-p2\x,  p1\y-p2\y,  p1\z-p2\z,  p3\x-p2\x,  p3\y-p2\y,  p3\z-p2\z)
         vcross(n6, np3\x-p1\x, np3\y-p1\y, np3\z-p1\z,  p4\x-p1\x,  p4\y-p1\y,  p4\z-p1\z)
         vcross(n7, np1\x-p2\x, np1\y-p2\y, np1\z-p2\z, np4\x-p1\x, np4\y-p1\y, np4\z-p1\z)
         vcross(n8, np4\x-p1\x, np4\y-p1\y, np4\z-p1\z,  p1\x-p2\x,  p1\y-p2\y,  p1\z-p2\z)
         vcross(n9, np4\x-p1\x, np4\y-p1\y, np4\z-p1\z, np3\x-p1\x, np3\y-p1\y, np3\z-p1\z)
         
         
         vn1\x = n5\x+n6\x+n8\x+n9\x   
         vn1\y = n5\y+n6\y+n8\y+n9\y
         vn1\z = n5\z+n6\z+n8\z+n9\z
         
         vn2\x = n4\x+n5\x+n7\x+n8\x   
         vn2\y = n4\y+n5\y+n7\y+n8\y
         vn2\z = n4\z+n5\z+n7\z+n8\z
           
         vn3\x = n1\x+n2\x+n4\x+n5\x   
         vn3\y = n1\y+n2\y+n4\y+n5\y
         vn3\z = n1\z+n2\z+n4\z+n5\z
         
         vn4\x = n2\x+n3\x+n5\x+n6\x   
         vn4\y = n2\y+n3\y+n5\y+n6\y
         vn4\z = n2\z+n3\z+n5\z+n6\z
 
         Final(pp)\x = p1\x
         Final(pp)\y = p1\y
         Final(pp)\z = p1\z
         Intermediaire(pp)\nx = vn1\x
         Intermediaire(pp)\ny = vn1\y
         Intermediaire(pp)\nz = vn1\z
         Intermediaire(pp)\co = Coul
         Intermediaire(pp)\u = 0
         Intermediaire(pp)\v = 0
         pp + 1
       
         Final(pp)\x = p2\x
         Final(pp)\y = p2\y
         Final(pp)\z = p2\z
         Intermediaire(pp)\nx = vn2\x
         Intermediaire(pp)\ny = vn2\y
         Intermediaire(pp)\nz = vn2\z
         Intermediaire(pp)\co = Coul
         Intermediaire(pp)\u = 1
         Intermediaire(pp)\v = 0
         pp + 1
         
         Final(pp)\x = p3\x
         Final(pp)\y = p3\y
         Final(pp)\z = p3\z
         Intermediaire(pp)\nx = vn3\x
         Intermediaire(pp)\ny = vn3\y
         Intermediaire(pp)\nz = vn3\z
         Intermediaire(pp)\co = Coul
         Intermediaire(pp)\u = 1
         Intermediaire(pp)\v = 1
         pp + 1
                   
         Final(pp)\x = p4\x
         Final(pp)\y = p4\y
         Final(pp)\z = p4\z
         Intermediaire(pp)\nx = vn4\x
         Intermediaire(pp)\ny = vn4\y
         Intermediaire(pp)\nz = vn4\z
         Intermediaire(pp)\co = Coul
         Intermediaire(pp)\u = 0
         Intermediaire(pp)\v = 1
         pp + 1
       
         ;TRIANGLES     
         *PtrF\f1 = p          ; p1
         *PtrF\f2 = p + 1      ; p2
         *PtrF\f3 = p + 2      ; p3
         *PtrF + SizeOf(FTriangle)
         *PtrF\f1 = p          ; p1
         *PtrF\f2 = p + 2      ; p3
         *PtrF\f3 = p + 3      ; p4
         *PtrF + SizeOf(FTriangle)
         If DoubleTriangle
            NbTriangle = NbSommet
            *PtrF\f3 = p          ; p1
            *PtrF\f2 = p + 1      ; p2
            *PtrF\f1 = p + 2      ; p3
            *PtrF + SizeOf(FTriangle)
            *PtrF\f3 = p          ; p1
            *PtrF\f2 = p + 2      ; p3
            *PtrF\f1 = p + 3      ; p4
            *PtrF + SizeOf(FTriangle)
         Else
            NbTriangle = NbSommet / 2
         EndIf
     
          p + 4

         vv = vv+iv
      Wend                 
      uu = uu+iu
   Wend   
   
   If IsMesh(0) = 0
      If CreateMesh(0,100)
         Flag = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
         SetMeshData(0,Flag         ,Intermediaire(),NbSommet)
         SetMeshData(0,#PB_Mesh_Face,*IBuffer,NbTriangle)
       EndIf
   EndIf
   SetMeshData(0,#PB_Mesh_Face,*IBuffer,NbTriangle)
   
EndProcedure
Procedure.f  CurveValue(actuelle.f, Cible.f, P.f)
  Define.f Delta, Valeur
 
  Delta = Cible - actuelle
  If P > 1000 : P = 1000 : EndIf
  Valeur = actuelle + (Delta * P / 1000)
  ProcedureReturn Valeur
EndProcedure
 
Procedure Morphing()
   Delta.f = 0.01
   r.f = NbSommet*20
   For i = 0 To NbSommet-1
      ;If Final(i)\x > Intermediaire(i)\px : Intermediaire(i)\px + Delta : EndIf
      ;If Final(i)\x < Intermediaire(i)\px : Intermediaire(i)\px - Delta : EndIf
      ;If Final(i)\y > Intermediaire(i)\py : Intermediaire(i)\py + Delta : EndIf
      ;If Final(i)\y < Intermediaire(i)\py : Intermediaire(i)\py - Delta : EndIf
      ;If Final(i)\z > Intermediaire(i)\pz : Intermediaire(i)\pz + Delta : EndIf
      ;If Final(i)\z < Intermediaire(i)\pz : Intermediaire(i)\pz - Delta : EndIf
     Intermediaire(i)\px = CurveValue(Intermediaire(i)\px, Final(i)\x, 16)
     Intermediaire(i)\py = CurveValue(Intermediaire(i)\py, Final(i)\y, 16)
     Intermediaire(i)\pz = CurveValue(Intermediaire(i)\pz, Final(i)\z, 16)
   Next i
   
   Flag = #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate | #PB_Mesh_Color
   SetMeshData(0,Flag         ,Intermediaire(),NbSommet)
EndProcedure


;-Mesh

CalculMesh(Forme3D)

;-Texture
CreateTexture(0,128, 128)
StartDrawing(TextureOutput(0))
  Box(0, 0, 128, 128, $FFFFFF)
StopDrawing()

;-Material
CreateMaterial(0,TextureID(0))
MaterialShadingMode(0,#PB_Material_Phong)
MaterialAmbientColor(0,-1)

;-Entity
CreateEntity(0,MeshID(0),MaterialID(0))
ScaleEntity(0,35,35,35)

;-Camera
CreateCamera(0, 0, 0 , 100 , 100)
CameraBackColor(0,RGB(0,0,255))
MoveCamera(0,0,0,-400)
CameraLookAt(0,EntityX(0),EntityY(0),EntityZ(0))


;-Light
AmbientColor(RGB(75,75,75))
CreateLight(0,RGB(155,155,155),EntityX(0)+150,EntityY(0),EntityZ(0))

pas = 0.9
Hasard = 0

Repeat
   If fullscreen = 0
      While WindowEvent() : Wend
   EndIf
   
    If Attente > 500
       
       If hasard 
         Forme3D = Random(#NombreForme3D) + 1
       Else
         Forme3D + 1
       EndIf  
       If Forme3D > #NombreForme3D : Forme3D = 1 : EndIf
       CalculMesh(Forme3D)
       Attente = 0
    EndIf   
   
   Morphing()
     
   Attente + 1
   
   Angle + Pas
   RotateEntity(0,angle,angle/2,-Angle)

   If ExamineKeyboard()
     If KeyboardReleased(#PB_Key_F1)
       CameraMode=1-CameraMode
       CameraRenderMode(0,CameraMode)
     ElseIf KeyboardReleased(#PB_Key_F2)
         CameraBackColor(0,0)
     ElseIf KeyboardReleased(#PB_Key_F3)
         CameraBackColor(0,RGB(255,0,0))
     ElseIf KeyboardReleased(#PB_Key_F4)
         CameraBackColor(0,RGB(255,255,0))  
     ElseIf KeyboardReleased(#PB_Key_F5)
         CameraBackColor(0,RGB(0,255,0)) 
     ElseIf KeyboardReleased(#PB_Key_F6)
         CameraBackColor(0,RGB(0,0,255))  
     ElseIf KeyboardReleased(#PB_Key_F7)
         CameraBackColor(0,RGB(0,255,255))    
     ElseIf KeyboardReleased(#PB_Key_F10)    
         Hasard = 1 - Hasard       
     EndIf
   EndIf
  RenderWorld()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)


Publié : sam. 06/mai/2006 14:06
par Frenchy Pilou
Avec un "fond" étoilé et une musique de Strauss, c'est un remake de 2001 l'Odyssée de l'espace de Kubrick :)

Sinon peut-être que ce programme gratoche (clone de Painter Classic)
peut intéresser
http://www.artweaver.de/index.php?id=4,73,0,0,1,0
Il a un langage de programmation (en plugin) (quasi du Purebasic) qui permet de manipuler l'apparence de n'importe quelle image :)
(slider la page pour les exemples)

Publié : sam. 06/mai/2006 18:19
par Good07
Y'a pas à dire, comtois, c'est le roi de la 3D en Pure. Vraiment superbe et en plus vraiment fluide.

Extra :D

On en veux encore même si je pige rien au programme. :wink:

:10:

Publié : sam. 06/mai/2006 20:11
par Droopy
Super, mais ça fait chauffer le CPU

Publié : sam. 06/mai/2006 22:05
par comtois
Good07 a écrit :On en veux encore même si je pige rien au programme.
C'est fait , j'ai édité le code dans le premier post, j'ai ajouté 4 ou 5 formes, et il y a un fond bleu , ça change :)

Droopy a écrit :Super, mais ça fait chauffer le CPU
ça chauffe beaucoup ? A quoi est-ce dû selon toi ?

Publié : sam. 06/mai/2006 22:18
par Droopy
L'activité CPU est à 100%, je suppose que cela est du au fait que c'est le CPU qui calcule tout, et non pas la carte 3D.

Publié : sam. 06/mai/2006 22:25
par flaith
un petit

Code : Tout sélectionner

  delay(20)
entre

Code : Tout sélectionner

  RenderWorld()
  FlipBuffers() 
et ca fait redescendre le temps CPU
:wink:

Publié : dim. 07/mai/2006 7:31
par comtois
C'est vrai que je mets rarement un delay() dans mes codes, en général je ne fais que du plein écran et je prends 100% de la CPU :)

Publié : lun. 26/mai/2008 17:45
par djes
Très sympa ce code! (avec du retard!) :P

Publié : lun. 26/mai/2008 17:58
par Backup
oui c'est impressionnant !

mais je mettrai un petit bemol :)

il faudrait que cela morphe aussi entre les resultats et le debut d'une nouvelle form

parce que actuellement cela créé un "a coups" :)

tu nous refait Thalassa ? :)

Publié : ven. 06/juin/2008 21:07
par Kwai chang caine
Moi, je donne mon avis de celui qui y connait "fifre".
Il est super beau cet oreiller marron.

Les ombres, c'est super bien fait, on s'y croirait.
Oouuuuaaaaah !!!! et ben en parlant d'oreiller........., je vais aller me coucher

Encore bravo comtois, doit "n'enavoir" des calculs pour faire ça, meme moi j'men rend compte :D

Publié : dim. 08/juin/2008 9:09
par beauregard
faut patienter quelques secondes au début, puis on est un peu surpris, et enfin cela devient une belle démonstration dès la deuxième transformation :)

Publié : lun. 18/août/2008 22:49
par Ar-S
Superbe ! ça fait très demomaker :)