3d import : *.obj

Description

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!

Codes Sources

A voir également