Code source complet -Collision 3D et réponse

Généralités sur la programmation 3D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

CameleonTH a écrit :Tu peut donner ta source, et un conseil change le fov de la camera car sa fait un effet de zoom et c'est desagrable. :D
Pour le camerafov tu n'as pas tort :)
Je vais ajouter un fichier préférence pour changer quelques paramètres , dont le camerafov.

ma source ? tu parles du code ? c'est le même que ci dessus pour les collisions. et j'ai fait le mesh avec l'éditeur DeleD.

Ensuite, j'ai passé le mesh à la moulinette pour en faire un Xml , et j'ai fait un petit code pour récupérer les triangles à partir du fichier Xml.
C'est les fichiers Triangles.HD.
Ensuite je colle ces triangles dans une liste chainée , comme dans le code ci dessus. Je mettrai sûrement le code sur le forum plus tard, quand j'aurai dépoussiéré :)
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
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Comtois, pas mal ! N'as tu pas l'idée de te lancer dans un jeu ou d'un wrapper genre Blitz3D ?

Tes applis tournent en moyenne à60fps
Tes codes sources pour ses applis font combien de lignes ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Progi1984 a écrit :Comtois, pas mal ! N'as tu pas l'idée de te lancer dans un jeu ou d'un wrapper genre Blitz3D ?
Un jeu ça demande trop de disponibilité , et aussi trop de compétences que je n'ai pas.
Je préfère procéder par petites touches, apprendre à réaliser des portions d'un jeu , comme le pathfinding, la détection de collision , etc .
Il y a encore bcp de sujets à apprendre avant que j'envisage de me lancer dans un jeu :)

Pour le wrapper , je ne comprends pas ta question , que veux-tu dire ?
Tes applis tournent en moyenne à60fps
Merci pour l'info , c'est incroyable comme PB tourne vite !! dans la démo WareHouse , je calcule 14000 triangles en permanence !
(Je ferai un tri plus tard , depuis le temps que j'y songe ...)
Tes codes sources pour ses applis font combien de lignes ?
800 lignes environ , peut-être moins si j'enlève tout ce qui ne sert à rien :)
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
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

un wrappeur : en fait, le problème au niveau du Pure3D (la 3D dans PureBasic :p), c'est que l'on gère soit meme les triangles ! Alors que des fonctions genre loadmesh, createcube, etc... (cf les commandes de Blitz3D : http://www.blitzbasic.com/b3ddocs/comma ... 3d_cat.php)
seraient plus faciles d'accés !
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

tu as une fonction loadMesh dans pureBasic , et avec le moteur physique ODE, tu n'as plus à te préoccuper des triangles , tu as regardé les nouveautés de la 3D :)
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.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Etonnant :), un vrai petit fps, manque plus que le flingue, je serais curieux de voir le code source :wink:

Bravo en tous les cas....
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

pour le flingue j'avais commencé , mais ça ne rend pas bien avec un flingue 3D , ça serait plus simple avec un sprite :)

Pour le source , c'est exactement le même que dans ma première démo , et il est déjà dispo , tu peux le lire en remontant de quelques lignes.
La seule différence , c'est que je ne construis plus les meshs manuellement , je charge un mesh créé par DeleD ( un éditeur 3D) , c'est encore plus simple.
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.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

comtois a écrit :pour le flingue j'avais commencé , mais ça ne rend pas bien avec un flingue 3D , ça serait plus simple avec un sprite :)

Pour le source , c'est exactement le même que dans ma première démo , et il est déjà dispo , tu peux le lire en remontant de quelques lignes.
La seule différence , c'est que je ne construis plus les meshs manuellement , je charge un mesh créé par DeleD ( un éditeur 3D) , c'est encore plus simple.
ok :), j'avais pas lu tout le post, juste essayé l'exe de l'archive, je vais revoir ca des le debut...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

