Page 5 sur 14

Publié : ven. 03/févr./2006 21:39
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é :)

Publié : ven. 03/févr./2006 21:55
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 ?

Publié : ven. 03/févr./2006 22:05
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 :)

Publié : ven. 03/févr./2006 22:27
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 !

Publié : ven. 03/févr./2006 22:31
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 :)

Publié : jeu. 09/févr./2006 15:40
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....

Publié : jeu. 09/févr./2006 17:31
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.

Publié : jeu. 09/févr./2006 18:42
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...

Publié : mar. 14/févr./2006 12:23
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 ?

Publié : mar. 14/févr./2006 18:01
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 :?

Publié : mar. 14/févr./2006 18:18
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

Publié : mar. 14/févr./2006 18:20
par Progi1984
Tu penses qu'il serait possible de créer une lib pour les collisions ? ca arrangerait du monde :)

Publié : mar. 14/févr./2006 18:23
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 :?

Publié : mar. 14/févr./2006 18:52
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: )

Publié : mar. 14/févr./2006 19:39
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.