# PureBasic

Forums PureBasic
 Nous sommes le Sam 06/Juin/2020 9:57

 Heures au format UTC + 1 heure

 Page 1 sur 2 [ 17 messages ] Aller à la page 1, 2  Suivante
 Imprimer le sujet Sujet précédent | Sujet suivant
Auteur Message
 Sujet du message: Physique - AvionPosté: Mar 30/Avr/2019 19:49

Inscription: Jeu 25/Juin/2015 16:18
Messages: 302
dans la serie 'simulateur mini budget', l'avion

Code:
;Physics - Airplane - pf Shadoko - 2019

EnableExplicit

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

Structure PB_MeshVertexV
p.vector3
n.vector3
t.vector3
u.f
v.f
color.l
EndStructure

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.f lng3D(*v.Vector3)
ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
EndProcedure

Procedure.f Pscalaire3d(*p.vector3,*q.vector3)
ProcedureReturn *p\x * *q\x + *p\y * *q\y + *p\z * *q\z
EndProcedure

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

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

Procedure.f POM(v.f)
ProcedureReturn (Random(v*1000)-v*500)/500
EndProcedure

Procedure perlinarray2d(Array pa.f(2),rnd,periode,amplitude.f=1)
Protected i,ii,dx=ArraySize(pa(),1),ddx=dx/periode,
j,jj,dy=ArraySize(pa(),2),ddy=dy/periode
Protected.f x,y,y0,y1,wx,wy

RandomSeed(rnd)
Dim t.f(ddx+1,ddy+1)
For i=0 To ddx:For j=0 To ddy:t(i,j)=pom(amplitude):Next:Next
For i=0 To ddx+1:t(i,ddy+1)=t(i,0):Next
For j=0 To ddy+1:t(ddx+1,j)=t(0,j):Next

For jj=0 To ddy
For ii=0 To ddx
For i=0 To periode-1
x=i/periode
wx=x*x*(3-2*x)
For j=0 To periode-1
y0=t(ii+1,jj  )*wx+t(ii,jj  )*(1-wx)
y1=t(ii+1,jj+1)*wx+t(ii,jj+1)*(1-wx)
y=j/periode
wy=y*y*(3-2*y)
pa(ii*periode+i,jj*periode+j)=y1*wy+y0*(1-wy)
Next
Next
Next
Next
EndProcedure