comtois a écrit :Pour le source , c'est exactement le même que dans ma première démo , et il est déjà dispo , tu peux le lire en remontant de quelques lignes.
La seule différence , c'est que je ne construis plus les meshs manuellement , je charge un mesh créé par DeleD ( un éditeur 3D) , c'est encore plus simple.
Donc au final on n'a pls besoin de gérer les triangles. ON utilise (deled vraoment trop cool cet outil), on fait un load mesh, et ensuite on s'amuse comme des petits fous avec la 3D :)
C'est ca ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Progi1984 a écrit :Donc au final on n'a pls besoin de gérer les triangles. ON utilise (deled vraoment trop cool cet outil), on fait un load mesh, et ensuite on s'amuse comme des petits fous avec la 3D :)
C'est ca ?
Presque ! Disons qu'avec DeleD tu as un bon éditeur de niveau , qui te génère les mesh et les fichiers materials ainsi que les lightmap .
Ensuite ,si tu veux ajouter des collisions , tu devras toujours gérer les triangles . Avant je devais les gérer pour l'affichage et les collisions , avec DeleD , je n'en ai besoin que pour les collisions.

Ou alors tu peux utiliser ODE , et définir ton mesh comme un #PB_Entity_StaticBody.

mais tu ne pourras faire que du lâcher d'objets , j'ai déjà essayé de diriger une entity en utilisant ODE , mais je n'arrive à rien , il manque des paramètres (vitesse, direction etc) pour qu'ODE puisse gérer les déplacements, enfin il me semble , je peux me tromper , je ne maitrise pas le sujet :?
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.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Et ça c'est le code que j'utilise pour l'instant ( en attendant mieux ) pour récupérer les triangles du mesh pour gérer les collisions
La première amélioration à faire c'est de prendre en compte la normale de chaque triangle depuis l'éditeur , ça me permettrait déviter de calculer un triangle si je lui tourne le dos.

Code : Tout sélectionner

;Comtois 10/02/06
;PB4.0 Beta 2

Source$="D:\Test3D\temple.xml"               ; <<<< Fichier du mesh dans le format Xml
Destination$="D:\Test3D\TempleTriangles.HD"  ; <<<< Fichier contenant la liste des triangles

Structure Face
  v1.l
  v2.l
  v3.l
EndStructure

Structure Vertex
  x.f
  y.f
  z.f
EndStructure

Structure Point3D
   x.f
   y.f
   z.f
EndStructure
Structure Vecteur
   x.f
    y.f
    z.f
EndStructure
Structure Triangle
   P1.Point3D
    P2.Point3D
    P3.Point3D
   Constante.f
    Normale.Vecteur
EndStructure


NewList Face.Face()
Global NewList ListTriangle.Triangle()

Procedure.s StringFieldPerso(T$,Index)
  Champ=0
  Deb=0
  Chaine$=""
  For i=1 To Len(T$)
    Car$=Mid(T$,i,1)
    If Car$=Chr(34)
      If Deb=0
        Deb=1
        Champ + 1
        Continue
      Else
        Deb=0
      EndIf
    EndIf 
    If Champ=Index And Deb
      Chaine$=Chaine$+Car$
    EndIf 
  Next i
  ProcedureReturn Chaine$
EndProcedure

OpenConsole()
SubMesh = 0

