Page 1 sur 2
[3D] Delta Time encore une fois
Publié : dim. 19/févr./2023 17:25
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.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 13:49
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é :
et cela :
l'entité fera une rotation de 360° par secondes, quelque soit la config
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 15:55
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)
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 16:47
par G-Rom
logique, tu tournes a 0.2° par secondes.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 16:49
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
Je suis dubitatif ....
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 16:55
par G-Rom
chez toi, mais chez moi il va tourné trop vite.
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.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 16:58
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é.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:13
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 !

Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:19
par G-Rom
et sans synchro , je suis a 0.0010000000475 de dt , la gerbe en somme

Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:22
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)
...
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:26
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
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.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:42
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.
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)
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 17:53
par G-Rom
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 18:04
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.
Re: [3D] Delta Time encore une fois
Publié : lun. 20/févr./2023 18:37
par G-Rom
Non , merci a toi de faire vivre un peu le Forum.