Page 3 sur 5

Publié : ven. 03/juil./2009 13:15
par djes
CPLBator> Tes images sont super jolies; toi et TMyke faites vraiment des miracles!

Publié : ven. 03/juil./2009 14:02
par Ollivier
C'est clair les screenshoots déchirent! Je vais encore mettre dix ans avant de comprendre le code!

Publié : ven. 03/juil./2009 14:39
par Anonyme
Merci les gars , un dernier screen avant le release des sources :

ca commence vraiment à claqué ! :D
Image

Publié : ven. 03/juil./2009 14:57
par tmyke
Cpl.Bator a écrit :ca commence vraiment à claqué ! :D
C'est le moins que l'on puisse dire. Le screen ci-dessus, je vais le mettre dans la galerie du
site :D

Publié : ven. 03/juil./2009 16:11
par Progi1984
@Cpl Bator :
Regarde dans la discussion du post que je t'avais donné, ca donnait pas mal de pistes et de code de mémoire.

Publié : ven. 03/juil./2009 16:27
par Anonyme
@Progi1984 , ouais , je ne vais pas me casser la tête avec le format b3d
je vais en faire un que je maitriserais parfaitement.

Image

http://rapidshare.com/files/251479087/L ... 3.rar.html

Publié : ven. 03/juil./2009 16:56
par Anonyme
allez un dernier shoot avant de standardisé les commandes :

Image

Publié : ven. 03/juil./2009 17:28
par tmyke
Je viens de tester, très bon code. Environ 11 secondes de génération sur mon Q6600 à 2.40 GHz .
:D

Publié : ven. 03/juil./2009 19:16
par Anonyme
je n'arrive pas à copier un quelconque mesh sans utilisé iclonenode()

je veut parcourir les triangles d'un mesh quelquonque.
recuperer les coordonées spatiale et de texture,
mettre les coordonnées dans une nouvelle serie de vertex
sa réglerais mon problème d'index commun a plusieurs vertices
mais si je pars d'une sphere (icreatesphere()) , que je parcours ses triangles
que je les copie dans un mesh vide , j'ai des soucis avec les uv...
je dois cafouiller quelque part , mais ou ?

Publié : ven. 03/juil./2009 19:29
par tmyke
D'autant plus qu'au vue de ce que tu décris, les instructions permettant cela semblent bien exister.
As-tu un petit code pour illustrer ton soucis, pour aider ?

Publié : ven. 03/juil./2009 19:35
par Anonyme

Code : Tout sélectionner

Procedure.i lm_process_mesh(*node.IMesh)

  *copy = iCreateEmptyMesh()
  *buf  = iAddBufferMesh(*copy,1)
  
  
  
  *meshbuf.IMeshBuffer = iMeshGeometry(*node)


  num.l = iMeshBufferPolyCount.l(*meshbuf)
  Protected  v0.l, v1.l, v2.l
  Protected  vert_a.VECTOR3,vert_b.VECTOR3,vert_c.VECTOR3,normal.VECTOR3
  Protected uv_a.VECTOR2,uv_b.VECTOR2,uv_c.VECTOR2
 
        For i = 0 To num-1
          iMeshBufferFace(*meshbuf, i, @v0, @v1, @v2)

          ; récupère chaqu'un des 3 vertex,normal,uv
          iMeshBufferVertex(*meshbuf, @vert_a, v0)
          iMeshBufferVertex(*meshbuf, @vert_b, v1)
          iMeshBufferVertex(*meshbuf, @vert_c, v2)
          
          iMeshBufferTexCoord(*meshbuf,@uv_a,v0)
          iMeshBufferTexCoord(*meshbuf,@uv_b,v1)
          iMeshBufferTexCoord(*meshbuf,@uv_c,v2)
          
          ; On replace les vertice dans le mesh vide
          v1.l= iAddVertexMesh.l(*copy,  vert_a\x, vert_a\y,vert_a\z, $FFFFFFFF,uv_a\x,uv_a\y)
          v2.l= iAddVertexMesh.l(*copy,  vert_b\x, vert_b\y,vert_b\z, $FFFFFFFF,uv_b\x,uv_b\y)
          v3.l= iAddVertexMesh.l(*copy,  vert_c\x, vert_c\y,vert_c\z, $FFFFFFFF,uv_c\x,uv_c\y)
          iAddFaceMesh(*copy,  v1,v2,v3,0)
  
        Next 
  
  iFreeNode(*node)
  *node = *copy
  

ProcedureReturn *node
EndProcedure

