CameraFollow (PB 5.20 Beta 6)

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 :

CameraFollow (PB 5.20 Beta 6)

Message par falsam »

Nouvelle fonction qui apparaît avec la vers 5.20 Beta 6

CameraFollow(#Camera, Angle, ObjectID, Height, Distance, RotationPercent, PositionPercent)

Camera : C'est la camera qui va suivre votre entité
Angle : L'angle où la caméra sera placée (Devant, derrière, à gauche ou à droite)
ObjectId : Par exemple l'entité à suivre
Height : A quel hauteur se trouve la camera
Distance : Et à quel distance en arrière

Je n'ai pas trouver les mots pour expliquer les deux paramètres qui suivent.
Je dirais que ça va permettre de paramétrer l'inertie de la caméra à se repositionner derrière l'entité
RotationPercent : Valeur décimale
PositionPercent : Valeur decimale

Exemple :

Code : Tout sélectionner

; Naissance d'un cube : Camera Follow

EnableExplicit

InitEngine3D()
InitKeyboard()
InitSprite()

Global Window, Event
Global Camera

Global Texture, Material 
Global Player_Mesh, Player, PlayerSpeed.f
Global Ground_Mesh, Ground

Window = OpenWindow(#PB_Any,0,0,1024,768,"Cube Follow")
OpenWindowedScreen(WindowID(window),0,0,1024,768)

;
; Activation Physics et Collisions (A mon avis ça ne sert à rien)
EnableWorldPhysics(#True) 
EnableWorldCollisions(#True)

;
; Ambience, Lumiére blanche et activation des ombres
AmbientColor(RGB(127, 127, 127))
CreateLight(#PB_Any,RGB(151, 251, 151), -1.8, 10, 5)
WorldShadows(#PB_Shadow_Additive)

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

;
; Materiel (texture) qui servira pour le sol et le cube
Texture = CreateTexture(#PB_Any,256,256)
StartDrawing(TextureOutput(Texture))
Box(0,0,256,256,RGB(0, 0, 0))
Box(1,1,252,252,RGB(255, 216, 0))
StopDrawing()
Material = CreateMaterial(#PB_Any, TextureID(Texture))

;
; Un cube qui servira pour le joueur et les obstacles
Player_Mesh = CreateCube (#PB_Any, 1)

;
; Creation du sol (Obstacle static)
Ground_Mesh = CreatePlane(#PB_Any, 50, 50, 1, 1, 6, 6)
Ground = CreateEntity(#PB_Any, MeshID(Ground_Mesh), MaterialID(Material))
EntityPhysicBody(Ground, #PB_Entity_StaticBody, 0,0,1)

;
; Le joueur
Player = CreateEntity(#PB_Any, MeshID(Player_Mesh), MaterialID(Material), 0, 0.5, 0)
EntityPhysicBody(Player, #PB_Entity_BoxBody, 1, 0.1, 0.2)



Repeat
  Event = WindowEvent()
  
  If ExamineKeyboard()
    
    ;Sortie du jeu
    If KeyboardPushed (#PB_Key_Escape)
     Break
    EndIf
       
    ;En avant ou en arriére
    If KeyboardPushed (#PB_Key_Up)
      PlayerSpeed = 2
    ElseIf KeyboardPushed (#PB_Key_Down)
      PlayerSpeed = - 2
    Else
      PlayerSpeed = 0
    EndIf
    
    ;A gauche ou à droite
    If KeyboardPushed (#PB_Key_Left)
      RotateEntity(Player, 0, 1.5, 0, #PB_Relative)
    ElseIf KeyboardPushed (#PB_Key_Right)
      RotateEntity(Player, 0, -1.5, 0, #PB_Relative)
    EndIf
    
    If PlayerSpeed <>0
      DisableEntityBody(Player, #False) ; Pour réveiller le player qui parfois reste bloquer
      MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
    EndIf 
    
    ;Nouvelle fonction qui apparait avec la vers 5.20 Beta 6 
    ;CameraFollow(#Camera, Angle, ObjectID, Height, Distance, RotationPercent, PositionPercent)
    
    ;Essayer les deux exemples qui suivent
    
    ;CameraFollow(Camera, EntityID(Player), -180, 3, 6, 1.00, 1.00)   
    CameraFollow(Camera, EntityID(Player), -180, 3, 6, 0.05, 0.05)   
    
  EndIf
  
  ; Affiche le rendu de la scène
  ClearScreen(RGB(0, 0, 0))
  RenderWorld(40)
  FlipBuffers()  
ForEver
Quand vous exécutez ce code et que vous attendez avec de faire avancer le cube, celui çi se bloque. Seul moyen de le réveiller c'est d'utiliser DisableEntityBody(Player, #False) juste avant le déplacement du cube MoveEntity(Player, 0, 0, PlayerSpeed, #PB_Absolute|#PB_Local)
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%
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: CameraFollow (PB 5.20 Beta 6)

Message par comtois »

falsam a écrit :Je n'ai pas trouver les mots pour expliquer les deux paramètres qui suivent.
Je dirais que ça va permettre de paramétrer l'inertie de la caméra à se repositionner derrière l'entité
C'est une interpolation linéaire.
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.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: CameraFollow (PB 5.20 Beta 6)

Message par SPH »

Merci falsam pour tes tutos 3D. J'ai un peu laché la mais je vais m'y remettre. J'en etais au cube. :P
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: CameraFollow (PB 5.20 Beta 6)

Message par Micoute »

Bonjour falsam et je dis MERCI PROFESSEUR, c'est une joie d'apprendre avec toi !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre