Morphing 3D

Share your advanced PureBasic knowledge/code with the community.
User avatar
Comtois
Addict
Addict
Posts: 1429
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Morphing 3D

Post by Comtois »

Code: Select all

;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)
Last edited by Comtois on Sun May 07, 2006 10:34 pm, edited 5 times in total.
Please correct my english
http://purebasic.developpez.com/
Derek
Addict
Addict
Posts: 2356
Joined: Wed Apr 07, 2004 12:51 am
Location: England

Post by Derek »

Very nice and fast too.
User avatar
Comtois
Addict
Addict
Posts: 1429
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Post by Comtois »

Thank you.

Added : Trompette, Au hasard, Hélicoïde, Hyperboloïde, Shell

Added : Hache, disque, chapeau
Please correct my english
http://purebasic.developpez.com/
dige
Addict
Addict
Posts: 1256
Joined: Wed Apr 30, 2003 8:15 am
Location: Germany
Contact:

Post by dige »

It's magical, thank's for sharing Comtois!
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4749
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Post by Fangbeast »

What can I say but "WOW".
Amateur Radio, D-STAR/VK3HAF
josku_x
Addict
Addict
Posts: 997
Joined: Sat Sep 24, 2005 2:08 pm

Post by josku_x »

THis is very cool indeed!

@Fangbeast: What does World of Warcraft do here?
User avatar
blueznl
PureBasic Expert
PureBasic Expert
Posts: 6161
Joined: Sat May 17, 2003 11:31 am
Contact:

Post by blueznl »

yeah, we're guildwars players, all of us!
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
josku_x
Addict
Addict
Posts: 997
Joined: Sat Sep 24, 2005 2:08 pm

Post by josku_x »

hehe, have you been playing too much lately, blueznl??
I don't play guildwars, I play [REMOVED by Moderator]
:wink:
Last edited by josku_x on Mon May 08, 2006 5:48 pm, edited 1 time in total.
User avatar
fsw
Addict
Addict
Posts: 1572
Joined: Tue Apr 29, 2003 9:18 pm
Location: North by Northwest

Post by fsw »

Don't care much about the 3D stuff myself, but what I see here is really impressive :shock:

Comtois, thanks for sharing your code/knowledge with this community.
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Very impressive.
Nicer than a lot of commercial screen savers.

Thanks for sharing.

cheers
dagcrack
Addict
Addict
Posts: 1868
Joined: Sun Mar 07, 2004 8:47 am
Location: Argentina
Contact:

Post by dagcrack »

josku_x wrote:hehe, have you been playing too much lately, blueznl??
I don't play guildwars, I play [REMOVED by Moderator]
:wink:
So what game is that one? :lol:
! Black holes are where God divided by zero !
My little blog!
(Not for the faint hearted!)
User avatar
Fangbeast
PureBasic Protozoa
PureBasic Protozoa
Posts: 4749
Joined: Fri Apr 25, 2003 3:08 pm
Location: Not Sydney!!! (Bad water, no goats)

Post by Fangbeast »

josku_x wrote:THis is very cool indeed!

@Fangbeast: What does World of Warcraft do here?
I don't even know what that is.
Amateur Radio, D-STAR/VK3HAF
dagcrack
Addict
Addict
Posts: 1868
Joined: Sun Mar 07, 2004 8:47 am
Location: Argentina
Contact:

Post by dagcrack »

Seriously I never played WoW, And I'm happy with that.
! Black holes are where God divided by zero !
My little blog!
(Not for the faint hearted!)
User avatar
idle
Always Here
Always Here
Posts: 5097
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Post by idle »

hacked a fix for textureoutput() as it's no longer available

Code: Select all


;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

;#####################################################################
;quick hack to replace textureoutput for 4.31 uses global img number
;replace stopdrawing with StopDrawingT(TextureNumber)

Global gtImg

Procedure TextureOutPut(num) 
   
If IsTexture(num) 
 gtImg = CreateImage(#PB_Any,TextureWidth(0),TextureHeight(0))
EndIf 
 
ProcedureReturn ImageOutput(gTimg)
 
EndProcedure     

Procedure  StopDrawingT(num)
Static bArch 
mdir$ = GetTemporaryDirectory() 
StopDrawing()
 
 ;comment out if there's a 3D archive is declared  
 If Not bArch 
   mdir$ = GetTemporaryDirectory() 
   Add3DArchive(mdir$,#PB_3DArchive_FileSystem)
   bArch = 1
 EndIf 

 SaveImage(gtImg,mdir$ + "tImg" + Str(num))
 LoadTexture(num,"tImg" + Str(num)) 
  
EndProcedure 

;######################################################################

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)
StopDrawingT(0)

;-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) 
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4326
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

Comtois THIS IS SO COOL!

I had a thought that if you could somehow include this in your BLOX game you would take it to a whole new level!
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
Post Reply