# PureBasic

Forums PureBasic
 Nous sommes le Sam 24/Aoû/2019 23:25

 Heures au format UTC + 1 heure

 Page 1 sur 1 [ 13 messages ]
 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: 262
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: 4046
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: 3484
@SPH

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

_________________
Juste la 4G pour Smartphone

Haut

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

Inscription: Jeu 25/Juin/2015 16:18
Messages: 262
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: 2165
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.62, 5.70 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: 4046
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: 2165
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.62, 5.70 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: 4046
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: 2165
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.62, 5.70 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: 4046
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: 2165
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.62, 5.70 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: 262
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: 6849
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 : 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

 Afficher les messages postés depuis: Tous1 jour7 jours2 semaines1 mois3 mois6 mois1 an Trier par AuteurDateSujet CroissantDécroissant
 Page 1 sur 1 [ 13 messages ]

 Heures au format UTC + 1 heure

#### Qui est en ligne

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

 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)