Page 1 sur 1

Positionnement de camera

Publié : ven. 31/mars/2023 15:58
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


Re: Positionnement de camera

Publié : ven. 31/mars/2023 18:15
par falsam
Enlève le RotateCamera() qui bizarrement fait un 360° ;)

Re: Positionnement de camera

Publié : sam. 01/avr./2023 10:30
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 )

Re: Positionnement de camera

Publié : sam. 01/avr./2023 10:58
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 ?

Re: Positionnement de camera

Publié : sam. 01/avr./2023 11:17
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)

Re: Positionnement de camera

Publié : lun. 03/avr./2023 14:04
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 😋🤣