PureBasic

Forums PureBasic
Nous sommes le Lun 21/Oct/2019 12:28

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: genericjoint -demo voiture
MessagePosté: Jeu 02/Fév/2017 9:47 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 25/Juin/2015 16:18
Messages: 268
un petit exemple d'utilisation de genericjoint pour l'axe de rotation des roues, l'angle des roues (direction) et les suspensions (enfin !)
pour la rotation desc roue, j'utilise applyentitytorque :
avantage: on applique un couple au lieu d'imposer une vitessse de rotation, la voiture peine dans les montés
reste la gestion du freinage...

a noté : j'ai fait une fonction "orientation", util pour connaitre le vecteur directeur d'un objet 3d

Code:
EnableExplicit

;{ math
Structure vector3
  x.f
  y.f
  z.f
EndStructure

Macro getv(p)
  p\x = GetX()
  p\y = GetY()
  p\z = GetZ()
EndMacro

Macro vec3d(v,vx,vy,vz)
  v\x=vx
  v\y=vy
  v\z=vz
EndMacro

Macro sub3D(p,p1,p2)
  p\x=p1\x-p2\x
  p\y=p1\y-p2\y
  p\z=p1\z-p2\z
EndMacro

Macro mul3d(p1,v)
  p1\x*v
  p1\y*v
  p1\z*v
EndMacro
;}

Procedure localtoworld(oid.l ,*p.vector3)
  ConvertLocalToWorldPosition(oid,*p\x,*p\y,*p\z)
  getv(*p)
EndProcedure

Procedure orientation(oid.l,*p.vector3)
  Protected.vector3 p0,p1
  vec3d(p1,0,1,0)
  localtoworld(oid,p0)
  localtoworld(oid,p1)
  sub3d(*p,p1,p0)
EndProcedure

Macro limite(v,min,max)
    If v<min:v=min:EndIf
    If v>max:v=max:EndIf
EndMacro

