3DS FILE VIEWER 1.4.1 PRE- FINAL

Signaler
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
-
Messages postés
340
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
25 août 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29361-3ds-file-viewer-1-4-1-pre-final

Messages postés
340
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
25 août 2007

hum oui c'est en fait une "vielle" version du loader qui a bien evolué depuis mais non posté (on vas pas vous macher le boulot non plus ;op)

sinon la limite du nombre de triangles (faces) n'est pas comme tu le dit de 64000 triangles mais de 65535 (limite d'un integer en c) sachant qu'un integer vb a une valeur comprise entre -32767 et 32767 donc oui tu dis encore une connerie :p
sinon content que ce prog t'interesse
sinon voila la solution que tu cherche tant :

'Sous bloc d'EDIT_OBJET doit etre lu par l'edit_objet coordonnées xyz de chaque point
Case TRI_VERTEXL
Get #NumeroFichier, , TempInteger

nbrSolide = nbrSolide + 1
ReDim Preserve ObjetVertex(nbrSolide)
ObjetVertex(nbrSolide).name = tpn

If TempInteger > 0 Then
np = np + (TempInteger)
ObjetVertex(nbrSolide).nbrVertex = TempInteger
ReDim ObjetVertex(nbrSolide).tVertex(TempInteger - 1)
Get #NumeroFichier, , ObjetVertex(nbrSolide).tVertex
ObjetVertex(nbrSolide).Visible = True
Else
reste = 32768 + TempInteger
restel = 32768 + reste
np = np + (restel)
ObjetVertex(nbrSolide).nbrVertex = restel
ReDim ObjetVertex(nbrSolide).tVertex(restel - 1)
Get #NumeroFichier, , ObjetVertex(nbrSolide).tVertex
ObjetVertex(nbrSolide).Visible = True
End If

'***********************************************************************************************
Case TRI_FACEL1 '&H4120
'index des points des triangles + maillage du triangle AB,BC,AC 'Face de l'objet 3d.
Get #NumeroFichier, , TempInteger 'cube12 : 6 faces * 2 12 triangles

'bug here
If TempInteger > 0 Then
nbrVertex CLng(TempInteger) * 3 'nombre de triangles * 3 nombre de points
'' ObjetVertex(nbrSolide).nbmappingpoint = nbpoint

' ObjetVertex(nbrSolide).nbrVertex = nbrVertex

ObjetVertex(nbrSolide).nbrFace = TempInteger ' nombre de faces
nbfaces = nbfaces + TempInteger
ReDim ObjetVertex(nbrSolide).VertexFaceMaterialindex(CLng(TempInteger) - 1) 'face material index for texturing aka texture(i)
ReDim Preserve ObjetVertex(nbrSolide).VertexFace(CLng(TempInteger) - 1)

Get #NumeroFichier, , ObjetVertex(nbrSolide).VertexFace
Templong = fpos + 8 + 8 * CLng(TempInteger)

While Templong <> (fpos + tBloc.Longeur)
LireBloc Templong
Wend
Else
reste = 32768 + TempInteger
restel = 32768 + reste
nbrVertex CLng(restel) * 3 'nombre de triangles * 3 nombre de points

ObjetVertex(nbrSolide).nbrFace = restel ' nombre de faces
nbfaces = nbfaces + restel
ReDim ObjetVertex(nbrSolide).VertexFaceMaterialindex(restel - 1) 'face material index for texturing aka texture(i)
ReDim Preserve ObjetVertex(nbrSolide).VertexFace(restel - 1)

Get #NumeroFichier, , ObjetVertex(nbrSolide).VertexFace
Templong = fpos + 8 + 8 * restel

While Templong <> (fpos + tBloc.Longeur)
LireBloc Templong
Wend
End If
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
1
Re ...

Décidément vous allez dire celui là il commence à nous les ...

Bon je m'aperçoit que j'avais écrit une connerie la limite pour un fichier 3DS est de 64000 face . Il était donc normal d'avoir plus de 32000 faces donc le code était mauvais dès le départ et ma modif devrait être bonne pour tous les fichiers 3DS !

Bonne continuation
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
1
Putain .... Je suis trop fort

Bon finalement j'ai trouvé c'était tout con .. alors c'est pas dit que ca marche avec des fichiers 3DS ayant encore plus de triangles mais dans mon cas ca marche.

Remplacer le code qui merde par :

'index des points des triangles + maillage du triangle AB,BC,AC 'Face de l'objet 3d.
Case TRI_FACEL1 '&H4120 ' Get #NumeroFichier, , TempInteger 'cube12 : 6 faces * 2 12 triangles
Get #NumeroFichier, , TempByte
TempLong = TempByte
Get #NumeroFichier, , TempByte
TempLong = TempLong + CLng(TempByte) * 256
nbrVertex TempLong * 3 'nombre de triangles * 3 nombre de points
ObjetVertex(nbrSolide).nbmappingpoint = nbpoint
ObjetVertex(nbrSolide).nbrVertex = nbrVertex

Info " |---> Nombre de points trouvé : " & nbrVertex
ObjetVertex(nbrSolide).nbrFace = TempLong ' nombre de faces
Info " |---> Nombre de triangles trouvé : " & TempLong
nbfaces = nbfaces + TempLong
' ReDim ObjetVertex(nbrSolide).VertexFace(0)
ReDim ObjetVertex(nbrSolide).VertexFaceMaterialindex(TempLong - 1) 'face material index for texturing aka texture(i)
ReDim Preserve ObjetVertex(nbrSolide).VertexFace(TempLong - 1)

Get #NumeroFichier, , ObjetVertex(nbrSolide).VertexFace

If TempLong < 32767 Then
TempLong = fpos + 8 + 8 * TempLong
Else
TempLong = fpos + 8 + 9 * TempLong
End If


While TempLong <> (fpos + tBloc.Longeur)
LireBloc TempLong
Wend
Messages postés
345
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
21 mars 2008
1
Pardon

Petite précision :
Case TRI_FACEL1 '&H4120
Get #NumeroFichier, , TempByte
TempLong = TempByte
Get #NumeroFichier, , TempByte
TempLong = TempLong + CLng(TempByte) * 256

Bon ca marche .. j'ai bien le bon nombre de triangles mais la suite merde ...

Je pense que c'est au niveau ensuite de fpos :

TempLong = fpos + 8 + 8 * TempLong

Qui dans ce cas devrait être initialisé différement ? pas 8+8 mais 8+???
Afficher les 82 commentaires