LightMapping ( UV to XYZ )

Généralités sur la programmation 3D
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

CPLBator> Tes images sont super jolies; toi et TMyke faites vraiment des miracles!
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

C'est clair les screenshoots déchirent! Je vais encore mettre dix ans avant de comprendre le code!
Anonyme

Message par Anonyme »

Merci les gars , un dernier screen avant le release des sources :

ca commence vraiment à claqué ! :D
Image
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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.
Anonyme

Message 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
Anonyme

Message par Anonyme »

allez un dernier shoot avant de standardisé les commandes :

Image
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Je viens de tester, très bon code. Environ 11 secondes de génération sur mon Q6600 à 2.40 GHz .
:D
Force et sagesse...
Anonyme

Message 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 ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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 ?
Force et sagesse...
Anonyme

Message 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
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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
Force et sagesse...
Anonyme

Message par Anonyme »

Impec , je vais jeter un oeil. ;)
Anonyme

Message 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
Répondre