Page 1 sur 1

PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : mar. 14/févr./2023 0:05
par falsam
Bonjour les codeurs.

Avec le code ci-dessous, j'affiche notre ami Sinbad.

Utilisation.
Pour faire évoluer Sinbad, vous pouvez utiliser les touche fléchées ou bien les touches QZSD habituellement utilisées.
Vous pouvez aussi utiliser la souris pour l'orienter à droite ou à gauche. La souris permet aussi de changer l'angle de vue verticale. La touche Esc permet de quitter ce test.

Les soucis rencontrés.
Le cône de lumière qui se déplace avec Sinbad est fluide avec PB 5.73. Ce qui n'est pas le cas avec PB 6.01.
La souris est inutilisable avec PB 5.73. Ce qui n'est pas le cas avec PB 6.01.

Pouvez vous tester ce code et me dire si vous rencontrez ces différences de comportement.

Code : Tout sélectionner

EnableExplicit

Enumeration
  #Mainform
EndEnumeration

; Fenetre principale 
Global Window, Event

; Sol
Global Ground, GroundMesh, GroundMat

; Player
Global Player, PlayerMesh, Rotation.f, PlayerSpeed.f, CurrentAnimation.s

; Camera
Global Camera, Hight.f = 3, Distance.f = -30

; Lumiere
Global Light

InitEngine3D() : InitKeyboard() : InitSprite() : InitMouse()

