Questions pour créer un loader B3D

Généralités sur la programmation 3D
Anonyme

Message par Anonyme »

je viens de regarder , meme le flingue déconne, met en WireFrame, tu verras.

Code : Tout sélectionner

      If ExamineMouse()
        MouseX = -MouseDeltaX()*2
        MouseY = -MouseDeltaY()*2
      EndIf
      
     CameraRenderMode(0,#PB_Camera_Wireframe)
      RotateCamera(0, MouseX*#PI/180, MouseY*#PI/180, RollZ)
      MoveCamera(0, KeyX, 0, KeyY)
J'ai mis ca aussi pour rendre la souris plus fluide.
Anonyme

Message par Anonyme »

je viens de verifier tes listes de triangles et de vertex


j'ai rajouté ca, je m'apercois alors que le dernier element , à tout à 0 pareil pour les vertices

Code : Tout sélectionner

  For i = 0 To NbEntity_Triangles-1
  Debug Triangles(i)\v0
  Debug Triangles(i)\v1
  Debug Triangles(i)\v2
  Next
    SetMeshData(0,#PB_Mesh_Vertex|#PB_Mesh_UVCoordinate,@Vertices(),NbEntity_Vertices)
  SetMeshData(0,#PB_Mesh_Face,@Triangles(),NbEntity_Triangles)
  ProcedureReturn CreateEntity(#PB_Any, MeshID(0),MaterialID(0))
EndProcedure

je suis passer en mode plot pour voir box2.b3d, si c'est deux Boite bien fermé, il manque un Vertex sur l'une d'elle, donc, le parsing est faux, et je comprends rien au format B3D :?
Donc, il y a une erreur lors de la lecture du fichier.
Anonyme

Message par Anonyme »

Peut on ouvrir les B3D avec 3DSMAX ?

car j'ai compter les vertices visible de box2 , y en a 15 , le debugger m'en donne 36 :s

j'ai regarder plus en profondeur le code, c'est le bordel les chunk norris :D
Ta un lien avec des infos sur le B3D ? j'en ai trouvé un , mais c'est quasi le meme code que le tiens et en English en plus :?
Si tu as des infos sur le header, je suis preneur. :D

@++
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pour 3DSMax, je ne connais que l'exporter : http://www.onigirl.com/pipeline/

Pour la doc :
- Specs : http://www.blitzbasic.com/sdkspecs/sdks ... _specs.txt
- La page dédié : http://www.blitzbasic.com/sdkspecs/sdkspecs.php

Sinon un HackerB3D (fonctionne par drag and drop du fichier):
B3d.Hacker.exe
Image

Et un Viewer B3D (lancer puis ouvrir en bas à gauche):
B3D.Viewer.exe
Image

Sinon je regarde pour ce que tu m'as dit !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

J'ai mis à jour le loader pour le problème que tu as trouvé ( http://purebasic.hmt-forum.com/viewtopi ... 6267#56267 ).

Sinon va voir le premier post du topic car j'ai séparé les B3D du loader, afin d'améliorer la vitesse du DL !

[EDIT 1200] MAJ du loader : Fonctionne parfaitement avec les UN MESH - UN ou PL TEXS... mais bugge avec n'importe quel PL MESH - PL TEXS.

Redl le package de B3DSamples (1er post du topic) et le loader !
Anonyme

Message par Anonyme »

Je vais regarder dans le courant de la journée.
A mon avis, tu dois refaire completement la procédure de chargement.
Car la, tout est imbriqué, ce qui ne rend pas facile le chargement et la compréhension.

Voici théoriquement coment je ferais :

Lecture du B3D

-Comptage des Meshs
-Comptage des Triangles & faces par mesh
-Comptage des Textures

pour le premier mesh :

Chargement des vertices
" " des uvw
" " des liste de triangles

pour le second mesh (si il y a)

idem

Fermeture du B3D.


je vais regarder le "header", si j'ai le temps, j'en fait un :D

@++
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

A mon avis, la procédure de chargement est correcte car tiré du site de blitzbasic...

PS : il peut y avoir plusieurs meshs (1-2-3-etc...) et à chaque fois l'organisation peut etre différente. regarde avec B3D Hacker.
Anonyme

Message par Anonyme »

oui j'ai vu que ton code est tiré du site de blitz, j'ai commencer a faire à ma facon, dès que j'ai des resultat, je te tiens au courant.
Nickel le p'tit logiciel pour regarder au fin fond d'un B3D :D

@++
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Il ya un hacker et un viewer :)
Anonyme

Message par Anonyme »

oui , je l'ai déjà téléchager dans ton pack de 8mo (1°post) :P
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Oki, sinon ca avance ?
Anonyme

Message par Anonyme »

oui , tranquilou , j'ai fini les tags faculatifs de l'entete , j'attaques les vertices.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bon travail @demain
Anonyme

Message par Anonyme »

Bon , j'ai trouvé ton problème.
ton chargeur de fichier B3D est fonctionnel qu'avec de simple objet, pas d'objet complexe. car il suit un "squelette" linéaire :

- Chargement des textures
- des brush
- d'une serie de nodes ( le problème est là)
- charge tout les vertex/uv/normale

En fait , un Node peut pointer soit sur un MESH ou un BONE , qui eux meme peuvent repointer sur d'autre NODE etc...
je n'ai pas cerner le véritable coupable de l'erreur, mais je pense que c'est un problème de pointeur de fichier.
un un simple mesh , ca marche, mais avec des meshs tout les vertices ne sont pas chargé. d'ou l'erreur sur Box2.B3D ou meme le flingue.B3D
en suivant le sdk, ca me mene à la meme erreur que toi avec un code différent.
Compare avec le B3D viewer.
en tout cas c'est un format casse cou... :D
j'vais trouvé une soluce.
Anonyme

Message par Anonyme »

J'ai trouvé ! oublie le code blitz :D


C'est très simple, déjà il y a une erreur de comptage de vertices
la manip avec la variable sz est bizarre, le problème venais en partit de là.

Voici du pseudo code :


Code : Tout sélectionner

BB3D
ChunkSize  <- Sert a rien :s
VERSION

While EOF(0)=0

   Lecture TAG

      Si TAG = MESH

         SubChunkSize = ReadLong(0)
         BrushID          = ReadLong(0)
         SUB_TAG.s      = READ_TAG()

              SI SUB_TAG = VRTS
             
                       SubChunkSize = ReadLong(0)
                       flags   = ReadLong(0) 
                       tc_sets = ReadLong(0)
                       tc_size = ReadLong(0)
   
                       TOTAL VERTEX = SubChunkSize / 40
                      
                       For i = 0 to TOTAL VERTEX -1
                       
                       Lecture des vertex
                  
                       next i



              FINSI
              

      FinSi 


wend


En fait , tu as plusieurs posibilité de rangement
une linéraire (ta facon)
une avec des nodes
une autres avec des mesh sans node


donc lorsque tu rencontre un tag "NODE"
tu lis le node normalement sans oublier de relire le tag suivant
qui peut etre "MESH"
une fois MESH lu, tu relis le tag suivant, qui peut etre "VRTS" ou "TRIS"
et tu fait en fonction

je vais faire un code potable, et je te le file.

@++
Répondre