Bonjour,
Je vais en avoir des code a analyser pour la 3D, Merci.
Cordialement,
GallyHC
Creation Ville Automatique 3D
Re: Probleme Collision 3D
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Probleme Collision 3D
exemple avec une camera qui suit un cube avec un body.
http://www.purebasic.fr/english/viewtop ... 41&start=7
Je n'ai pas nettoyé le code d'origine, y'a des trucs qui ne servent pas.
Sinon dans les exemples PB il y a ThirdPErson.pb qui montre une autre approche.
Il y a une entity avec body pour gérer les collisions (cette entity est cachée), et comme l'origine du body est différente de celle du mesh, j'ai ajouté une autre entity sans body et c'est celle qui est visible et à laquelle on peut attacher une caméra.
http://www.purebasic.fr/english/viewtop ... 41&start=7
Je n'ai pas nettoyé le code d'origine, y'a des trucs qui ne servent pas.
Sinon dans les exemples PB il y a ThirdPErson.pb qui montre une autre approche.
Il y a une entity avec body pour gérer les collisions (cette entity est cachée), et comme l'origine du body est différente de celle du mesh, j'ai ajouté une autre entity sans body et c'est celle qui est visible et à laquelle on peut attacher une caméra.
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.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Re: Probleme Collision 3D
J'ai jeté un coup d'oeil, et j'ai quelques remarques:
- Dans le "CreateCamera", les deux premiers paramètres sont les coordonnées en pixels du coin supérieur gauche de la vue => quand tu mets "-5,0" ça signifie que les 5 pixels de gauche sont affichés en dehors de l'écran (ce qui est un peu bizarre);
- "WorldDebug(#PB_World_DebugBody)" est super pratique pour vérifier que les bodies physiques sont bien placés et dimensionnés;
- La taille des objets est mesurée en mètres. Bullet est à l'aise avec des objets (non-statiques) allant de 5cm à 10 mètres => Le cube lié à la caméra fait 50 mètres, ce qui explique en partie la difficulté à le faire bouger;
- Le paramètre "mass" de EntityPhysicBody ne doit pas être mis à zéro, sinon l'objet et considéré comme "immuable": il n'est pas soumis à la gravité, ne peut être déplacé, etc..
- Perso, je préfère un "ForEach listObjet()" à "ResetList(list_objet())" + "While NextElement(list_objet())...", mais c'est une question de goût...
Avec tout ça en tête j'ai modifié ton code (très peu, en fait) et ça marche:
Modifs:
- CreateCamera avec (0,0,100,100);
- WorldDebug pour mieux voir la physique;
- Toutes les tailles divisées par 10;
- La caméra est attachée au cube et on ne manipule que ce dernier (ce que tu avais fait au début);
- Masse du cube <> 0;
- Friction et restitution du cube = 0 pour que ça glisse mieux.
- Dans le "CreateCamera", les deux premiers paramètres sont les coordonnées en pixels du coin supérieur gauche de la vue => quand tu mets "-5,0" ça signifie que les 5 pixels de gauche sont affichés en dehors de l'écran (ce qui est un peu bizarre);
- "WorldDebug(#PB_World_DebugBody)" est super pratique pour vérifier que les bodies physiques sont bien placés et dimensionnés;
- La taille des objets est mesurée en mètres. Bullet est à l'aise avec des objets (non-statiques) allant de 5cm à 10 mètres => Le cube lié à la caméra fait 50 mètres, ce qui explique en partie la difficulté à le faire bouger;
- Le paramètre "mass" de EntityPhysicBody ne doit pas être mis à zéro, sinon l'objet et considéré comme "immuable": il n'est pas soumis à la gravité, ne peut être déplacé, etc..
- Perso, je préfère un "ForEach listObjet()" à "ResetList(list_objet())" + "While NextElement(list_objet())...", mais c'est une question de goût...
Avec tout ça en tête j'ai modifié ton code (très peu, en fait) et ça marche:
Code : Tout sélectionner
;Ville automatique 3D
; By spock
Enumeration
#Camera
#Entity
#mesh
#material
#texture
;
#sol
#Entity_sol
#material_sol
;
#Mesh_tour
#entity_tour
#material_tour
#texture_tour
EndEnumeration
#CameraSpeed = 20
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, Keyz, MouseX, MouseY
Declare.s ParseDirectory(folder.s, id.l = 0)
Declare Create_batiment(x,y,taille_x,taille_y,taille_h)
Global x=-800
Global y=-800
Global NewList list_objet(), coll,entity_c_obj,Entity_sol
If InitEngine3D()
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
EnableWorldPhysics(#True)
WorldDebug(#PB_World_DebugBody)
If Screen3DRequester()
AmbientColor(RGB(255, 255, 255))
;{ ***************** les Creations d'objets **********************************
; ******* le Sol **************************************
;-creation Sol
CreateMaterial(#material_sol, LoadTexture(#texture, "grass.jpg"))
CreatePlane(#sol, 1600,1600,100,100,100, 100)
Entity_sol=CreateEntity(#PB_Any, MeshID(#sol), MaterialID(#material_sol))
MoveEntity(Entity_sol,0,0,0)
EntityPhysicBody(Entity_sol, #PB_Entity_StaticBody,999,0,0.2)
; *****************************************************
;
; *********** la camera **********************************
;-creation Camera
CreateCamera(#Camera, 0, 0, 100, 100) ; Front camera
CameraBackColor(#Camera , RGB(120, 120, 255))
;Creation de l'objet camera .. (pour collision )
c_obj=CreateCube(#PB_Any,5)
entity_c_obj=CreateEntity(#PB_Any,MeshID(c_obj), MaterialID(#material_sol),0,2.5,25)
MoveCamera(#Camera , 0, 2.5, 25, #PB_Absolute)
AttachEntityObject(entity_c_obj, "", CameraID(#Camera))
EntityPhysicBody(entity_c_obj, #PB_Entity_BoxBody,0.1,0,0)
; *********************************************************
; *************** matiere des batiments ********************************²
;-creation batiments
CreateMaterial(#material_tour, LoadTexture(#texture_tour, "wall.jpg"))
; **************************************************************
; ************* Creation des Batiments *******************
nombre_de_batiments=300
For i = 1 To nombre_de_batiments
Taille_x=Random(10,2)/10.0
Taille_y=Random(10,2)/10.0
Taille_h=Random(800,5)/10.0
x=-800+Random(1600,Taille_x)
y=-800+Random(1600,Taille_y)
Create_batiment(x,y,taille_x,taille_y,taille_h)
Next
; ****************************************************
;}
Repeat
;-debut boucle principale
Screen3DEvents()
; *********** les controles ***************************************************
;-les controles
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.01
MouseY = -MouseDeltaY() * #CameraSpeed * 0.01
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
xc=keyx
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
xc=keyx
Else
KeyX = 0
xc=0
EndIf
If KeyboardPushed(#PB_Key_Up)
Keyz = -#CameraSpeed
zc=keyz
ElseIf KeyboardPushed(#PB_Key_Down)
Keyz = #CameraSpeed
zc=keyz
Else
Keyz = 0
zc=0
EndIf
EndIf
; ***********************************************************
; *************** Test des collisions ****************************************
;- test des collisions
ForEach list_objet()
coll=EntityCollide(entity_c_obj,list_objet())
If coll<>0
ClearDebugOutput()
Debug "Collision avec l'objet " + Str(list_objet())
Break
EndIf
Next list_objet()
; *************************************************************************
; ******************** deplacements et affichage ****************************************
;- deplacements et affichage
; On ne touche qu'au cube. Comme la caméra y est attachée, elle suivra.
RotateEntity(entity_c_obj,0, MouseX, 0, #PB_Relative )
MoveEntity (entity_c_obj, KeyX,0, Keyz,#PB_Local )
RenderWorld()
Screen3DStats()
FlipBuffers()
; *************************************************************************************
;-Fin Boucle principale
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
;- ******* Zone Procedures *************************************
Procedure Create_batiment(x,y,taille_x,taille_y,taille_h)
; *************** les batiments *************************************
type=Random(3,1)
Select Type
Case 1 ; les tours
id=CreateCylinder(#PB_Any, taille_x*10,taille_h*4)
entity=CreateEntity(#PB_Any,MeshID(id), MaterialID(#material_tour))
MoveEntity(entity,x,(taille_h*4)/2,y)
RotateEntity(Entity,0, 0, 0 )
Case 2 ; les immeubles
id=CreateCube(#PB_Any, taille_h)
entity=CreateEntity(#PB_Any,MeshID(id), MaterialID(#material_tour))
MoveEntity(entity,x,taille_h/2,y)
RotateEntity(Entity, 0, Random(359,0)/4, 0 )
Case 3 ; les immeubles aussi
id= CreateCube(#PB_Any, taille_h)
entity=CreateEntity(#PB_Any,MeshID(id), MaterialID(#material_tour))
MoveEntity(entity,x,taille_h/2,y)
RotateEntity(Entity,0, Random(359,0)/4, 0 )
EndSelect
EntityPhysicBody(entity, #PB_Entity_StaticBody,1,1,1)
AddElement(list_objet())
list_objet()=entity
; *************************************************************
EndProcedure
- CreateCamera avec (0,0,100,100);
- WorldDebug pour mieux voir la physique;
- Toutes les tailles divisées par 10;
- La caméra est attachée au cube et on ne manipule que ce dernier (ce que tu avais fait au début);
- Masse du cube <> 0;
- Friction et restitution du cube = 0 pour que ça glisse mieux.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Re: Probleme Collision 3D
Bonjour à tous, sans vouloir m’immiscer dans ce topic, moi je pense que dans la rubrique Trucs et astuces, il devrait y avoir un topic relatant des pépites découvertes au fil des programmes et apportant un plus dans la compréhension de certaines fonctions mal documentées.
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Creation Ville Automatique 3D
Pour quelqu'un qui comprends rien au moteur 3D PB, c'est pas mal
Re: Creation Ville Automatique 3D
C'est clair, j'aimerai y arriver aussi mal
Ce prog une fois en place sera d'un aide précieuse.
Ce prog une fois en place sera d'un aide précieuse.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Creation Ville Automatique 3D
Code : Tout sélectionner
IncludeFile "Screen3DRequester.pb"
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
!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
Re: Creation Ville Automatique 3D
Non, tu as pris des mauvaises habitudes ,par exemple appeler un terrain "matrix" & fournir un lot de commande sur les matrix3 était une énorme confusion pour moi qui débutait la programmation.Spock a écrit : plus serieusement , grace au Darkbasic d'ou je venais avant de polluer tes forums
j'ai acquis quelques notions de 3D , c'est pourquoi je me permet les comparaisons de "facilité" de codage
Merci
C'est juste des nouvelles habitude à prendre.