If OpenFile(0,Source$)
 
  PrintN("Ouverture du fichier Xml : " + Source$)
 
  While Eof(0)=0
   
    Ligne$=ReadString(0)
    If FindString(Ligne$,"<faces count=",1)
      Pos=FindString(Ligne$,"count=",1)
      Pos + 7
      NbFace=Val(Mid(Ligne$,Pos,Len(Ligne$)-Pos-1))
      SubMesh + 1
      PrintN("SubMesh No : " + Str(SubMesh))
      PrintN("Nombre de triangles : " + Str(NbFace))
     
      ;Lecture des Faces
      ClearList(Face())
      For i=1 To NbFace
        Ligne$=ReadString(0)
        AddElement(Face())
        Face()\v1=Val(StringFieldPerso(Ligne$,1))
        Face()\v2=Val(StringFieldPerso(Ligne$,2))
        Face()\v3=Val(StringFieldPerso(Ligne$,3))
      Next i 
    EndIf
   
    ;Cherche les vertices
    If FindString(Ligne$,"<geometry vertexcount=",1)
      Pos=FindString(Ligne$,"count=",1)
      Pos + 7
      NbVertex=Val(Mid(Ligne$,Pos,Len(Ligne$)-Pos-1))
      PrintN("Nombre de sommets : " + Str(NbVertex))
      Dim Vertex.Vertex(NbVertex)
    EndIf 
   
    If FindString(Ligne$,"<vertexbuffer",1) 
      Index=0
    EndIf
   
    ;Lecture des vertex
    If FindString(Ligne$,"<position",1)
      Vertex(Index)\x=ValF(StringFieldPerso(Ligne$,1))
      Vertex(Index)\y=ValF(StringFieldPerso(Ligne$,2))
      Vertex(Index)\z=ValF(StringFieldPerso(Ligne$,3))
      Index + 1
    EndIf 
     
    ;On peut enregistrer ce submesh
    If FindString(Ligne$,"</vertexbuffer>",1)
       ForEach Face()
        AddElement(ListTriangle())
        ;v1
        ListTriangle()\P1\x=Vertex(Face()\v1)\x
        ListTriangle()\P1\y=Vertex(Face()\v1)\y
        ListTriangle()\P1\z=Vertex(Face()\v1)\z
        ;v2
        ListTriangle()\P2\x=Vertex(Face()\v2)\x
        ListTriangle()\P2\y=Vertex(Face()\v2)\y
        ListTriangle()\P2\z=Vertex(Face()\v2)\z
        ;v3
        ListTriangle()\P3\x=Vertex(Face()\v3)\x
        ListTriangle()\P3\y=Vertex(Face()\v3)\y
        ListTriangle()\P3\z=Vertex(Face()\v3)\z
      Next
    EndIf   
  Wend 
  CloseFile(0)
  PrintN("Total triangles : " + Str(CountList(ListTriangle())))
EndIf


;Génère un fichier contenant la liste des triangles
If CreateFile(0,Destination$)
  PrintN("Creation du fichier triangle : " + Destination$)
  ForEach ListTriangle()
    WriteData(0,@ListTriangle(),SizeOf(Triangle))
  Next
  CloseFile(0)
  PrintN("Operation terminee")
  PrintN("Pressez la touche [Entree] pour quitter")
EndIf
Input()
CloseConsole()
End
Dernière modification par comtois le mar. 14/févr./2006 18:21, modifié 1 fois.
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
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Tu penses qu'il serait possible de créer une lib pour les collisions ? ca arrangerait du monde :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

sûrement , j'attends que tailbite sorte.
mais bon c'est pas vraiment au point ma gestion , je vois plein de défauts ,et je ne sais pas comment les corriger :?
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.
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

comptois, si tu créais un "code générique", c'est à dire sans liste chaînées ou structures, juste une procédure à laquelle on envoie la liste de triangles et deux ou 3 trucs, et qui te renvoie deux ou 3 trucs, ben, là, je pourrais t'aider, mais le problème, c'est que j'ai trop de mal a comprendre ton code (c'est toujours plus dur de comprendre le code des autres :oops: )
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

purée j'ai pourtant mis des belles variables en français ! :P

Avec la v4 , Je vais sûrement tout réécrire pour supprimer toutes les variables globales et listes globales.et remplacer quelques procédures par des macros ? . et voir si dans certains calculs il ne serait pas plus judicieux d'utiliser les doubles ? dès que je trouve un peu de temps et du courage, je m'y colle.
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.
Répondre