IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

OpenGL 1.5 VBO Problème drawelements


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Par défaut OpenGL 1.5 VBO Problème drawelements
    Bonjours,

    Je suis nouveau sur ce forum et j'ai un problème "étrange". Disons que j'ai fais un chargeur de fichier .OBJ sur VB6 grâce au Tuto Arkham46. Pour nommer et pourvoir modifier les différents objet, j'ai créer un Buffer par objet. Ce qui est étrange, c'est que mon programme tourne pendant 20 secondes, puis VB bloque et impossible de le relancer pendant 1 heure (même en redémarrant le pc). C'est à dire le problème est intermittent.
    En avançant dans mon code en pas-à-pas j'ai pue voir qu'il plantait au moment du glDrawElements. Avez vous déjà eu ce problème, on dirait qu'il y a une mémoire qui ce remplie.

    Pour charger mes buffers, j'utilise ce code en le bouclant pour chaque matériaux du .obj:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    Public Sub cube() ' Crée la liste pour le cube
    ReDim vertexarray(9 * vertex(obj, 0) - 1) As Single '3coordonnées*nbface*3vertex
    ReDim ColorArray(9 * vertex(obj, 0) - 1) As Single
    ReDim NormalArray(9 * vertex(obj, 0) - 1) As Single
    ReDim TexCoordArray(9 * vertex(obj, 0) - 1) As Single
    ReDim indicearray(1 To 3 * vertex(obj, 0)) As Long
    ReDim CubeArray(1 To 36 * vertex(obj, 0)) As Single
    Dim i As Integer
    Dim j As Integer
    Dim k As Byte
     
     
     
    For i = 0 To 6 * vertex(obj, 0) - 1
      DoEvents
      vertexarray(i) = vertex(obj, i + 4)
      NormalArray(i) = normale(obj, i + 4)
      TexCoordArray(i) = texture(obj, i + 4)
      ColorArray(i) = 1
      If selected = vertex(obj, 1) Then
        For j = 1 To 6 * vertex(obj, 0) - 1
          ColorArray(j - 1) = 1
          ColorArray(j) = 0.4
          ColorArray(j + 1) = 0.8
          j = j + 2
        Next
      End If
    Next i
     
    j = 0
    For i = 1 To 36 * vertex(obj, 0)
      For k = 0 To 2
        CubeArray(i + k) = vertexarray(j)
        j = j + 1
      Next k
      i = i + 11
    Next i
    j = 0
    For i = 4 To 36 * vertex(obj, 0)
      For k = 0 To 2
        CubeArray(i + k) = NormalArray(j)
        j = j + 1
      Next k
      i = i + 11
    Next i
    j = 0
    For i = 7 To 36 * vertex(obj, 0)
      For k = 0 To 2
        CubeArray(i + k) = TexCoordArray(j)
        j = j + 1
      Next k
      i = i + 11
    Next i
    j = 0
    For i = 10 To 36 * vertex(obj, 0)
      For k = 0 To 2
        CubeArray(i + k) = ColorArray(j)
        j = j + 1
      Next k
      i = i + 11
    Next i
    Open App.Path & "\cubearray.txt" For Output As #1
    For i = 1 To 36 * vertex(obj, 0)
      Print #1, CubeArray(i);
    Next i
    Close #1
     
    For i = 1 To 3 * vertex(obj, 0)
      indicearray(i) = indice(obj, i) - 1
    Next i
    Open App.Path & "\indicearray.txt" For Output As #1
    For i = 1 To 3 * vertex(obj, 0)
      Print #1, indicearray(i);
    Next i
    Close #1
     
     
     
    ' Données de vertex
    glBindBuffer GL_ARRAY_BUFFER, CubeBuffers(2 * obj + 1)
    glBufferData GL_ARRAY_BUFFER, UBound(CubeArray) * Len(CubeArray(1)), VarPtr(CubeArray(1)), GL_STREAM_DRAW
    glBindBuffer GL_ARRAY_BUFFER, 0&
     
    ' Données d'indices
    glBindBuffer GL_ELEMENT_ARRAY_BUFFER, CubeBuffers(2 * obj + 2)
    glBufferData GL_ELEMENT_ARRAY_BUFFER, UBound(indicearray) * Len(indicearray(1)), VarPtr(indicearray(1)), GL_STATIC_DRAW
    glBindBuffer GL_ELEMENT_ARRAY_BUFFER, 0&
    Pour l'affichage je boucle dans une boucle do-loop avec un DoEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
      Do
        DoEvents
        'Render Views...
        glView1_Paint
      Loop Until Done = True
     
     
    Private Sub glView1_Paint()
      wglMakeCurrent hDC1, hglRC1
      Render
    End Sub
     
    ' Rendu de la scène
    Public Sub Render()
    ' Passage en matrice de modélisation-visualisation
    glMatrixMode GL_MODELVIEW
    ' Initialisation de la matrice
    glLoadIdentity
    ' Position de la caméra
    gluLookAt 0, 0, gZoom, 0, 0, 0, 0, 10, 0
    glRotated gRotateX, 1, 0, 0
    glRotated gRotateY, 0, 1, 0
    ' Vide les buffers couleur et profondeur
    glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
    ' Sauvegarde la matrice
    glPushMatrix
    For obj = 0 To UBound(vertex, 1) - 1
        ' Affecte la texture
        glBindTexture GL_TEXTURE_2D, gTexture(obj)
        ' Filtrage de la texture
        glTexParameterf GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
        glTexParameterf GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR
        glEnableClientState GL_VERTEX_ARRAY
        glEnableClientState GL_COLOR_ARRAY
        glEnableClientState GL_NORMAL_ARRAY
        glEnableClientState GL_TEXTURE_COORD_ARRAY
     
          ' Position des données à utiliser
          glBindBuffer GL_ARRAY_BUFFER, CubeBuffers(2 * obj + 1)
          glVertexPointer 3, GL_FLOAT, 48, ByVal 0&
          glNormalPointer GL_FLOAT, 48, ByVal 12&
          glTexCoordPointer 3, GL_FLOAT, 48, ByVal 24&
          glColorPointer 3, GL_FLOAT, 48, ByVal 36&
     
          ' Utilisation des indices
          glBindBuffer GL_ELEMENT_ARRAY_BUFFER, CubeBuffers(2 * obj + 2)
          glPushMatrix
          glPushName vertex(obj, 1)
          glDrawElements GL_TRIANGLES, 3 * vertex(obj, 0), GL_UNSIGNED_INT, ByVal 0&
          glPopName
          glPopMatrix
          glDisableClientState GL_VERTEX_ARRAY
          glDisableClientState GL_COLOR_ARRAY
          glDisableClientState GL_NORMAL_ARRAY
          glDisableClientState GL_TEXTURE_COORD_ARRAY
          ' Désactive les buffers
          glBindBuffer GL_ARRAY_BUFFER, 0&
          glBindBuffer GL_ELEMENT_ARRAY_BUFFER, 0&
          ' N'affecte aucune texture
          glBindTexture GL_TEXTURE_2D, 0
    Next
    ' N'affecte aucune texture
    glBindTexture GL_TEXTURE_2D, 0
    ' Restaure la matrice
    glPopMatrix
    glPopName
    'Echange les bufffer
    If mode = GL_RENDER Then SwapBuffers hDC1
    End Sub
    Merci de m'aider, j'ai peut-être mis beaucoup. Je suis surement pas très clair mais je vais essayer d'envoyer le code complet avec tous les modules dans la pièce jointe.
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Octobre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé de référencement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 2
    Par défaut
    Mon problème vient de VB, en le compilant le programme fonctionne !

Discussions similaires

  1. Problème VBO openGl
    Par Lintel-oo dans le forum OpenGL
    Réponses: 6
    Dernier message: 25/01/2012, 23h25
  2. [VBO] Problème d'affichage de texture
    Par Lung dans le forum OpenGL
    Réponses: 2
    Dernier message: 22/04/2009, 08h16
  3. OpenGl VBO : problème de coordonnées de texturage
    Par Heero Yui dans le forum OpenGL
    Réponses: 1
    Dernier message: 22/03/2009, 10h33
  4. Performances OpenGL, Vertex Array, (VBO ?)
    Par Burckel dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/03/2007, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo