Positionnement de camera

Généralités sur la programmation 3D
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Positionnement de camera

Message par SPH »

Salut,

J'ai un code 3D qui affiche des boxes en ligne sur le coté gauche et en horizontale en bas.
Hors, ma camera est mal tournée. Les boxes du bas apparaissent en haut.

Voici le code :

Code : Tout sélectionner

EnableExplicit

Define Dim camera(2000),Dim light(2000),Dim mesh(2000),Dim material(2000),Dim entity(2000)
; Define camera, light, mesh, material, entity
; Define camera2, light2, mesh2, material2, entity2
Define xx.f, yy.f, zz.f, xx2.f, yy2.f, zz2.f
; Define Dim create.l(100)
Define i.l,u.l,n.l,x.l,y.l,taille_x,taille_y,piece
Define b.b
Declare CreateSquare(Mesh, Size.f)

ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")
Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)

; Camera
camera(0) = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera(0), 8, 6, 40) 
CameraLookAt(camera(0), 0, 0, 0)
RotateCamera(camera(0), 0 ,0 ,0)
; Si pas de ciel, couleur de fond
CameraBackColor(camera(0), RGB(184, 134, 11))

; Lumiere
light(0) = CreateLight(#PB_Any, RGB(255, 255, 255), -100, 100, 0)


; Création du premier cube
taille_x=8
taille_y=16


Dim tableau.b(taille_x,taille_y)

i=0
For y=0 To taille_y
  For x=0 To taille_x
    If x=0 Or y=taille_y ;Or x=taille_x 
        tableau(x,y)=1
        mesh(i) = CreateCube(#PB_Any, 1)
        material(i) = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
        entity(i) = CreateEntity(#PB_Any, MeshID(mesh(i)), MaterialID(material(i)))
        ; On redimentionne le cube.
        ScaleEntity(entity(i), 1, 1, 0.1)
        MoveEntity(entity(i), x, y, 0)
        i+1   
    EndIf
  Next
Next
For u=1 To i-1
  AttachEntityObject(entity(0), "", EntityID(entity(u)))
Next



; Boucle 3D


Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  If KeyboardReleased(#PB_Key_G) And IsEntity(Entity(0)) 
    CreateEntityBody(Entity(0), #PB_Entity_BoxBody, -0.25, 0, 0) 
  EndIf
  
  If KeyboardReleased(#PB_Key_K) And IsEntity(Entity(0))
    FreeEntity(Entity(0)) 
  EndIf
  
  ;MoveEntity(entity(1), xx, 0, 0)
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
End


!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.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Positionnement de camera

Message par falsam »

Enlève le RotateCamera() qui bizarrement fait un 360° ;)
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
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Positionnement de camera

Message par SPH »

falsam a écrit : ven. 31/mars/2023 18:15 Enlève le RotateCamera() qui bizarrement fait un 360° ;)
Avec ou sans, c'est pareil.

(et faire un 360, c'est comme faire un zéro :D )

!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.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7323
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Positionnement de camera

Message par falsam »

J'ai mis un révérenciel plan en 0, 0, 0 pour voir ce qu'il se passe. Mais en fait c'est ta boucle d'installation des pièces qui pose problème.

Jai mis un debug de la position de tes piéces pour t'aider :wink:

Code : Tout sélectionner

EnableExplicit

Define Dim camera(2000),Dim light(2000),Dim mesh(2000),Dim material(2000),Dim entity(2000)
; Define camera, light, mesh, material, entity
; Define camera2, light2, mesh2, material2, entity2
Define xx.f, yy.f, zz.f, xx2.f, yy2.f, zz2.f
; Define Dim create.l(100)
Define i.l,u.l,n.l,x.l,y.l,taille_x,taille_y,piece
Define b.b

Define mesh, entity

ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")
Add3DArchive(#PB_Compiler_Home + "examples\3D\Data\Textures", #PB_3DArchive_FileSystem)

; Camera
camera(0) = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera(0), 0, 6, 40) 
CameraLookAt(camera(0), 0, 0, 0)
RotateCamera(camera(0), 0 ,0 ,0)

; Si pas de ciel, couleur de fond
CameraBackColor(camera(0), RGB(184, 134, 11))

; Lumiere
light(0) = CreateLight(#PB_Any, RGB(255, 255, 255), -100, 100, 0)


; Création du premier cube
taille_x=8
taille_y=16


Dim tableau.b(taille_x,taille_y)

i=0
For y=0 To taille_y
  For x=0 To taille_x
    If x=0 Or y=taille_y ;Or x=taille_x 
      tableau(x,y)=1
      mesh(i) = CreateCube(#PB_Any, 1)
      material(i) = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
      entity(i) = CreateEntity(#PB_Any, MeshID(mesh(i)), MaterialID(material(i)))
      ; On redimentionne le cube.
      ScaleEntity(entity(i), 1, 1, 0.1)
      Debug "piéce en  " + Str(x) + " " + Str(y)
      MoveEntity(entity(i), x, y, 0)
      i+1   
    EndIf
  Next
Next
For u=1 To i-1
  AttachEntityObject(entity(0), "", EntityID(entity(u)))
Next

mesh = CreatePlane(#PB_Any, 10, 10, 1, 1, 1, 1)
entity = CreateEntity(#PB_Any, MeshID(mesh), #PB_Material_None)



; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  If KeyboardReleased(#PB_Key_G) And IsEntity(Entity(0)) 
    CreateEntityBody(Entity(0), #PB_Entity_BoxBody, -0.25, 0, 0) 
  EndIf
  
  If KeyboardReleased(#PB_Key_K) And IsEntity(Entity(0))
    FreeEntity(Entity(0)) 
  EndIf
  
  ;MoveEntity(entity(1), xx, 0, 0)
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
End
Petites remarques.
- Ta rotation de camera ne sert à rien.
- Declare CreateSquare(Mesh, Size.f) ne sert à rien car la procédure n'existe pas.
- Inutile de stocker 2000 fois le même mesh et 2000 fois le même matérial.
- un tableau de 2000 emplacements pour la caméra ?
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: Positionnement de camera

Message par falsam »

Tu as la possibilité de faire une rotation de ta caméra de 180° sur l'axe des X

Code : Tout sélectionner

RotateCamera(camera(0), 180 ,0 ,0)
et d'inverser la position Z de ta caméra

Code : Tout sélectionner

MoveCamera(camera(0), 0, 6, -40)
Tes cubes de la rangée du haut se retrouveront en bas.

Par contre la gravité sera inversée.
Par défaut la gravité dans OGRE3D est par défaut fixée à -9.806, ce qui correspond à la gravité terrestre.

Tu peux l'inverser avec la fonction WorldGravity()

Code : Tout sélectionner

WorldGravity(9.806)
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
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Positionnement de camera

Message par SPH »

falsam a écrit : sam. 01/avr./2023 10:58 - un tableau de 2000 emplacements pour la caméra ?
Oui, je suis un grand cinéphile 😋🤣

!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.12LTS- 64 bits
Répondre