Voila un p'tit code qui sert a importer le type de format *.OBJ, le format de Wavefront, le rendu se fait en opengl est n'est pas optimisé a fond, mais permet au neophyte (sous la condition de la curiosité) d'apprendre quelques petites bases OpenGL. Le code d'importation est tres petit comme vous pourrais le voir. Utilisation : Pour faire tourner plus ou moins vite l'objet : fleche gauche ou droite, pour s'approcher ou s'éloigner du centre: fleche haut et bas, zoom paramétrable, 3D plein, 3D Fil de fer, activer/desactier la grille et la rotation automatique. Pour apprécier le rendu, j'ai intégré une petite lumiére symbolisée par la boule, vous pouvez paramétrer dans le code DrawGL cette lumiére. 1 fichier OBJ est fournis : Foot.OBJ. Vous pouvez retrouver l'esemble des formats que j'ai importé dans le code "3D Import : Tout : *.ASC, *.ASE, *.OBJ, *.OFF, *.RAW.
Source / Exemple :
Private Type CoordV
X As Integer
Y As Integer
Z As Integer
End Type
Private Type FaceV
FChar As Variant
A As Integer
B As Integer
C As Integer
End Type
Private Type OBJObjetV
NmbVertex As Integer
NmbFace As Integer
Vertex() As CoordV
Face() As FaceV
End Type
Global OBJObjet As OBJObjetV
Sub GetVertex()
U = Split(F, vbCrLf)
T = 50
For I = 0 To UBound(U) - 1
With OBJObjet
V = Split(U(I), " ")
Select Case V(0)
Case "v":
.NmbVertex = .NmbVertex + 1
ReDim Preserve .Vertex(.NmbVertex)
With .Vertex(.NmbVertex)
.X = Val(V(1)) * T: .Y = Val(V(2)) * T: .Z = Val(V(3)) * T
End With
Case "f":
.NmbFace = .NmbFace + 1
ReDim Preserve .Face(.NmbFace)
With .Face(.NmbFace)
A = Split(V(1), "/"): B = Split(V(2), "/"): C = Split(V(3), "/")
.A = Val(A(0)): .B = Val(B(0)): .C = Val(C(0))
End With
End Select
End With
Next
End Sub
Sub LoadOBJ(Fichier As String)
'Loading "CHARGEMENT DE " & Fichier
Open Fichier For Input As 1
F = CStr(Input$(LOF(1), #1))
Close
'Loading "VERTICES-FACES"
GetVertex
'Loading "FIN", False
End Sub
Conclusion :
Vous pouvez remarquer la taille ridicule du code!!! Tout est dans le zip!