[3D] Delta Time encore une fois

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[3D] Delta Time encore une fois

Message par falsam »

Le deltatime est un sujet qui a souvent été évoqué sur ce forum.

Pour expliquer le deltatime, G-Rom a ouvert un post sur ce lien
viewtopic.php?p=173648#p173648

J'ai appliqué ces recommandations avec ce code. J'espère que c'est bien comme ça qu'il fallait le comprendre.

Code : Tout sélectionner

EnableExplicit

; DPI Résolution
Global drx.f, dry.f

; Delta Time
Global StartTime.i, dt.f 

drx = DesktopResolutionX()
dry = DesktopResolutionY()

InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*0.5,DesktopHeight(0)*0.5, "Test DPI - [Esc] quit",#PB_Window_ScreenCentered)

OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0)*drx, WindowHeight(0)*dry, 0, 0, 0)

Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
Add3DArchive(GetCurrentDirectory(), #PB_3DArchive_FileSystem )

CreateCamera(0, 0, 0, 100, 100) : MoveCamera(0,0,3,-6) : CameraLookAt(0,0,0,0)
CreateLight(0,$ffffff, -10000, 10000, 0)
AmbientColor($111111*3)
CameraBackColor(0,$444488)

CreateMaterial(0, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))

CreateCube(0, 2)
CreateEntity(0, MeshID(0), MaterialID(0))

Repeat  
  ;-1 Initialisation du chrono
  StartTime = ElapsedMilliseconds()
  
  While WindowEvent() : Wend
  ExamineKeyboard()
  ExamineMouse()
  
  ;- 3 On applique le delta time
  RotateEntity(0, 0.2 * (1+dt), 0.2 * (1+dt), 0.2 * (1+dt), #PB_Relative)  
    
  RenderWorld()
  FlipBuffers()   
   
  ;-2 Calcul du deltatime. 
  dt = (ElapsedMilliseconds() - StartTime) / (1000)
  
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle) 
A vous de me faire part de vos remarques. Merci.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

C'est presque ca ;)
ton calcul est bon.
mais tu peu faire plus simple, ogre te donne déjà le delta time, pas besoin de le calculé :

Code : Tout sélectionner

dt = RenderWorld() / 1000
et cela :

Code : Tout sélectionner

 RotateEntity(0, 0, 360 * dt, 0, #PB_Relative) 
l'entité fera une rotation de 360° par secondes, quelque soit la config
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

Merci pour ta réponse G-Rom mais si dans mon exemple je multiplie ma rotation par le delta time, la rotation du cube va être super lent.

Code : Tout sélectionner

EnableExplicit

; DPI Résolution
Global drx.f, dry.f

; Delta Time
Global dt.f 

drx = DesktopResolutionX()
dry = DesktopResolutionY()

InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*0.8,DesktopHeight(0)*0.8, "Test DPI - [Esc] quit", #PB_Window_ScreenCentered | #PB_Window_BorderLess)

OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0)*drx, WindowHeight(0)*dry, 0, 0, 0)

Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
Add3DArchive(GetCurrentDirectory(), #PB_3DArchive_FileSystem )

CreateCamera(0, 0, 0, 100, 100) : MoveCamera(0,0,3,-6) : CameraLookAt(0,0,0,0)
CreateLight(0,$ffffff, -10000, 10000, 0)
AmbientColor($111111*3)
CameraBackColor(0,$444488)

CreateMaterial(0, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))

CreateCube(0, 2)
CreateEntity(0, MeshID(0), MaterialID(0))

Repeat    
  While WindowEvent() : Wend
  ExamineKeyboard()
  ExamineMouse()
  
  ;- 3 On applique le delta time
  RotateEntity(0, 0.2 * dt, 0.2 * dt, 0.2 * dt, #PB_Relative)  
  
  ;-1 Calcul du deltatime. 
  dt = RenderWorld() / 1000
  FlipBuffers()    
  
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle) 
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

logique, tu tournes a 0.2° par secondes.
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

G-Rom a écrit : lun. 20/févr./2023 16:47 logique, tu tournes a 0.2° par secondes.
Sans le deltatime, le cube tourne normalement :wink:

Je suis dubitatif ....
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

chez toi, mais chez moi il va tourné trop vite.

Code : Tout sélectionner

le cube tourne normalement
Non, il tourne a 0.2 , mais 0.2 quoi ? par seconde , par frame ? par quelle unité de mesure, dans ton cas, c'est du pifomètre.

le deltatime T'ASSURE une unité de mesure en somme, ici la seconde.

