Voila un p'tit code qui sert a importer le type de format *.ASC, le format ascii simple de 3D Studio Max, 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. Il y'a un petit defaut pour l'importation ASC, mais il sera réglé tres prochainement! 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. 2 fichiers ASC sont fournis : Camera.Asc, Testcol.Asc. Vous pouvez retrouver l'esemble des formats que j'ai importé dans le code "3D Import : Tout : *.ASC, *.ASE, *.OBJ, *.OFF, *.RAW.
Source / Exemple :
Global NmbAscObjet As Integer
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 ASCObjetV
Nom As String
Ochar As Integer
NmbVertex As Integer
NmbFace As Integer
Vertex() As CoordV
Face() As FaceV
End Type
Global ASCObjet() As ASCObjetV
Private Sub GetObj()
U = Split(F, "Named object: ")
NmbAscObjet = UBound(U)
ReDim Preserve ASCObjet(NmbAscObjet)
For I = 1 To UBound(U)
J = InStr(1, F, U(I))
K = InStr(2, U(I), vbCrLf)
T = 0
If I = 0 Then T = 1
ASCObjet(I).Ochar = J + T
ASCObjet(I).Nom = Mid(U(I), 2 + T, K - T1 - 3)
Next
End Sub
Private Sub GetVertex()
T = 4
For I = 1 To NmbAscObjet
With ASCObjet(I)
If NmbAscObjet <= 1 Or I = NmbAscObjet Then
Fin = Len(F)
Else
Fin = ASCObjet(I + 1).Ochar - .Ochar
End If
S = Mid(F, .Ochar, Fin)
V = Split(S, vbCrLf)
For J = 0 To UBound(V) - 1
If V(J) = "" Then GoTo Suite
W = Split(V(J), " ")
Select Case W(0)
Case "Vertex"
If Left(W(1), 4) = "list" Then GoTo Suite
.NmbVertex = .NmbVertex + 1
ReDim Preserve .Vertex(.NmbVertex)
With .Vertex(.NmbVertex)
If Len(W(3)) > 15 Then
X = Split(W(3), vbTab)
.X = Val(Right(X(0), Len(X(0)) - 2)) * T
.Y = Val(Right(X(1), Len(X(0)) - 2)) * T
.Z = -Val(Right(X(2), Len(X(0)) - 2)) * T
Else
.X = Val(Right(W(3), Len(W(3)) - 2)) * T
.Y = Val(Right(W(8), Len(W(8)) - 2)) * T
.Z = -Val(Right(W(13), Len(W(13)) - 2)) * T
End If
End With
Case "Face"
'Stop
If Left(W(1), 4) = "list" Then GoTo Suite
.NmbFace = .NmbFace + 1
ReDim Preserve .Face(.NmbFace)
With .Face(.NmbFace)
M = 0
If Left(W(5), 2) = "A:" Then M = 3
.A = Val(Right(W(2 + M), Len(W(2 + M)) - 2))
.B = Val(Right(W(3 + M), Len(W(3 + M)) - 2))
.C = Val(Right(W(4 + M), Len(W(4 + M)) - 2))
End With
Case "Material"
Case "Smoothing"
End Select
Suite:
Next
End With
Next
End Sub
Sub LoadASC(Fichier As String)
'Loading "CHARGEMENT DE " & Fichier
Open Fichier For Input As 1
F = CStr(Input$(LOF(1), #1))
Close
'Loading "OBJET"
GetObj
'Loading "VERTICES"
GetVertex
Loading "FIN", False
End Sub
Conclusion :
Voila le code du module d'importation! Autrement tout est dans le zip
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.