Procedure matiere(num,dx,dy,c1,c2, brillance=$888888)
  Protected i,j,y
  CreateTexture(num,dx,dy,"")
  StartDrawing(TextureOutput(num))
  DrawingMode(#PB_2DDrawing_AllChannels  )
  Box(0,0,dx,dy,c2)
  Box(1,1,dx-2,dy-2,c1) 
  StopDrawing()
  CreateMaterial(num, TextureID(num))
  MaterialFilteringMode(num,#PB_Material_Anisotropic ,4)
  If brillance:SetMaterialColor(num, #PB_Material_SpecularColor, brillance):MaterialShininess(num, 20):EndIf
EndProcedure

Define.f anglec,v,angle,sens,h
Define i,ii,j,c,l,dis=0,vdis=1<<dis*1,ex,ey,ombre,p.vector3

InitEngine3D():InitSprite():InitKeyboard():InitMouse()
AntialiasingMode(#PB_AntialiasingMode_x4)
OpenWindow(0, 0, 0, 0,0, " Test - joint     curseur + F2(camera) + F3(ombres)",#PB_Window_Maximize)

ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)

CreateLight(0,$888888, 5000, 3000, 2000)
SetLightColor(0, #PB_Light_SpecularColor, $ffffff)
AmbientColor($777777)

CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,10,-20)
CameraBackColor(0,$888888)

matiere(0,256,256,$444444,$111111)
matiere(1,256,256,$44ff44,$114411)
matiere(2,256,256,$00aaff,$003344)
matiere(3,256,256,$ffffff,$444444)
matiere(4,256,256,$4444ff,$4444ff)
matiere(5,256,256,$884444,$441111)
matiere(10,256,256,$888888,$222222)

;piste
CreatePlane(0,200,200,1,1,200,200)
CreateEntity(100,MeshID(0),MaterialID(10),0,0,0):CreateEntityBody(100,#PB_Entity_StaticBody,1,0,1)
CreateCone(0,4,2,32,4)
For i=200 To 219:CreateEntity(i,MeshID(0),MaterialID(4),Random(100)-50,1,Random(100)-50):CreateEntityBody(i,#PB_Entity_StaticBody,1,0,1):Next
CreateCube(0,4)
For i=300 To 339:CreateEntity(i,MeshID(0),MaterialID(5),Random(100)-50,-1,Random(100)-50):RotateEntity(i,25,Random(360),0):CreateEntityBody(i,#PB_Entity_StaticBody,1,0,1):Next
CreateCube(0,0.1):TransformMesh(0,0,0,0,1,0.5,50,0,0,0):UpdateMeshBoundingBox(0)
For i=400 To 439:CreateEntity(i,MeshID(0),MaterialID(2),Random(100)-50,0.05,Random(100)-50):RotateEntity(i,0,Random(360),0):CreateEntityBody(i,#PB_Entity_StaticBody,1,0,1):Next

; voiture
h=2
CreateCube(0,2):TransformMesh(0,0,0,0,0.3,0.1,0.8,0,0,0):UpdateMeshBoundingBox(0)
CreateEntity(0, MeshID(0), MaterialID(1),0,h,0):CreateEntityBody(0, #PB_Entity_ConvexHullBody , 4, 0.0,0.3):SetEntityCollisionFilter(0, 1,2)
SetEntityAttribute(0,#PB_Entity_LinearSleeping,0)
;roues
CreateCylinder(2, 0.2, 0.2)
c=0
For j=-1 To 1 Step 2:For i=-1 To 1 Step 2:c+1
    CreateEntity(c, MeshID(2), MaterialID(0),0.5*i, -0.4+h, -0.8*j):CreateEntityBody(c, #PB_Entity_CylinderBody, 1, 0,1):SetEntityCollisionFilter(c,  1,2)
    RotateEntity(c,0,0,90)
    GenericJoint(c, EntityID(0),0.5*i, -0.2, -0.8*j, EntityID(c), 0, 0, 0)
    SetJointAttribute(c, #PB_Joint_EnableSpring,1,1)
    SetJointAttribute(c, #PB_Joint_Damping,0.005,1)   
    SetJointAttribute(c, #PB_Joint_Stiffness,200,1)   
    SetJointAttribute(c, #PB_Joint_NoLimit,  0, 3)
Next :Next
CreateNode(0,0,0,-1):AttachEntityObject(0,"",NodeID(0))
CreateNode(1,0,0.1,0) :AttachEntityObject(0,"",NodeID(1))

Macro KBdep(k1,k2)
  (Bool(KeyboardPushed(k1)<>0)-Bool(KeyboardPushed(k2)<>0))
EndMacro

Repeat     
  ExamineMouse()
  ExamineKeyboard()
  If KeyboardReleased(#PB_Key_F2):dis=(dis+1)%3:vdis=1<<dis*1:EndIf
  If KeyboardReleased(#PB_Key_F3):ombre=1-ombre:If ombre:WorldShadows(#PB_Shadow_Additive):Else:WorldShadows(#PB_Shadow_None):EndIf:EndIf

  ;voiture
  angle+KBdep(#PB_Key_Left,#PB_Key_Right)*-0.02:angle*0.97:limite(angle,-0.6,0.6)
  sens =KBdep(#PB_Key_Up,#PB_Key_Down) * 1
  SetJointAttribute(1,#PB_Joint_Position,angle,4)
  SetJointAttribute(2,#PB_Joint_Position,angle,4)
  For i=1 To 4:orientation(EntityID(i),p):mul3d(p,sens):ApplyEntityTorque(i,p\x,p\y,p\z):Next   
   
  CameraFollow(0, NodeID(1), -180,NodeY(0)+vdis, 2*vdis, 0.1, 0.1)
 
  RenderWorld()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: genericjoint -demo voiture
MessagePosté: Jeu 02/Fév/2017 11:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6658
Localisation: Isere
Etant donné les merveilles que tu produit, l'on ne peut lire un de tes POSTS sans ressentir le frémissement de vouloir tester une de tes nouvelles créations 8)
Alors quand je met pas "OPENGL" j'ai une erreur ligne 141 quand je fais F3 (Mais je pense que ça doit être normal)
Mais là ou c'est plus embetant, c'est que quand je le met, j'ai un ecran tout gris et rien ne se passe :|
J'ai W7 X86 et v5.60

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: genericjoint -demo voiture
MessagePosté: Jeu 02/Fév/2017 11:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Comme d'habitude, c'est du beau code ^^

Une autre façon de faire avec cet exemple fourni dans l'aide http://www.purebasic.com/french/documen ... le.pb.html

Merci pour ce code.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye