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

OpenGL Discussion :

[VBO] Problème d'affichage de texture


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [VBO] Problème d'affichage de texture
    Je suis toujours en train d'essayer de faire fonctionner les VBO.

    J'ai enfin trouvé ce qui me manquait pour utiliser les textures, mais j'obtiens un rendu bizarre :


    Je ne vois que l'intérieur du cube (je ne sais pas si c'est visible sur l'image).
    Quand je tourne autour du cube, je ne vois que les faces internes.



    Voici le code concernant le cube :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          _glVertexPointer: procedure(size: GLint; _type: GLenum; stride: GLsizei; const _pointer: GLvoid);   stdcall;
          _glColorPointer: procedure(size: GLint; _type: GLenum; stride: GLsizei; const _pointer: GLvoid);   stdcall;
          _glTexCoordPointer: procedure(size: GLint; _type: GLenum; stride: GLsizei; const _pointer: GLvoid);   stdcall;
          _glEnableClientState: procedure(_array: GLenum);   stdcall;
          _glDrawElements: procedure(mode: GLenum; count: GLsizei; _type: GLenum; const indices: GLvoid);   stdcall;
          _glDisableClientState: procedure(_array: GLenum);   stdcall;
     CubeArray: Array[0..47] of GLfloat;
     IndiceArray: Array[0..35] of GLuint;
     CubeBuffers: Array[0..1] of GLuint;
    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
    ...
     
       _nHDLLGL := LoadLibrary(PChar('OpenGL32.dll'));
       if _nHInstDLL = 0 then
          MainForm.AddLog('[' + FormatDateTime('dd/mm/yyyy hh:nn:ss:zzz', Now) + ']  Erreur :  le chargement de la DLL (OpenGL32.dll) a échoué !' + #13#10 + SysErrorMessage(GetLastError))
       else
       begin
          //.Récupération des adresses des fonctions.
          _glVertexPointer := GetProcAddress(_nHDLLGL, 'glVertexPointer');
          _glColorPointer := GetProcAddress(_nHDLLGL, 'glColorPointer');
          _glTexCoordPointer := GetProcAddress(_nHDLLGL, 'glTexCoordPointer');
          _glEnableClientState := GetProcAddress(_nHDLLGL, 'glEnableClientState');
          _glDrawElements := GetProcAddress(_nHDLLGL, 'glDrawElements');
          _glDisableClientState := GetProcAddress(_nHDLLGL, 'glDisableClientState');
       end;
     
    ...
     
       glGenBuffers(2, @CubeBuffers);
     
       glBindBuffer(GL_ARRAY_BUFFER, CubeBuffers[0]);
       glBufferData(GL_ARRAY_BUFFER, SizeOf(CubeArray), @CubeArray, GL_STATIC_DRAW);
       glBindBuffer(GL_ARRAY_BUFFER, 0);
     
       glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, CubeBuffers[1]);
       glBufferData(GL_ELEMENT_ARRAY_BUFFER, SizeOf(IndiceArray), @IndiceArray, GL_STATIC_DRAW);
       glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    end;
     
    procedure TFormGL.AffVBO;
    const
       GL_VERTEX_ARRAY = $8074;
       GL_NORMAL_ARRAY = $8075;
       GL_COLOR_ARRAY = $8076;
       GL_TEXTURE_COORD_ARRAY = $8078;
    begin
       glPushMatrix;
          glBindTexture(GL_TEXTURE_2D, TEXTURE_MUR_PIERRE_1);
     
          // Utilisation des données des buffers
          glBindBuffer(GL_ARRAY_BUFFER, CubeBuffers[0]);
          _glVertexPointer(3, GL_FLOAT, 6 * SizeOf(GLfloat), Pointer(3 * SizeOf(GLfloat)));
          _glColorPointer(3, GL_FLOAT, 6 * SizeOf(GLfloat), Pointer(0));
          _glTexCoordPointer(3, GL_FLOAT, 6 * SizeOf(GLfloat), Pointer(3 * SizeOf(GLfloat)));
     
          glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, CubeBuffers[1]);
     
          _glEnableClientState(GL_VERTEX_ARRAY);
          _glEnableClientState(GL_COLOR_ARRAY);
          _glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
          // Rendu de notre géométrie
          _glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, nil);
     
          _glDisableClientState(GL_TEXTURE_COORD_ARRAY);
          _glDisableClientState(GL_COLOR_ARRAY);
          _glDisableClientState(GL_VERTEX_ARRAY);
       glPopMatrix;
    end;
    Une idée ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    La première idée qui m'est venu, c'est que t'es normal ( pour les faces ) sont à l'envers ( dans le mauvais sens ).
    Le sens des normales est souvent déterminer par l'ordre des vertex ( sens des aiguilles d'une montre ou pas ).
    Si tu veux vérifier la théorie rapidement, tu peux demander à OpenGL de désactiver le backface culling ( technique qui optimise la scene en affichant que les faces que l'on voit normalement ). Je crois qu'il est activer par défault.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    La première idée qui m'est venu, c'est que t'es normal ( pour les faces ) sont à l'envers ( dans le mauvais sens ).
    Le sens des normales est souvent déterminer par l'ordre des vertex ( sens des aiguilles d'une montre ou pas ).
    Bien vu.

    J'ai modifié glFrontFace(GL_CW); en glFrontFace(GL_CCW); et ça marche mieux.



    Citation Envoyé par LittleWhite Voir le message
    Si tu veux vérifier la théorie rapidement, tu peux demander à OpenGL de désactiver le backface culling ( technique qui optimise la scene en affichant que les faces que l'on voit normalement ). Je crois qu'il est activer par défault.
    Par contre, j'ai laisée les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#][Monogame] Problème d'affichage de textures
    Par Alterans dans le forum XNA/Monogame
    Réponses: 2
    Dernier message: 21/05/2015, 11h46
  2. Problème d'affichage de texture.
    Par kokarez dans le forum DirectX
    Réponses: 2
    Dernier message: 08/12/2009, 09h57
  3. Problème affichage de texture.
    Par laflak dans le forum OpenGL
    Réponses: 6
    Dernier message: 29/12/2008, 12h16
  4. Problème d'affichage d'une texture
    Par BruceBoc dans le forum OpenGL
    Réponses: 24
    Dernier message: 25/01/2007, 16h42
  5. [OpenSceneGraph] Problème affichage de texture
    Par PP(Team) dans le forum OpenSceneGraph
    Réponses: 3
    Dernier message: 23/01/2007, 16h35

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