20 * dt , sera donc 20° par seconde, peut importe la vsync , ou le refresh rate de l'écran
0.2 , sera 0.2 par frame, celui qui n'a pas de vsync ou qui tourne a 144hz avec son écran aura une différence entre celui qui sera capé à 60Hz , l'un tournera plus de 2x plus vite.
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

G-Rom a écrit : lun. 20/févr./2023 16:55 Non, il tourne a 0.2 , mais 0.2 quoi ?
A chaque refresh de la boucle 3D, le cube a effectué un angle de 0.2 degré.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

c'est ce que je dit, a chaque frame. mais chaque frame ne va pas à la même vitesse chez toi ou chez moi , je suis en 144hz , toi en 60hz surement , mon cube tournera donc pour le même temps donné

Pour une frame chez Falsam :
- chez toi : 0.2
- chez moi : 0.48 ( je vais 2.4 + vite en 144hz )

Pour une frame chez Falsam avec le deltatime :

dt vaut chez moi 0.017
dt vaut chez toi 0.034 admettons
20 * (dt)0.017 = 0.34
20 * (dt)0.024 = 0.48

58,82 frames par secondes pour moi ( 1 / 0.017 )
41,66 frames pour toi ( 1 / 0.024 )

ce qui fait :
pour moi : 58.82 * 0.34 = 20
pour toi : 41,66 * 0.48 = 20

Miracle, on a chacun 20 en une seconde ! :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

et sans synchro , je suis a 0.0010000000475 de dt , la gerbe en somme :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

Correction de ton code :

Code : Tout sélectionner

...
  ; Rotation des entités
  RotateEntity(Sphere, 10 * dt, 10 * dt, 10 * dt, #PB_Relative)
  RotateEntity(Cube, 10 * dt, 10 * dt, 10 * dt, #PB_Relative)
  
  ; Rotation de la camera principale
  Rot + 20 * dt 
  MoveCamera(Camera, 50 * Cos(Radian(Rot)), 15, 50 * Sin(Radian(Rot)), #PB_Absolute)
  CameraLookAt(Camera, 0, 0, 0)

...
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

G-Rom a écrit : lun. 20/févr./2023 17:13je suis en 144hz , toi en 60hz suremen
Et bien tout comme toi je suis en 144hz :mrgreen:

dt = 0.006 chez moi

Suite à tes remarques, je vais apporter quelques corrections au code et attendre le retour d'expérience de quelques testeurs.
Configuration : Windows 11 Famille 64-bit - PB 6.20 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
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

Je n'ai pas modifié le premier code figurant au premier message afin de préserver le cheminement de ce post.

Je souhaiterais que quelques utilisateurs testent ce nouveau code en me signalant si la vitesse de rotation est conforme au gif ci-dessous.

Image

Code : Tout sélectionner

EnableExplicit

; DPI Résolution
Global drx.f, dry.f

; Delta Time
Global dt.f 

drx = DesktopResolutionX()
dry = DesktopResolutionY()

InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*drx, DesktopHeight(0)*dry, "Test DPI - [Esc] quit", #PB_Window_Maximize | #PB_Window_BorderLess)

OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0)*drx, WindowHeight(0)*dry, 0, 0, 0)

Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)
Add3DArchive(GetCurrentDirectory(), #PB_3DArchive_FileSystem )

CreateCamera(0, 0, 0, 100, 100) : MoveCamera(0,0,3,-6) : CameraLookAt(0,0,0,0)
CreateLight(0,$ffffff, -10000, 10000, 0)
AmbientColor($111111*3)
CameraBackColor(0,$444488)

CreateMaterial(0, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))

CreateCube(0, 2)
CreateEntity(0, MeshID(0), MaterialID(0))

Repeat    
  While WindowEvent() : Wend
  ExamineKeyboard()
  ExamineMouse()
  
  ;- 3 On applique le delta time
  RotateEntity(0, 10 * dt, 10 * dt, 10 * dt, #PB_Relative)
  
  ;-1 Calcul du deltatime. 
  dt = RenderWorld() / 1000
  FlipBuffers()    
  
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle) 
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

lien vers une video
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [3D] Delta Time encore une fois

Message par falsam »

G-Rom a écrit : lun. 20/févr./2023 17:53 lien vers une video
Merci beaucoup G-Rom et j'espère que d'autres utilisateurs pourront faire part de leurs commentaires.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [3D] Delta Time encore une fois

Message par G-Rom »

Non , merci a toi de faire vivre un peu le Forum.
Répondre