Procedure matiere(num,dx,dy,c1,c2, brillance=\$888888,alpha=0,scale.f=1)
CreateTexture(num,dx,dy)
StartDrawing(TextureOutput(num))
If alpha:DrawingMode(#PB_2DDrawing_AllChannels):EndIf
Box(0,0,dx,dy,c2)
Box(2,2,dx-4,dy-4,c1)
StopDrawing()
CreateMaterial(num, TextureID(num))
MaterialFilteringMode(num,#PB_Material_Anisotropic,4)
ScaleMaterial(num,scale,scale)
If brillance:SetMaterialColor(num, #PB_Material_SpecularColor, brillance):MaterialShininess(num, 40):EndIf
If alpha:MaterialBlendingMode(num,#PB_Material_AlphaBlend):EndIf
EndProcedure

Procedure AddMesh(mesho,Mesh,mat, NewX.f=0 , NewY.f=0, NewZ.f=0, ScaleX.f=1, ScaleY.f=1, ScaleZ.f=1, RotateX.f=0, RotateY.f=0, RotateZ.f=0)
Protected Dim MeshDataV.PB_MeshVertex(0)
Protected Dim MeshDataF.PB_MeshFace(0)
Protected i,meshc

meshc=CopyMesh(mesh,-1)
TransformMesh(Meshc, NewX,NewY,NewZ, ScaleX,ScaleY,ScaleZ, RotateX,RotateY,RotateZ)
GetMeshData(Meshc,0, MeshDataV(), #PB_Mesh_Vertex |#PB_Mesh_Color | #PB_Mesh_UVCoordinate| #PB_Mesh_Normal, 0, MeshVertexCount(Meshc, 0)-1)
GetMeshData(Meshc,0, MeshDataF(), #PB_Mesh_Face, 0, MeshIndexCount(Meshc, 0)-1)
FreeMesh(meshc)

For i=0 To ArraySize(MeshDataV())
With MeshDatav(i)
MeshVertex(\x,\y,\z,\u,\v,\$ffffff,\NormalX,\NormalY,\NormalZ)
EndWith
Next
For i=0 To ArraySize(MeshDataF()) Step 3
MeshFace(MeshDataF(i)\Index, MeshDataF(i+1)\Index,MeshDataF(i+2)\Index)
Next
If mat>=0:SetMeshMaterial(mesho, MaterialID(mat), SubMeshCount(mesho)-1):EndIf
EndProcedure

;##########################################################################################################################################################
Global ex,ey,h.f

Procedure mesh_terrain(mesh,n)
Protected.f h, vx, vy
Protected i,j,dt=4,n2=n/2
Dim pa.f(n-1,n-1)

perlinarray2d(pa(),0,16,16*4)

Dim t.PB_MeshVertexV(n,n)
RandomSeed(0)
For j=0 To n
For i=0 To n
With t(i,j)
\p\x=(i-n2)*10
\p\z=(j-n2)*10
\p\y=pa(i & (n-1),j & (n-1)):If \p\y<0:\p\y=0:EndIf
\u=i
\v=j
\color=\$ffffff
EndWith
Next
Next
CreateDataMesh(mesh,t())
EndProcedure

Procedure Init()
Protected i
InitEngine3D():InitSprite():InitKeyboard():InitMouse()

OpenWindow(0, 0, 0, 800,600, "",#PB_Window_Maximize|#PB_Window_BorderLess)
ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)

EnableWorldPhysics(#True)
EnableWorldCollisions(#True)
WorldGravity(-10)

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

CreateLight(0,\$888888, 500,1000,0):SetLightColor(0, #PB_Light_SpecularColor, \$ffffff)
AmbientColor(\$444444)

; -------------------- terrain
matiere(0,256,256,\$ff448888,\$ff88cccc,0)
mesh_terrain(100,256)
CreateEntity(100,MeshID(100),MaterialID(0)):CreateEntityBody(100,#PB_Entity_StaticBody,1,0,1)
EntityRenderMode(100,0)
matiere(1,256,256,\$aaaaaa,\$ffffff,0):ScaleMaterial(1,0.1,0.1/6)
CreateCube(101,1):TransformMesh(101,0,0,0,20,0.4,240,0,0,0):UpdateMeshBoundingBox(101)
CreateEntity(101,MeshID(101),MaterialID(1)):CreateEntityBody(101,#PB_Entity_StaticBody,1,0,0.5)

; -------------------- plane
CreateMesh(0)
matiere(10,256,256,\$88444444,\$88444444,\$ffffff,1)
matiere(11,256,256,\$ff0000ff,\$0000ff,\$ffffff,0,4)
matiere(12,256,256,\$444444,\$000000,0)
CreateEntity(0, MeshID(0), #PB_Material_None,0,0.8+0.2,0):CreateEntityBody(0, #PB_Entity_ConvexHullBody ,100, 0.0,0.2);EntityRenderMode(0, 0)
SetEntityAttribute(0,#PB_Entity_LinearSleeping,0)

; helice
matiere(13,256,256,\$444444,\$444444)
CreateEntity(2, MeshID(2), MaterialID(13),0,0,1.3)
AttachEntityObject(0,"",EntityID(2))

; smoke
CreateMaterial(20, TextureID(20))
DisableMaterialLighting(20, 1)
MaterialBlendingMode   (20, #PB_Material_AlphaBlend)
SetMaterialAttribute(20,#PB_Material_TAM,#PB_Material_ClampTAM)
CreateParticleEmitter(0, 0.25,0,0,0,0,0,-2)
ParticleMaterial    (0, MaterialID(20))
ParticleSize        (0, 0.5,0.5)
ParticleEmissionRate(0, 25)
ParticleTimeToLive  (0, 1,1)
ParticleScaleRate(0,2)
ParticleAngle(0,-180,180,-90,90)
DisableParticleEmitter(0,1)
AttachEntityObject(0,"",ParticleEmitterID(0))

RenderWorld(10000)
;WorldDebug(#PB_World_DebugEntity)
EndProcedure

Procedure stabilise(entity,f.f)
Protected.f x,y,z
x=GetEntityAttribute(entity,#PB_Entity_AngularVelocityX)
y=GetEntityAttribute(entity,#PB_Entity_AngularVelocityY)
z=GetEntityAttribute(entity,#PB_Entity_AngularVelocityZ)
ApplyEntityTorque(entity,-x*f,-y*f,-z*f,#PB_World )
EndProcedure

Protected p=4
Macro DT(t1,t2="")
DrawText(8,p,t1)
DrawText(160,p,t2)
p+20
EndMacro
CreateSprite(0,240,188,#PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
DrawingMode(#PB_2DDrawing_AllChannels)
DrawingFont(FontID(0))
Box(0,0,OutputWidth(),OutputHeight(),\$44000000)
DrawingMode(#PB_2DDrawing_AllChannels|#PB_2DDrawing_Outlined)
Box(0,0,OutputWidth(),OutputHeight(),\$44ffffff)
BackColor(\$44000000)
FrontColor(\$ffffffff)
dt("[Arrow keys] / Mouse", "Yoke / Stick")
dt("[F1]","Camera")
dt("[F2]","Smoke")
dt("[Esc]","Quit")
dt("        Engine %")
dt("        Altitude")
dt("        Velocity")
StopDrawing()
EndProcedure

Procedure affiche3d()
Protected.f      cx=0.05,       cz=2.5,   czp=100,      alt=0.8+0.2
Protected.f rotp,decx,decy,decz,poussee,fpoussee,fportance,v,vd,vp
Protected.vector3 apos,pos,vit,dir,per,ftrainee,p,p0

Macro KBdep(k1,k2):(Bool(KeyboardPushed(k1))-Bool(KeyboardPushed(k2))) :EndMacro

MouseLocate(ex/2,ey/2)
vec3d(pos,EntityX(0),EntityY(0),EntityZ(0))
Repeat
WindowEvent()
ExamineMouse()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_F1):dis=(dis+1)%3:vdis=1<<dis:EndIf
If KeyboardReleased(#PB_Key_F2):smoke=1-smoke:vdis=4:DisableParticleEmitter(0,1-smoke):EndIf

vec3d(dir,-EntityDirectionX(0),-EntityDirectionY(0),-EntityDirectionZ(0))
vec3d(p,0,-1,0)
vec3d(p0,0,0,0)
localtoworld(EntityID(0),p)
localtoworld(EntityID(0),p0)
sub3d(per,p,p0)
apos=pos:vec3d(pos,EntityX(0),EntityY(0),EntityZ(0))
sub3d(vit,pos,apos)
mul3d(vit,60)
v=lng3d(vit)
vd=Pscalaire3d(vit,dir)
vp=Pscalaire3d(vit,per)

; commandes
decx-KBdep(#PB_Key_Left,#PB_Key_Right)*0.4+MouseDeltaX()*0.02:decx*0.8
decz+KBdep(#PB_Key_Down,#PB_Key_Up   )*0.4+MouseDeltaY()*0.01:decz*0.8

; portance
fportance=vd*vd*cz + vp*czp
ApplyEntityForce(0, 0,fportance,0,decx*1,1,-0.15,#PB_Local )

; poussée
fpoussee=poussee*10
ApplyEntityForce(0, 0,0,fpoussee,0,0,1,#PB_Local)

; trainée
ftrainee=vit:mul3d(ftrainee,-v*v*cx)
vec3d(p,decy,decz,-2)
vec3d(p0,0,0,0)
localtoworld(EntityID(0),p)
localtoworld(EntityID(0),p0)
sub3d(p,p,p0)
ApplyEntityForce(0,ftrainee\x,ftrainee\y,ftrainee\z,p\x,p\y,p\z,#PB_World )

stabilise(0,800)

rotp=poussee:RotateEntity(2,0,0,rotp,#PB_Relative)

CameraFollow(0, EntityID(0), -180,EntityY(0)+vdis, 6*vdis, 0.02, 0.5)

RenderWorld(16)
StartDrawing(SpriteOutput(0)):DrawingFont(FontID(0)):DrawText(160,124,Str(poussee)+"  "):DrawText(160,144,StrF(pos\y,1)+"  "):DrawText(160,164,StrF(v,1)+"  "):StopDrawing()
DisplayTransparentSprite(0,8,8)
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndProcedure

init()
affiche3d()

Dernière édition par Guillot le Mer 01/Mai/2019 8:09, édité 3 fois.

Haut

 Sujet du message: Re: Physique - AvionPosté: Mar 30/Avr/2019 20:45

Inscription: Mer 09/Nov/2005 9:53
Messages: 4155
Erreur ligne 324

pb 5.70 lts 32

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits

Haut

 Sujet du message: Re: Physique - AvionPosté: Mar 30/Avr/2019 23:33

Inscription: Ven 29/Juin/2007 17:50
Messages: 3647
Localisation: Encore ?
@SPH

Erreur ligne 1 : Erreur non spécifiée !!

Haut

 Sujet du message: Re: Physique - AvionPosté: Mer 01/Mai/2019 8:01

Inscription: Jeu 25/Juin/2015 16:18
Messages: 302
chez moi, ça marche en x64 et x86

ça sent le caractere foireux

je vais rééditer le code

@ SPH : essaye en commentant la ligne 325 startdrawing...

Haut

 Sujet du message: Re: Physique - AvionPosté: Mer 01/Mai/2019 8:08

Inscription: Dim 02/Oct/2011 16:17
Messages: 2258
Localisation: 50200 Coutances
Superbe travail, merci professeur Shadoko pour le partage de cette magnifique œuvre.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !

Haut

 Sujet du message: Re: Physique - AvionPosté: Mer 01/Mai/2019 13:18

Inscription: Mer 09/Nov/2005 9:53
Messages: 4155
Erreur ligne 324 :

Code:
RenderWorld(16)

Si je commente cette ligne, j'ai une scene de rectangles qui clignote

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits

Haut

 Sujet du message: Re: Physique - AvionPosté: Mer 01/Mai/2019 15:32

Inscription: Dim 02/Oct/2011 16:17
Messages: 2258
Localisation: 50200 Coutances
C'est curieux, pour une fois que ça fonctionne très bien chez moi, apparemment on n'a pas le même sous-système, moi c'est OpenGL.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !

Haut

 Sujet du message: Re: Physique - AvionPosté: Mer 01/Mai/2019 18:05

Inscription: Mer 09/Nov/2005 9:53
Messages: 4155
Micoute a écrit:
C'est curieux, pour une fois que ça fonctionne très bien chez moi, apparemment on n'a pas le même sous-système, moi c'est OpenGL.

Si je ne m'abuse, on a un sous systeme uniquement si on compile le code, non
Moi, j'ai lancé le code depuis l'IDE

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits

Haut

 Sujet du message: Re: Physique - AvionPosté: Jeu 02/Mai/2019 6:49

Inscription: Dim 02/Oct/2011 16:17
Messages: 2258
Localisation: 50200 Coutances
Bonjour SPH,

l'IDE ou Environnement de Développement Intégré, crée toujours un exécutable qui se nomme PureBasic_Compilateur0.exe, ou plus s'il y a d'autres programmes, qu'il exécute selon le sous-système de ton système.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !

Haut

 Sujet du message: Re: Physique - AvionPosté: Jeu 02/Mai/2019 9:16

Inscription: Mer 09/Nov/2005 9:53
Messages: 4155
Micoute a écrit:
Bonjour SPH,

l'IDE ou Environnement de Développement Intégré, crée toujours un exécutable qui se nomme PureBasic_Compilateur0.exe, ou plus s'il y a d'autres programmes, qu'il exécute selon le sous-système de ton système.

Ce qui veux dire qu'il faut aller dans COMPILATEUR/OPTION DU COMPIL renseigner le sous system meme si on n'utilise que l'ide avec un .PB ? (c'est nouveau pour moi tout ca)

P.S. : a propos de sous system, je suis surpris que l'on doive l'ecrire au clavier. Une liste deroulante pre remplis (ou des boutons radio) me semblerais plus logique

_________________
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.70LTS - 32 bits

Haut

 Sujet du message: Re: Physique - AvionPosté: Jeu 02/Mai/2019 9:55

Inscription: Dim 02/Oct/2011 16:17
Messages: 2258
Localisation: 50200 Coutances
Tout à fait d'accord, donc je plussoie.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !

Haut

 Sujet du message: Re: Physique - AvionPosté: Jeu 02/Mai/2019 10:41

Inscription: Jeu 25/Juin/2015 16:18
Messages: 302
d'accord avec SPH

au niveau des plantages, avec la 3d y'a 2 causes fréquentes; les ombres et les sprites:

1) les ombres:
ligne 224
- les désactiver (commenter la ligne)

2) les sprites:
commenter les lignes

325 : StartDrawing...
326 : DisplayTransparentSprite...

Haut

 Sujet du message: Re: Physique - AvionPosté: Jeu 02/Mai/2019 15:55

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6921
Localisation: IDF (Yvelines)
Testé avec PB 5.70 LTS (x64) Aucun souci. Bravo et merci pour de nous faire partager tes créations.

_________________

➽ Config PureBasic : Windows 10 - PB 5.72 LTS

➽ Je ne réponds pas aux MP techniques

Haut

 Sujet du message: Re: Physique - AvionPosté: Ven 04/Oct/2019 9:59

Inscription: Mer 14/Sep/2011 16:59
Messages: 931
Oui, bravo !

Je vais montrer ce simulateur à mon école de pilotage !

Mais avant, j'aimerais ajouter des ailerons, entre autre, et les animer en temps réel en appuyant sur une touche clavier, mais je n'y arrive pas.

Je bataille avec les hingejoint mais sans succès, et ce n'est peut-être pas la solution.

Quelqu'un peut me mettre sur la voie, svp ?

Merci par avance.

Mesa.

Haut

 Sujet du message: Re: Physique - AvionPosté: Ven 04/Oct/2019 15:07

Inscription: Sam 23/Sep/2006 18:32
Messages: 6706
Localisation: Isere
Toujours pas compris comment tu arrives à créer des super beaux et étonnants objets seulement avec des lignes de codes
Ca me fait planer...merci de ce nouveau partage

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

PureBasic Forum Officiel - Site PureBasic

Haut

 Afficher les messages postés depuis: Tous1 jour7 jours2 semaines1 mois3 mois6 mois1 an Trier par AuteurDateSujet CroissantDécroissant
 Page 1 sur 2 [ 17 messages ] Aller à la page 1, 2  Suivante

 Heures au format UTC + 1 heure

#### Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

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

Rechercher:
 Aller à:  Sélectionner un forum ------------------ PureBasic    Informations et tutoriaux    Débutants    Jeux    Applications    Discussion générale    Trucs et astuces    Suggestions et améliorations    Rapports de bugs    Rapports de bugs (Archive) OS    Linux    MacOS X    Windows Divers    Annonces    ASM    3D SpiderBasic    Tutoriaux    Annonces, codes et discussion générale    Créations (Web, Android, iOS)