Publié : ven. 03/juil./2009 20:21
par tmyke
Bon, il y a un petit bug, je corrige cela et je pond aussi une ou deux instruction facilitant
ce genre d'opération, et je poste cela au plus tard demain en fin de matiné

Image

Publié : sam. 04/juil./2009 9:19
par tmyke
Bon, si tu as mis à jour avec les liens fournis ici
http://www.purebasic.fr/french/viewtopi ... 569#100569

ce code devrait alors convenir:

Code : Tout sélectionner

Procedure.i lm_process_mesh(*node.IMesh)
  Protected  v0.l, v1.l, v2.l, v3.l
  Protected  vert_a.VECTOR3,vert_b.VECTOR3,vert_c.VECTOR3, normal.VECTOR3
  Protected  vert1.S3DVertex2TCoords,  vert2.S3DVertex2TCoords,  vert3.S3DVertex2TCoords
  Protected  Dim uv_a.f(3)
  Protected  Dim uv_b.f(3)
  Protected  Dim uv_c.f(3)

  *copy.IMMesh = iCreateEmptyMesh()
  iAddBufferMesh(*copy,1)
 

  *meshbuf.IMeshBuffer = iMeshGeometry(*node)

  num.l = iMeshBufferPolyCount.l(*meshbuf)

;   For i = 0 To num-1
;   
;       iMeshBufferFace(*meshbuf, i, @v0, @v1, @v2)
; 
;       ; récupère chaqu'un des 3 vertex,normal,uv
;       iMeshBufferVertex(*meshbuf, @vert_a\x, v0)
;       iMeshBufferVertex(*meshbuf, @vert_b\x, v1)
;       iMeshBufferVertex(*meshbuf, @vert_c\x, v2)
;          
;       iMeshBufferTexCoord(*meshbuf,@uv_a(0),v0)
;       iMeshBufferTexCoord(*meshbuf,@uv_b(0),v1)
;       iMeshBufferTexCoord(*meshbuf,@uv_c(0),v2)
;  
;        ; On replace les vertice dans le mesh vide
;       v1.l= iAddVertexMesh(*copy,  vert_a\x, vert_a\y,vert_a\z, $FFFFFFFF, uv_a(0), uv_a(1))
;       v2.l= iAddVertexMesh(*copy,  vert_b\x, vert_b\y,vert_b\z, $FFFFFFFF, uv_b(0), uv_b(1))
;       v3.l= iAddVertexMesh(*copy,  vert_c\x, vert_c\y,vert_c\z, $FFFFFFFF, uv_c(0), uv_c(1))
;       ; répercute les UV du layer 0 sur le layer 1
;       iTexCoord2MeshBuffer( iMeshGeometry(*copy) , uv_a(2), uv_a(3), v1)
;       iTexCoord2MeshBuffer( iMeshGeometry(*copy) , uv_b(2), uv_b(3), v2)
;       iTexCoord2MeshBuffer( iMeshGeometry(*copy) , uv_c(2), uv_c(3), v3)
;       
;       iAddFaceMesh(*copy,  v1,v2,v3, 0)
;  
;   Next
 
 ; << OU >>
 
 For i = 0 To num-1

      iMeshBufferFace(*meshbuf, i, @v0, @v1, @v2)

      iMeshBufferGetVertex(*meshbuf, @vert1, v0)
      iMeshBufferGetVertex(*meshbuf, @vert2, v1)
      iMeshBufferGetVertex(*meshbuf, @vert3, v2)

      v0=iAddCVertexMesh.l(*copy,  @vert1)
      v1=iAddCVertexMesh.l(*copy,  @vert2)
      v2=iAddCVertexMesh.l(*copy,  @vert3)
      
      iAddFaceMesh(*copy,  v0,v1,v2, 0)
  Next

 
   num_mat.l = iNodeNumMaterial.l(*node)
   For i = 0 To num_mat-1
      *src.IMaterial = iNodeMaterial(*node, i)
      *dest.IMaterial = iNodeMaterial(*copy, i)      
      iCopyMaterial( *src, *dest) 
   Next
 
 
  iFreeNode(*node)
  *node = *copy
  ProcedureReturn *node
EndProcedure

Publié : sam. 04/juil./2009 10:42
par Anonyme
Impec , je vais jeter un oeil. ;)

Publié : sam. 04/juil./2009 12:38
par Anonyme
Ca marche , par contre la bounding box n'est pas bonne , pour les grand objet , c'est pas top ^^ ils disparaisent si on ne regarde pas le centre
ta pas une fct° automatique ? :D