L'option #PB_Entity_PlaneBody est static ?

Généralités sur la programmation 3D
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

L'option #PB_Entity_PlaneBody est static ?

Message par falsam »

Avec les précédentes versions de Purebasic j'utilisais l'option #PB_Entity_StaticBody pour créer une entité plane static.

Avec la version 5.60 de PureBasic je trouve cette option lente.

Un test avec ce code qui affiche un plan et un cube qui chute sur ce plan. Les textures proviennent des exemple de PureBasic

Code : Tout sélectionner

InitEngine3D() 
InitSprite() 
InitKeyboard()

OpenWindow(0, 0, 0, 1024, 768, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0))

Add3DArchive(#PB_Compiler_Home + "Examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/desert.zip", #PB_3DArchive_Zip)

;Textures
CreateMaterial(0, TextureID(LoadTexture(-1, "Dirt.jpg")))
CreateMaterial(1, TextureID(LoadTexture(-1, "Caisse.png")))

CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, -50, 30, -100, #PB_Absolute | #PB_Local)
CameraLookAt(0, 0, 0, 0)

;Ciel
SkyBox("desert07.jpg")

;Lumiere et ombre
CreateLight(0, RGB(255, 255, 255), -100, 500, 100)
WorldShadows(#PB_Shadow_Additive)

;Ground
StartTime.f = ElapsedMilliseconds()
CreatePlane(0, 1000, 1000, 200, 200, 30, 30)
CreateEntity(0, MeshID(0), MaterialID(0))
CreateEntityBody(0, #PB_Entity_StaticBody)
;CreateEntityBody(0, #PB_Entity_PlaneBody)

Debug (ElapsedMilliseconds() - StartTime)/1000

;Box
CreateCube(1, 20)
CreateEntity(1, MeshID(1), MaterialID(1), 0, 30, 0)
CreateEntityBody(1, #PB_Entity_BoxBody, 1, 0.5, 0.5)

Repeat
  If ExamineKeyboard()    
    If KeyboardReleased(#PB_Key_Escape)
      Break
    EndIf  
  EndIf
  
  RenderWorld(50)
  FlipBuffers()
Until WaitWindowEvent(1) = #PB_Event_CloseWindow
Sous Windows10 Intel i3 il me faut presque 3 secondes pour générer le sol.

Si maintenant je chosis l'option #PB_Entity_PlaneBody, le temps de génération est insignifiant.

■ Contrairement à l'option #PB_Entity_StaticBody, La documentation n'indique pas si #PB_Entity_PlaneBody donne un body static.
Avec mon code en tout cas c'est le cas.

J'aimerais que d'autres utilisateurs testent ce code.

Peut être que Fred ou Comtois pourront apporter une réponse. Merci.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: L'option #PB_Entity_PlaneBody est static ?

Message par djes »

Avec le débogueur, on passe de 0.004 en plane à 1.5 en static. A voir sans lui.
Avatar de l’utilisateur
Guillot
Messages : 529
Inscription : jeu. 25/juin/2015 16:18

Re: L'option #PB_Entity_PlaneBody est static ?

Message par Guillot »

ton plan fait 200*200*2=80 000 triangles
avec staticbody, la physique va gérer tous ces triangles (ils ne sont pas sensés etre 'coplanaire')
avec PlaneBody, il va ce contenter de 2 triangles (a priori)

de plus, depuis pb5.50, la physique est devenu tres lente (environ 4x)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: L'option #PB_Entity_PlaneBody est static ?

Message par falsam »

Donc dans l'exemple que je donne il suffit que je remplace

Code : Tout sélectionner

CreatePlane(0, 1000, 1000, 200, 200, 30, 30)
par

Code : Tout sélectionner

CreatePlane(0, 1000, 1000, 1, 1, 30, 30)
Et le temps de génération devient insignifiant pour un visuel identique.

Merci d'avoir mis en évidence cette ligne de code.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9476
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: L'option #PB_Entity_PlaneBody est static ?

Message par Ar-S »

Je passe de 1.1xxxx à 0.0 dans le débug avec la modif
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: L'option #PB_Entity_PlaneBody est static ?

Message par comtois »

falsam a écrit : Contrairement à l'option #PB_Entity_StaticBody, La documentation n'indique pas si #PB_Entity_PlaneBody donne un body static.
.
Oui on utilise btStaticPlaneShape. C'est pratique pour éviter que les objets sortent du jeu. Voir la démo vehicle.pb, j'ai défini un cube avec des côtés infinis, la voiture ne peut pas sortir .
The btStaticPlaneShape simulates an infinite non-moving (static) collision plane.
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.
Répondre