Pendule double 3D

Généralités sur la programmation 3D
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Pendule double 3D

Message par comtois »

une adaptation du code de Fig (voir ici) avec la lib 3D de PB. Ici c'est le moteur physique qui fait le boulot pour l'animation des pendules.

Code : Tout sélectionner

Structure Vector3
  x.f
  y.f
  z.f
EndStructure

IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"

If InitEngine3D()
 
  InitSprite()
  InitKeyboard()
  InitMouse()
 
  If Screen3DRequester()
    Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
    Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts" , #PB_3DArchive_FileSystem)
    Parse3DScripts()
   
    ; First create materials
    ;
    CreateMaterial(0, LoadTexture(0, "Wood.jpg"))
    CreateMaterial(1, LoadTexture(1, "Dirt.jpg"))
    GetScriptMaterial(2, "Examples/LightRibbonTrail")
   
    ; Meshes
    ;
    CreateCube(0, 1)
    CreateSphere(1, 0.5)
   
    ; Entities
    ;
    CreateEntity(0, MeshID(0), MaterialID(0), 0,  0, 0)
    CreateEntity(1, MeshID(0), MaterialID(0), 0, -5.1, 0)
    CreateEntity(2, MeshID(1), MaterialID(1), 0, -5.1, 0)
    CreateEntity(3, MeshID(1), MaterialID(1), 0, 0, 0)
   
    ScaleEntity(0,1,10,1)
    ScaleEntity(1,1,10,1)   
   
    ;Ribbon
   
    CreateRibbonEffect(0, MaterialID(2), 1, 2800, 180)
    RibbonEffectColor(0, 0, RGBA(0, 255*0.8, 255*0.8, 255), RGBA(0, 255, 0, 5))
    RibbonEffectWidth(0, 0, 0.5, 0.2)
    AttachRibbonEffect(0, EntityParentNode(3))
   
    ; Bodies
    ;
    CreateEntityBody(0, #PB_Entity_BoxBody   , 1.0)
    CreateEntityBody(1, #PB_Entity_BoxBody   , 1.0)
    CreateEntityBody(2, #PB_Entity_SphereBody, 1.0)
    CreateEntityBody(3, #PB_Entity_SphereBody, 0.00001)   
   
    ; PointJoint
    ;
    PointJoint(0, EntityID(0), 0, 5.5, 0)
    PointJoint(1, EntityID(0),  0, -5.5, 0, EntityID(2), 0, 0, 0)
    PointJoint(2, EntityID(1),  0, 5.5, 0, EntityID(2), 0, 0, 0)
    PointJoint(3, EntityID(1),  0, -5.5, 0, EntityID(3), 0, 0, 0)   
   
   
    For i=0 To 3
      EntityLinearFactor(i, 1, 1, 0)
    Next
   
   
    ; Camera
    ;
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 0, 50, #PB_Absolute)
   
    ;- Light
    ;
    AmbientColor(RGB(25, 25, 25))
    CreateLight(0, RGB(215, 190, 40), 75, 75, 75)
   
    ; GO
    ;
    ApplyEntityImpulse(1,  10, 0, 0)
   
    Repeat
      Screen3DEvents()
      ExamineKeyboard()
     
      RenderWorld()
     
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
 
Else
  MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf

End
Dernière modification par comtois le dim. 15/juil./2018 10:26, modifié 1 fois.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Pendule double 3D

Message par djes »

Belle démo pour la prochaine version ;)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Pendule double 3D

Message par Kwai chang caine »

Waouuuhhh !!! COMTOIS ça envoie du bois ton adaptation 8) :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre