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 :

Texture delphi


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut Texture delphi
    Salut,
    Je debute sous openGl et sous delphi, mais je pense avoir compris le principe general des deux.
    J'ai déja fait des pg pour débuter qui m'affichent des formes (triangle, carré) avec des couleurs ou des dégradé, et j'aimerais passé aux textures à partir d'une image.
    J'ai fait un bout de code mais je ne vois rien et je ne sais pas d'ou ca peut venir.

    Si quelqu'un a le courage d'y regarder, je le remercie d'avance.


    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
     
    var
      Form1: TForm1;
      Tex:GLuint;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
        PixelFormat    :TPixelFormatDescriptor;
        cPixelFormat   :Integer;
        DoubleBuffer   :Boolean;
    begin
         DoubleBuffer := false;
         FillChar( PixelFormat, SizeOf(PixelFormat), 0 );
         With PixelFormat Do
         Begin
              nSize      := Sizeof(TPixelFormatDescriptor);
              If DoubleBuffer Then
                 dwFlags    := PFD_DOUBLEBUFFER or PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL
              Else
                  dwFlags    := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL;
              iLayerType := PFD_MAIN_PLANE;
              iPixelType := PFD_TYPE_RGBA;
              nVersion   := 1;
              cColorBits := 16;
              CdepthBits := 16;
         End;
         glClearColor( 0.0, 0.0, 0.0, 0.0 );
         Loadtexture(ExtractFilePath(ParamStr(0))+'texture.bmp',Tex);
    end;
    Loadtexture(ExtractFilePath(ParamStr(0))+'texture.bmp',Tex);
    fait parti d'un autre fichier que j'ai inclus.
    Je détaillerai cette fonction plus bas.
    ensuite vient l'évenement FormPaint qui permet d'afficher mon carré.
    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
     
    procedure TForm1.FormPaint(Sender: TObject);
    begin
     
    Glclear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    glClearColor( 0.0, 0.0, 0.0, 0.0 );
     
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity;
     
    gluLookAt( 0.0 , 0.0 , 20.0,
               0.0 , 0.0 , 0.0,
               0.0 , 1.0 , 0.0 );
     
    glPushMatrix();
    glBindTexture( GL_TEXTURE_2D, Tex );
     
    glBegin( GL_QUADS );
    glNormal3f( 0.0, 0.0, 1.0 );
    glTexCoord2f( 01, 01 );glVertex3f( -2.0, 2.0, 0.0 );
    glTexCoord2f( 01, 0 );glVertex3f( -2.0,-2.0, 0.0 );
    glTexCoord2f( 0, 0 );glVertex3f(  2.0,-2.0, 0.0 );
    glTexCoord2f( 0, 01 );glVertex3f(  2.0, 2.0, 0.0 );
    glEnd();
    glPopMatrix();
    glFlush;
    SwapBuffers( Canvas.Handle );
     
    end;
    et enfin, l'évenement resize "basique"
    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
     
    procedure TForm1.FormResize(Sender: TObject);
    begin
         {Empêcher les division par ZERO}
         If ClientHeight = 0 Then
            ClientHeight := 1;
     
         {Spécification de l'espace disponible sur le contrôle fenêtré.}
         glViewport( 0, 0, ClientWidth, ClientHeight );
         {Rendre la matrice de project active pour définir un nouveau champs de
          vision}
         glMatrixMode( GL_PROJECTION );
         glLoadIdentity();
     
         {Création d'une nouvelle matrice de projection.}
         gluPerspective( 45, ClientWidth / ClientHeight, 0.1, 500.0 );
     
         {Rafraîchir le contenu de la fenêtre}
         Form1.Invalidate;
    end;
     
    end.
    Comme promis, la fonction LoadTexture, mais je ne pense pas que le probleme vienne de là.
    A dire vrai, cette partie de code n'est pas de moi.
    SwapRGB permet de passer du format RGB au format GBR
    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
     
    function LoadTexture(Filename: String; var Texture : GLuint) : Boolean;
    var
      FileHeader: BITMAPFILEHEADER;
      InfoHeader: BITMAPINFOHEADER;
      Palette: array of RGBQUAD;
      BitmapFile: THandle;
      BitmapLength: LongWord;
      PaletteLength: LongWord;
      ReadBytes: LongWord;
      Width, Height : Integer;
      pData : Pointer;
    begin
      result :=FALSE;
        BitmapFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
        if (BitmapFile = INVALID_HANDLE_VALUE) then begin
          MessageBox(0, PChar('Error opening ' + Filename), PChar('BMP Unit'), MB_OK);
          Exit;
        end;
     
        ReadFile(BitmapFile, FileHeader, SizeOf(FileHeader), ReadBytes, nil);
        ReadFile(BitmapFile, InfoHeader, SizeOf(InfoHeader), ReadBytes, nil);
     
        PaletteLength := InfoHeader.biClrUsed;
        SetLength(Palette, PaletteLength);
        ReadFile(BitmapFile, Palette, PaletteLength, ReadBytes, nil);
        if (ReadBytes <> PaletteLength) then begin
          MessageBox(0, PChar('Error reading palette'), PChar('BMP Unit'), MB_OK);
          Exit;
        end;
     
        Width  := InfoHeader.biWidth;
        Height := InfoHeader.biHeight;
        BitmapLength := InfoHeader.biSizeImage;
        if BitmapLength = 0 then
        BitmapLength := Width * Height * InfoHeader.biBitCount Div 8;
     
        GetMem(pData, BitmapLength);
        ReadFile(BitmapFile, pData^, BitmapLength, ReadBytes, nil);
        if (ReadBytes <> BitmapLength) then begin
          MessageBox(0, PChar('Error reading bitmap data'), PChar('BMP Unit'), MB_OK);
          Exit;
        end;
        CloseHandle(BitmapFile);
     
      SwapRGB(pData, Width*Height);
     
      Texture :=CreateTexture(Width, Height, GL_RGB, pData);
      FreeMem(pData);
      result :=TRUE;
    end;
    Celui qui trouve, je lui fait un bisou... c'est promis

  2. #2
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    si tu met en commentaire ta ligne
    glBindTexture( GL_TEXTURE_2D, Tex );
    tu vois quelque chose ?

    si tu ne vois rien, ton problème ne se situe pas au niveau texture

    peut-etre au niveau éclairage ?
    tu déclares une normale mais pas de lumière
    auquel cas essayes de mettre ta normale en commentaire pour voir

    SwapRGB permet de passer du format RGB au format GBR
    Faudra qu'on m'explique un jour pour quoi tout le monde se casse la tete à faire des conversions de format
    ps: c'est pas plutot RGB vers BGR ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    bon ben mon probleme ne vient pas de la texture alors... je vais essayer l'éclairage.


    ps: j'aime bien ta signature, mais comme ca je la trouve plus drole:
    La programmation, c'est le pouvoir de faire ce qu'on veux; la difficulté, c'est de savoir ce qu'on veux

  4. #4
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    vu que tu ne déclares qu'une normale, as tu essayé de mettre la ligne
    glNormal3f( 0.0, 0.0, 1.0 );
    en commentaire pour voir ce que ça donne ?

    merci pour la signature
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    nan toujours rien

  6. #6
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    au fait...
    le reste du code te semble t-il clair, ou y a t-il de grosses erreurs de débutant que je suis??

  7. #7
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    ton quad n'a pas de couleur, il est peut-etre noir ?

    si tu remplaces la normale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glNormal3f( 0.0, 0.0, 1.0 );
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glColor3f( 1.0, 1.0, 1.0 );
    ça donne quoi ?

    sinon le reste du code me semble clair

    [edit] je pense avoir trouvé d'où vient ton problème : ton quad est en Z = 0
    ajoutes
    avant le glBegin pour qu'il soit devant toi
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  8. #8
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    ben ecoute...heu il ne se passe toujours rien.

  9. #9
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    je t'avoue que là je sèche

    essayes éventuellement de désactiver le culling avec
    glDisable(GL_CULL_FACE);
    au cas où ton quad te tournerait le dos

    sinon, reprends un des tes bout de code qui fonctionne où tu affiches un quad ou un cube et essayes d'y ajouter la texture
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  10. #10
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par shenron666
    [edit] je pense avoir trouvé d'où vient ton problème : ton quad est en Z = 0
    ajoutes
    avant le glBegin pour qu'il soit devant toi
    Je ne suis pas un expert, mais j'ai une tendance à faire

    à la place de ton

    Enfin, si cela ne résoud rien, enlève tout ce qui est superflu pour le moment:

    Les textures, les normales, ...

    Tout sauf le dessin de base...

    [EDIT]
    Est-ce normal que je ne vois pas de glEnable(GL_TEXTURE_2D);?
    [/EDIT]

    Jc

  11. #11
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    Citation Envoyé par fearyourself
    Je ne suis pas un expert, mais j'ai une tendance à faire

    à la place de ton

    en fait je n'avais pas fait attention au gluLookAt, donc le glTranslate n'est finalement pas utile
    par contre, le gluLookAt est positionné en 20, en le positionnant en -20 pour passer de l'autre côté du quad résoudrait peut-etre le problème
    ou comme je disais précédemment en désactivant le culling

    [EDIT]
    Est-ce normal que je ne vois pas de glEnable(GL_TEXTURE_2D);?
    [/EDIT]
    Pour le problème de texture, c'est un problème
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  12. #12
    Membre expérimenté Avatar de damienlann
    Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    293
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2005
    Messages : 293
    Par défaut
    j'ai tout repris du début, j'en ai profité pour allégé un peu mon code,et là ca fonctionne....
    Alors là je suis un peu perdu parce que les principes sont les même.
    Donc je sais pas d'ou c'est venu.
    Peut être un probléme de parametrage du compilateur?
    en tout cas c'est simpa d'avoir tout tenté pour moi
    merci.
    Je vous fait des bisous comme promis
    Au fait je n'utilise plus swaprgb comme le faisai signifier shenron666 et ca marche quand meme..

  13. #13
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    cool si ça fonctionne, pense au résolu

    pour le SwapRGB il a son utilité, mais plutot que de se casser la tête à swaper les couleurs, autant utiliser le bon indicateur de format lors du transfert de la texture à OpenGL
    à mon avis c'est plus simple et moins bidouille
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

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

Discussions similaires

  1. [Delphi / DeviL / OpenGL] Problème Texture...
    Par tim53000 dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2009, 18h42
  2. [Delphi : OpenGL / SDL] Problème de textures
    Par Carrick dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2009, 13h44
  3. Delphi opengl : Probleme d'initialisation texture
    Par tenseiken dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2009, 12h18
  4. Réponses: 3
    Dernier message: 22/01/2006, 17h57
  5. Texture sur un cube en rotation sous Delphi !!!
    Par Cosmo dans le forum DirectX
    Réponses: 1
    Dernier message: 06/01/2004, 21h14

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