Page 1 sur 2

La 3D pour les nuls

Publié : mar. 07/mars/2023 14:15
par SPH
Salut,

tout d'abords, apparement, les exemples 3D fournis dans PB6.0 LTS fonctionnent. Je dis cela car j'ai entendu que certains (falsam ?) avaient eu un résultat inverse.
Je fais ce post qui amènera à la création d'un Tetris 3D.

Pour commencer, est-ce que l'un d'entre vous pourrait me dire si ce code est la base de la 3D ? :

Code : Tout sélectionner

ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")

Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)

Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
Quel est la plus simple instruction pour afficher un carré 3D ?

Merci 😎

Re: La 3D pour les nuls

Publié : mar. 07/mars/2023 22:52
par falsam
La base pour du full screen est presque bonne.

:arrow: Manque l'instruction RenderWorld() pour créer le rendu de la scène 3D avant l'instruction FlipBuffers() qui va effacer le rendu actuel et faire apparaitre le nouveau rendu.

:?: N'oublie pas de mettre EnableExplicit() au début de ton code afin d'éliminer tout risque de variables non déclarées.

Re: La 3D pour les nuls

Publié : mar. 07/mars/2023 23:07
par case
falsam a écrit : mar. 07/mars/2023 22:52 . N'oublie pas de mettre EnableExplicit() au début de ton code afin d'éliminer tout risque de variables non déclarées.
et perdre ainsi toute la joie du débogage ? :)

Re: La 3D pour les nuls

Publié : mar. 07/mars/2023 23:16
par falsam
SPH a écrit : mar. 07/mars/2023 14:15 Quel est la plus simple instruction pour afficher un carré 3D ?
Sérieusement ! Un carré 3D ? :mrgreen:

Bon ok. Le code pour un carré.

Code : Tout sélectionner

EnableExplicit

Define camera, light, mesh, entity

ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")

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

; Si pas de ciel, couleur de fond
CameraBackColor(camera, RGB(211, 211, 211))

; Lumiere
light = CreateLight(#PB_Any, RGB(211, 211, 211), -100, 100, 0)
AmbientColor(RGB(154, 205, 50))

; Un carré le plus simplement possible
mesh = CreatePlane(#PB_Any, 2, 2, 1, 1, 1, 1)
entity = CreateEntity(#PB_Any, MeshID(mesh), #PB_Material_None)
RotateEntity(entity, -90, 0, 0)

; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 0:06
par falsam
la procédure CreateSquare(Mesh, Size.f) va te permettre de créer un carré plus simplement

Exemple pour un carré de 1 unité de cotés

Code : Tout sélectionner

mesh = CreateSquare(#PB_Any, 1)
entity = CreateEntity(#PB_Any, MeshID(mesh), #PB_Material_None)
Code complet incluant la procédure CreateSquare()

Code : Tout sélectionner

EnableExplicit

Define camera, light, mesh, entity

Declare CreateSquare(Mesh, Size.f)

ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenScreen(DesktopWidth(0), DesktopHeight(0), 32, "3D de base")

; Camera
camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera, 0, 0, 10) 
CameraLookAt(camera, 0, 0, 0)

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

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

; Un carré le plus simplement possible
mesh = CreateSquare(#PB_Any, 1)
entity = CreateEntity(#PB_Any, MeshID(mesh), #PB_Material_None)

; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
    
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

Procedure CreateSquare(Mesh, Size.f)
  Size/2
  
  If mesh = #PB_Any 
    Mesh = CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  Else
    CreateMesh(Mesh, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  EndIf
  
  MeshVertexPosition(-Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 1)
  
  MeshVertexPosition(Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 1)
  
  MeshVertexPosition(Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 0)
  
  MeshVertexPosition(-Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 0)
  
  MeshFace(0, 1, 2)
  MeshFace(2, 3, 0)
  
  FinishMesh(#True)
  
  UpdateMeshBoundingBox(Mesh)   
  BuildMeshShadowVolume(Mesh)

  ProcedureReturn Mesh
EndProcedure


Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 0:23
par falsam
Mise à jour de la procédure CreateSquare(Mesh, Size.f)

Une petite erreur de profondeur (axe z)

Je te présente le code précédent avec application d'une texture sur le carré.

Code : Tout sélectionner

EnableExplicit

Define camera, light, mesh, material, entity

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 = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera, 0, 0, 10) 
CameraLookAt(camera, 0, 0, 0)

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

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


; Un carré le plus simplement possible
mesh = CreateSquare(#PB_Any, 1)
material = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
MaterialCullingMode(material, #PB_Material_NoCulling)
entity = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))

; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  RotateEntity(entity, 0, 0.5, 0, #PB_Relative)
    
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

Procedure CreateSquare(Mesh, Size.f)
  Size/2
  
  If mesh = #PB_Any 
    Mesh = CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  Else
    CreateMesh(Mesh, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  EndIf
  
  MeshVertexPosition(-Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 1)
  
  MeshVertexPosition(Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 1)
  
  MeshVertexPosition(Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 0)
  
  MeshVertexPosition(-Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 0)
  
  MeshFace(0, 1, 2)
  MeshFace(2, 3, 0)
  
  FinishMesh(#True)
  
  UpdateMeshBoundingBox(Mesh)   
  BuildMeshShadowVolume(Mesh)

  ProcedureReturn Mesh
EndProcedure

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 8:09
par SPH
Ok merci, on fera avec 😁

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 16:19
par SPH
Ok, je me suis penché sur le code.
Question : je suppose qu'il n'y a qu'une camera et une light !?

J'ai voulu rajouter un carré mais je dois m'y prendre mal. Enfin, presque puisqu'il apparait. il a une autre texture et ne tourne pas (c'est volontaire). Mais j'aurais voulu le placer autre part. Quelle est l'instruction pour cela ?

Egalement : la caisse qui tourne produit une affreuse texture quand elle est presque sur la tranche. Mais ça, ça doit venir de la texture qui n'est que de 64*64.

Code : Tout sélectionner

EnableExplicit

Define camera, light, mesh, material, entity
Define camera2, light2, mesh2, material2, entity2

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 = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera, 0, 0, 10) 
CameraLookAt(camera, 0, 0, 0)

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

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


; Un carré le plus simplement possible
mesh = CreateSquare(#PB_Any, 1)
material = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
MaterialCullingMode(material, #PB_Material_NoCulling)
entity = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))

; Un carré le plus simplement possible
mesh2 = CreateSquare(#PB_Any, 1)
material2 = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))
MaterialCullingMode(material2, #PB_Material_NoCulling)
entity2 = CreateEntity(#PB_Any, MeshID(mesh2), MaterialID(material2))


; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  RotateEntity(entity, 0, 0.5, 0, #PB_Relative)
    
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

Procedure CreateSquare(Mesh, Size.f)
  Size/2
  
  If mesh = #PB_Any 
    Mesh = CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  Else
    CreateMesh(Mesh, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
  EndIf
  
  MeshVertexPosition(-Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 1)
  
  MeshVertexPosition(Size, -Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 1)
  
  MeshVertexPosition(Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(1, 0)
  
  MeshVertexPosition(-Size, Size, 0)
  MeshVertexNormal(0, 0, 1)
  MeshVertexTextureCoordinate(0, 0)
  
  MeshFace(0, 1, 2)
  MeshFace(2, 3, 0)
  
  FinishMesh(#True)
  
  UpdateMeshBoundingBox(Mesh)   
  BuildMeshShadowVolume(Mesh)

  ProcedureReturn Mesh
EndProcedure

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 18:59
par falsam
SPH a écrit : mer. 08/mars/2023 16:19 la caisse qui tourne produit une affreuse texture quand elle est presque sur la tranche. Mais ça, ça doit venir de la texture qui n'est que de 64*64.
Rien à voir avec la texture. C'est un carré, donc pas de texture possible sur la tranche.

Dans ce cas il faut mettre un cube que tu redimensionnes si tu veux une texture sur la tranche.
SPH a écrit : mer. 08/mars/2023 16:19 j'aurais voulu le placer autre part. Quelle est l'instruction pour cela ?
MoveEntity() pour déplacer une entité.
:arrow: https://www.purebasic.com/french/docume ... ntity.html

Ton nouveau code

Code : Tout sélectionner

EnableExplicit

Define camera, light, mesh, material, entity
Define camera2, light2, mesh2, material2, entity2

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 = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(camera, 0, 0, 10) 
CameraLookAt(camera, 0, 0, 0)

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

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


; Création du premier cube
mesh = CreateCube(#PB_Any, 1)
material = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
entity = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))

; On redimentionne le cube.
ScaleEntity(entity, 1, 1, 0.25)

; Mise en place du second cube
;mesh2 = CreateSquare(#PB_Any, 1) ; Inutile tu peux te servir du premier mesh
material = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))
entity2 = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))
ScaleEntity(entity2, 1, 1, 0.5)

; Positionnement de l'entité à droite de la précédente
MoveEntity(entity2, 2, 0, 0)

; Boucle 3D
Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  RotateEntity(entity, 0, 0.5, 0, #PB_Relative)
    
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 19:04
par falsam
Information complémentaire en image sur la représentation 3D d'OGRE3D.

Image

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 19:09
par SPH
Je sais qu'il n'y a pas d'épaisseur sur le carré. J'appelle "tranche" le carré PRESQUE tourné à 90°
Tu verras, l'image de la caisse se dégrade (un peu comme le code que tu as posté sur le flou du sol de ton ogre qui marche) :?

Re: La 3D pour les nuls

Publié : mer. 08/mars/2023 19:13
par SPH
Ton dernier code est parfait ! Je pourrais faire des pièces de Tetris en 3D

Merci :wink:

Re: La 3D pour les nuls

Publié : ven. 24/mars/2023 15:13
par SPH
Salut à tous.

Bon, comme j'ai fini mon jeu, je me met (sérieusement) à la 3D.

Voici un code créant une "scène" (des pièces de Tetris).
J'ai aussi fait mumuse avec la caméra.

Au prochain code, si j'y arrive, je ferais tourner la pièce Tetris sur son axe haut/bas.

est-ce que c'est pas mal ou bien je fais fausse route ? :?: :o

Code : Tout sélectionner

EnableExplicit

Define Dim camera(100),Dim light(100),Dim mesh(100),Dim material(100),Dim entity(100)
; 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,x.l,y.l
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), 0, 0, 20) 
CameraLookAt(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

For i=0 To 6
  For y=0 To 3
      For x=0 To 3
    Read.b b
    If b=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+(i-3)*4.5, y, 0)
    EndIf
    
    Next
  Next
Next

; Mise en place du second cube
;mesh2 = CreateSquare(#PB_Any, 1) ; Inutile tu peux te servir du premier mesh
;material = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "Dirt.jpg")))
; entity2 = CreateEntity(#PB_Any, MeshID(mesh), MaterialID(material))
; ScaleEntity(entity2, 1, 1, 0.1)
; 
; ; Positionnement de l'entité à droite de la précédente
; MoveEntity(entity2, 1, 0, 0)

; Boucle 3D

Repeat
  ExamineKeyboard()
  ExamineMouse()
   xx=Sin(xx2)*8
   xx2+0.007
   yy=Cos(yy2)*9
   yy2+0.0128
   zz=Cos(zz2)*10
   zz2+0.022
  
  ;RotateEntity(entity, xx, yy, 0, #PB_Relative)
  RotateCamera(camera(0),xx,yy,zz,#PB_Absolute)
  
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

DataSection
  Data.b 0,0,0,0
  Data.b 0,1,1,0
  Data.b 0,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,0,0,0
  Data.b 1,1,1,1
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,0,1,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 1,0,0,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,1,0,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 1,1,0,0
  Data.b 0,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,1,1,0
  Data.b 1,1,0,0
  Data.b 0,0,0,0
  ;;;
EndDataSection


Re: La 3D pour les nuls

Publié : mer. 29/mars/2023 21:24
par SPH
Salut,

je code mais je ne raisonne pas en 3D. par exemple, je me réfère a un tableau pour afficher des pièces déjà pausées.
Pourriez-vous m'indiquer quelle instruction permet de "lier" 4 carrés pour former une pièce de Tétris, une instruction pour la gravité et une instruction pour killer une caisse ?
Merci

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, 30) 
CameraLookAt(camera(0), 0, 0, 0)
RotateCamera(camera(0), 0 ,0 ,180)
; 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=16
taille_y=12


Dim tableau.b(taille_x,taille_y)

i=0
For y=0 To taille_y
  For x=0 To taille_x
    If y>taille_y/2; Or y=0
      If Random(1)=0
        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
    EndIf
  Next
Next


Dim piece.b(27,3,3) ; toutes les pieces de tetris dans ce dim piece()
For n=0 To 6
  For y=0 To 3
    For x=0 To 3
      Read.b piece(n,x,y)
      piece(n+7,3-y,x)=piece(n,x,y)
      piece(n+14,3-x,3-y)=piece(n,x,y)
      piece(n+21,y,3-x)=piece(n,x,y)
    Next
  Next
Next







;Goto ok
u=24
i=0
For piece=1 To 27 Step 3
  ;piece=2+7+7+7
  For y=0 To 3
    For x=0 To 3
      If piece(piece,x,y)=1
        mesh(i+900) = CreateCube(#PB_Any, 1)
        material(i+900) = CreateMaterial(#PB_Any, TextureID(LoadTexture(#PB_Any, "caisse.png")))
        entity(i+900) = CreateEntity(#PB_Any, MeshID(mesh(i+900)), MaterialID(material(i+900)))
        ; On redimentionne le cube.
        ScaleEntity(entity(i+900), 1, 1, 0.1)
        MoveEntity(entity(i+900), x+u, y, 0)
      EndIf
      i+1
    Next
  Next
  u-4
Next
; 
ok:

; Boucle 3D
xx=0.125

Repeat
  ExamineKeyboard()
  ExamineMouse()
  
  If KeyboardPushed(#PB_Key_Up)   ; Appuyez sur la touche [Echap] pour quitter
  EndIf
  
  If KeyboardPushed(#PB_Key_Down)   ; Appuyez sur la touche [Echap] pour quitter
  EndIf
  
  For y=0 To taille_y
    i=0
    For x=0 To taille_x
      i+tableau(x,y)
    Next
    If i=taille_x
      ; supprimer cette ligne remplie
      Beep_(500,100)
      For u=y To 1 Step -1
        For i=0 To taille_x
          tableau(i,u-i)=tableau(i,u)
        Next
      Next
      
    EndIf
  Next
  
  
  ;MoveEntity(entity(1), xx, 0, 0)
  RenderWorld() 
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)
End

;{

DataSection
  Data.b 0,0,0,0
  Data.b 0,1,1,0
  Data.b 0,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,0,0,0
  Data.b 1,1,1,1
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,0,1,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 1,0,0,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,1,0,0
  Data.b 1,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 1,1,0,0
  Data.b 0,1,1,0
  Data.b 0,0,0,0
  ;;;
  Data.b 0,0,0,0
  Data.b 0,1,1,0
  Data.b 1,1,0,0
  Data.b 0,0,0,0
  ;;;
EndDataSection
;}

Re: La 3D pour les nuls

Publié : mer. 29/mars/2023 21:58
par falsam
SPH a écrit : mer. 29/mars/2023 21:24 une instruction pour la gravité
Tu dois ajouter un corps à ton entité.
:arrow: CreateEntityBody()
Exemple avec ton entité 1 dans ton tableau

Code : Tout sélectionner

If KeyboardReleased(#PB_Key_G) And IsEntity(Entity(1)) 
    CreateEntityBody(Entity(1), #PB_Entity_BoxBody, 0.5, 0, 0) 
EndIf
SPH a écrit : mer. 29/mars/2023 21:24 une instruction pour killer une caisse
Utiliser la fonction FreeEntity()
Exemple avec ton entité 4

Code : Tout sélectionner

If KeyboardReleased(#PB_Key_K) And IsEntity(Entity(4))
    FreeEntity(Entity(4)) 
EndIf