Window = OpenWindow(#PB_Any, 0, 0, 0, 0, "", #PB_Window_Maximize | #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(Window),0, 0, WindowWidth(Window) , WindowHeight(Window))    

; Localisation des assets
Add3DArchive(#PB_Compiler_Home + "Examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/desert.zip", #PB_3DArchive_Zip)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Packs/Sinbad.zip", #PB_3DArchive_Zip)
Parse3DScripts()

; Configuration du clavier
KeyboardMode(#PB_Keyboard_International | #PB_Keyboard_AllowSystemKeys)

; Ciel, lumiere et ombre 
SkyBox("desert07.jpg")

Light = CreateLight(#PB_Any, RGB(255, 255, 255), 0, 0, 0, #PB_Light_Spot)
SpotLightRange(Light, 30, 100, 1)
AmbientColor(0)

WorldShadows(#PB_Shadow_Additive, 100, RGB(255, 0, 0), 1024)

; Création du sol
GroundMesh = CreatePlane(#PB_Any, 2000, 2000, 200, 200, 200, 200)
GroundMat = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))
Ground = CreateEntity(#PB_Any, MeshID(GroundMesh), MaterialID(GroundMat)) 
CreateEntityBody(Ground, #PB_Entity_StaticBody, 1, 1, 1)

; Player
PlayerMesh = LoadMesh(#PB_Any, "sinbad.mesh")
Player = CreateEntity(#PB_Any, MeshID(PlayerMesh), #PB_Material_None)
CreateEntityBody(Player, #PB_Entity_BoxBody, 0.1, 0, 0)
EntityAngularFactor(Player, 0, 1, 0)

; Camera 
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
CameraBackColor(Camera, RGB(145, 182, 201))

; Loop
Repeat
  
  ; Evenements window
  Repeat
    Event  = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Event = 0
  
  ; Evenements souris
  If ExamineMouse()
    ; Rotation du player
    Rotation = -MouseDeltaX() * 0.25   
    
    ; Hauteur de la camera 
    Hight + MouseDeltaY() * 0.1
    If Hight < -4
      Hight= -4
    EndIf    
    
    ; Distance de la caméra par rapport au player
    Distance + MouseWheel()
  EndIf
  
  ; Evenements claviers
  If ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Left) Or KeyboardPushed(#PB_Key_Q) 
      Rotation = 0.5 
    ElseIf KeyboardPushed(#PB_Key_Right) Or KeyboardPushed(#PB_Key_D)
      Rotation = -0.5
    EndIf
    
    If KeyboardPushed(#PB_Key_Up) Or KeyboardPushed(#PB_Key_Z)
      PlayerSpeed = 15
      CurrentAnimation = "RunBase"
    ElseIf KeyboardPushed(#PB_Key_Down) Or KeyboardPushed(#PB_Key_S)
      PlayerSpeed = -15
      CurrentAnimation = "RunBase"
    Else
      PlayerSpeed = 0
      CurrentAnimation = "IdleTop"
    EndIf   
    
    If KeyboardPushed(#PB_Key_Escape)
      End
    EndIf
  EndIf
  
  ; Action joueur (Position, Rotation, Animation)
  RotateEntity(Player, 0, Rotation, 0, #PB_Relative) 
  MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local) 
  
  If EntityAnimationStatus(Player, CurrentAnimation) = #PB_EntityAnimation_Stopped
    StartEntityAnimation(Player, CurrentAnimation)
  EndIf
  
  ; Action camera
  CameraFollow(Camera, EntityID(Player), 0, EntityY(Player) + Hight, Distance, 1, 1, #True)
  
  ; Action lumiere : 
  MoveLight(Light, EntityX(Player), 50, EntityZ(Player), #PB_Absolute)
  ;
  ; Rendering de la scene
  RenderWorld()
  FlipBuffers()  
ForEver

Re: PB 5.73 vs PB 6.1 Comportements 3D différents

Publié : mar. 14/févr./2023 8:49
par Marc56
Hello,

C'est fluide et la souris fonctionne dans les deux cas chez moi.

À noter que j'ai du désactiver Directx11 dans les option du compilateur sinon, écran blanc et message

Code : Tout sélectionner

[ERREUR] Ligne: 28
[ERREUR] InitEngine3D() doit être appelée avec succès avant d'utiliser le jeu de commandes 3D.
Pourtant InitEngine3D() est présent ligne 22 ?

PS. Je n'ai pas PB 6.1 au mieux PB 6.01 B3
:wink:

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : mar. 14/févr./2023 11:15
par blendman
Salut

ici, sur pb5.73 (directX), ça fonctionne, la souris aussi. mais le perso flotte et n'est pas sur le sol.
pb5.73 opengl : c'st nickel (le perso est sur le sol, la souric est ok et la lumière aussi.

Avec pb 6.00, aucun soucis, c'est nickel (directX).

J'ai installé directx12 il y a 3 jours sur ce pc.
À noter que j'ai du désactiver Directx11 dans les option du compilateur sinon, écran blanc et message
tu as installer directX sur ta machine ?

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : mar. 14/févr./2023 11:29
par falsam
Bonjour Marc. Merci pour ta réponse.
Marc56 a écrit : mar. 14/févr./2023 8:49 PS. Je n'ai pas PB 6.1 au mieux PB 6.01 B3
Manquait un 0. Monsieur est taquin :mrgreen:

Je n'ai pas activé de sous-système dans les options de compilation. Je pense d'ailleurs qu'il ne faut pas le faire avec cette dernière version de PureBasic.

Sur cette capture sous PB 5.73 le cône de lumière est fluide.
Image

Contrairement à cette capture sous PB 6.01.
Image

Configuration dans ma signature.

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : mar. 14/févr./2023 11:31
par falsam
Je n'avais pas vu ce petit détail !!! Sinbad a les pieds enfoncés dans le sol. Trop de cassoulet sans doute :wink:

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : mar. 14/févr./2023 11:39
par falsam
Hello Blendman. Si j'active DirectX11 avec PB 5.73 J'ai un plantage lors de l'exécution. Je ne tiens pas à installer DirectX sur mon pc. La majorité des jeux récents sont OpenGL.

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : ven. 17/févr./2023 16:38
par G-Rom
Les 2 gifs animé du dessus n'utilise pas la même technique d'éclairage , a l'oeil , un fonctionne en pixel lighting, l'autre en vertex lighting , d'ou la nécessité dans le code de diviser en 200x200 le sol, en pixel lighting , comme l'éclairage se fait au pixel , pas besoin de divisé , contrairement au vertex lighting.

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : ven. 17/févr./2023 16:57
par falsam
G-Rom a écrit : ven. 17/févr./2023 16:38 d'ou la nécessité dans le code de diviser en 200x200 le sol, en pixel lighting
C'est le cas dans le code que j'ai proposé. Je n'aurais donc pas mieux !

Re: PB 5.73 vs PB 6.01 Comportements 3D différents

Publié : ven. 17/févr./2023 17:15
par G-Rom
falsam a écrit : ven. 17/févr./2023 16:57
G-Rom a écrit : ven. 17/févr./2023 16:38 d'ou la nécessité dans le code de diviser en 200x200 le sol, en pixel lighting
C'est le cas dans le code que j'ai proposé. Je n'aurais donc pas mieux !
je sais , c'est pour cela que je dis cela, essaye de ne pas divisé dans ton code ou tu vois que "c'est fluide" , si cela marche, c'est que c'est du pixel lighting , sinon du vertex lighting