LightMapping ( UV to XYZ )
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
@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.
Regarde dans la discussion du post que je t'avais donné, ca donnait pas mal de pistes et de code de mémoire.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
@Progi1984 , ouais , je ne vais pas me casser la tête avec le format b3d
je vais en faire un que je maitriserais parfaitement.

http://rapidshare.com/files/251479087/L ... 3.rar.html
je vais en faire un que je maitriserais parfaitement.

http://rapidshare.com/files/251479087/L ... 3.rar.html
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 ?
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 ?
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
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
Bon, si tu as mis à jour avec les liens fournis ici
http://www.purebasic.fr/french/viewtopi ... 569#100569
ce code devrait alors convenir:
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...