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

Lazarus Pascal Discussion :

Débuter avec OpenGL


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Débuter avec OpenGL
    Bonjour à toutes et à tous,

    Là, je patauge sévère ! Je n'arrive pas à trouver de tuto tout simple pour afficher un bitmap avec OpenGL.

    Aussi, je fais appel à vous pour me mettre le pied à l'étrier : y aurait-il une bonne âme pour me créer une petite application utilisant OpenGL pour charger un fichier .bmp ou .jpg et tout simplement l'afficher.

    Merci à vous.

    Pierre

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Re-Salut il y a d'excellent tutoriel pour OpenGL ici, la et la
    ici, ici (en allemand, je ne retouve plus la version anglaise)

    Sous Lazarus tu peux installer le paquet "LazOpenGLContext" au moins la tu auras déja le "Viewer" tu trouveras quelques exemples fournis Menu --> Outils --> Exemples de projets et tu filtres avec "OpenGL" pour les trouver.

    Voila tu as de quoi faire

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    En voila un autre excellent an anglais et un autre en francais

    A bientôt bonne lecture
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... Voila tu as de quoi faire ...
    Je te remercie pour tous ces tutoriels, mais le C n'est vraiment pas ma tasse de thé.

    Par contre, vue l'ampleur des possibilités (LCL / GLFW / GLUT, BGRABitmap, que choisir), je pense que je vais plutôt m'y noyer qu'autre chose.

    Si j'ai bien compris, il faut que je charge ma carte comme une texture que j'applique sur une forme. Pour obtenir ce que je souhaite, il faut que je puisse faire glisser ma texture sur cette forme, faire tourner et zoomer cette forme. Mais là où j'ai du mal à voir ce qu'il faut faire est que cette forme, c'est mon écran de 1024 x 600 pixels² qui lui, n'est ni déplaçable, ni capable de rotation pas plus que de redimensionnement.

    Cordialement.

    Pierre

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Re-salut

    Que ce soit du C/C#/C++ ce n'est pas grave car les commandes OpenGL sont les même dans tous les langages.
    Le tuto en allemand (langue que je ne parle pas) est très bien fait et surtout il est orienté Lazarus.

    Si GLScene fonctionne correctement chez toi, se sera beaucoup plus facile à mettre en place
    Je viens de mettre un exemple basique

    A bientôt

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... tu trouveras quelques exemples fournis Menu --> Outils --> Exemples de projets et tu filtres avec "OpenGL" pour les trouver. ...
    J'ai revisité ces exemples, et je suis tombé sur celui-ci : ...\bgrabitmap-9.6.2\test\test4lcl-opengl\opengltest2 où on voit la terre grossir, rapetisser, tourner ... manquait que le déplacement. J'ai regardé le code : d'un simplicité pas croyable.

    J'ai construit un petit projet avec non plus la terre mais une de mes cartes et des curseurs pour faire grossir, rapetisser, tourner et bouger et ça tourne sous Windows et sur mon Raspberry avec une vitesse de rafraichissement de l'ordre de quelques millisecondes .

    Voilà ce que ça me coûte comme code :

    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
    procedure TForm1.Load;
    var
      bmp: TBGLBitmap;
    begin
      if not DataLoaded then
      begin
        bmp := TBGLBitmap.Create(ExtractFilePath(Application.ExeName) + 'Herblay.jpg'); // 1280 x 1280 pixems²
        bmp.ResampleFilter := rfBestQuality;
        Carte := bmp.MakeTextureAndFree;
     
        bmp := TBGLBitmap.Create(ExtractFilePath(Application.ExeName) + 'viseur_croix.png'); // 64 x 64 pixels²
        bmp.ResampleFilter := rfBestQuality;
        Cible := bmp.MakeTextureAndFree;
        DataLoaded := True;
      end;
    end;
     
    procedure TForm1.OpenGLControl1Paint(Sender: TObject);
    begin
      Load;
      BGLViewPort(OpenGLControl1.Width, OpenGLControl1.Height, BGRABlack);
      Carte.StretchDrawAngle(Dec0.X-Depl.X, Dec0.Y-Depl.Y, 1280*kZoom, 1280*kZoom, CapDEg, PointF(OpenGLControl1.Width / 2,OpenGLControl1.Height / 2), False);
      Cible.Draw(OpenGLControl1.Width / 2,OpenGLControl1.Height / 2, $FF);
      OpenGLControl1.SwapBuffers;
    end;
    Je n'en reviens pas.

    Cordialement.

    Pierre

  7. #7
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Excellent, je n'ai encore jamais regardé les possibilités de BGRABitmap avec OpenGL
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Apparemment, avec la bibliothèque "TBGLBitmap", j'arrive à déplacer, tourner, zoomer rapidement une image de 1280 x 1280 pixels ² (sous Windows XP et sur mon raspbery Pi 3B raspbian Stretch).

    Pourtant, cela fait deux jours que je m'arrache les cheveux (les seuls qu'il me reste)à essayer de comprendre la cohérence de ces mouvements, je m'explique :

    A l'aide d'un TrackBar, je peux faire varier l'angle de rotation de mon image.

    En déplaçant la souris sur l'image, je le déplace.

    Si j'ai une rotation nulle, lorsque j'appuie sur la souris, et que je commence à la déplacer, l'image se déplace en la suivant et ce autant de fois que je fais un cycle "Appui, Déplacement, Relâchement".

    Par contre, après avoir fait tourner mon image d'un angle quelconque, la première séquence "Appui, Déplacement, Relâchement" déplace l'image à partir du pointage de la souris, mais pour les séquences suivantes, dès que je commence le déplacement, l'image fait un saut de déplacement qui semble proportionnel au déplacement précédent avant de suivre gentiment le mouvement de la souris. Ce saut empêche de comprendre ce qu'on est en train de faire : on ne sait plus où on s'est déplacé.

    Je n'arrive pas à comprendre la logique de ce saut. J'ai essayé tout un tas de trucs pour compenser ce saut (valeurs fixes, liées trigonométriquement à l'angle, ...).

    Cela ressemble fortement à un bug, mais c'est certainement moi qui n'ai rien compris.

    Je vous joins mon Text_BGLDA.zip. Si vous arrivez à comprendre ...

    Cordialement.

    Pierre

  9. #9
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut Pierre

    j'ai regardé un peu. J'ai pu corriger ton erreur de déplacement mais il semble que la rotation pose problème. En faisant des va-et-vient avec le trackbar l'image tourne bien mais elle se déplace toute seule.

    J'ai essayé la rotation comme ça, mais sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Carte.DrawAngle(XX, YY, CapDeg, PointF(640,640),true); // Force le point de pivot a rester au centre de l'image. Et l'idem l'image se déplace :(
    Carte.DrawAngle(XX, YY, CapDeg);
    BGLCanvas.PutImageAngle(XX,YY,Carte,CapDeg);
    A mon avis c'est un bug interne à BGRABitmap (surement un soucis avec les matrices de transformation) Ou comme toi j'ai rien compris au "Centre de rotation". En l'état ce point de pivot ne semble pas relatif à l'image, mais à la scene. Quoi qu'il en soit l'image ne devrait pas se déplacer

    Pour ton déplacement ton erreur était dans OnMouseUp

    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
     
     
     
    procedure TForm1.ZoneAffMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      if (ssLeft in Shift) then
      begin
        Depl.X:= (CurPos0.X-X);   // Depl = déplcement de la souris en pixels  // tu va du point A (OnMouseMouve) et tu te déplaces Jusqu'au point B (de X,Y) donc pas besoin de cumulé dans OnMouseUp. Le déplacement se cumule déja ici
        Depl.Y:= (CurPos0.Y-Y);
        CurPos0.X:= X;   
        CurPos0.Y:= Y;
        ZoneAff.DoOnPaint;
      end;
    end;
     
    procedure TForm1.ZoneAffMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
     
      Dec0.X:= Dec0.X-Depl.X;  
      Dec0.Y:= Dec0.Y-Depl.Y;
      //Depl.X:= 0;
      //Depl.Y:= 0;
    end;
     
     
    // Note XX et YY sont des varibales globale
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DataLoaded := False;
      CapDeg:= 0; // Initialisation Cap
    //  sincos(DegARad*CapDeg, sinCap, cosCap);
      Org.X:= ZoneAff.Width / 2-640;
      Org.Y:= ZoneAff.Height / 2-640;
      XX := Org.X;
      YY := Org.Y;
      PivotP.X :=640;
      PivotP.Y :=640;
    end;  
     
    procedure TForm1.ZoneAffPaint(Sender: TObject);
    begin
      Load;
      BGLViewPort(ZoneAff.Width, ZoneAff.Height, BGRABlack);
      //XX:= Org.X+Depl.X;
      //YY:= Org.Y+Depl.Y;
     
      XX:= XX-Depl.X;
      YY:= YY-Depl.Y;
     
      PivotP.X := PivotP.X + Depl.X;
      PivotP.Y := PivotP.Y + Depl.Y;
     
      Edit1.Text:= FloatToStr(XX);
      Edit2.Text:= FloatToStr(YY);
     
      Edit3.Text:= FloatToStr(PivotP.X);
      Edit4.Text:= FloatToStr(PivotP.Y);
     
      Carte.DrawAngle(XX, YY, CapDeg,PivotP, true); // False); // Déplcemenr et rotation de la Carte  
      Cible.Draw(ZoneAff.Width/2-32, ZoneAff.Height/2-32, $FF);  // Affichage de la cible
      Pivot.Draw(PivotP.X-32, PivotP.Y-32, $FF);  // Affichage de la cible
      ZoneAff.SwapBuffers;
    end;
    EDIT : En utilisant PivotP, la rotation est plus juste, l'image se déplace encore . De plus, maintenant les déplacements avec la souris sont relatif à la rotation (Ex : Tu bouge la souris vers le haut, ca part à droite.....)

    Bonne journée

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

Discussions similaires

  1. Installer et débuter avec WebGL, l'implémentation d'OpenGL pour nos navigateurs
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 24/04/2013, 23h56
  2. Débuter avec openGL, problem pour afficher des primitives
    Par kosa_nostra dans le forum OpenGL
    Réponses: 1
    Dernier message: 06/11/2011, 20h40
  3. Débuter avec OpenGL 3.x
    Par mohdaef dans le forum OpenGL
    Réponses: 24
    Dernier message: 04/06/2010, 01h39
  4. Débuter avec OpenGL
    Par Franck.H dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/11/2009, 19h12
  5. Débuter avec OpenGL, quelel version ?
    Par Kromagg dans le forum OpenGL
    Réponses: 11
    Dernier message: 03/07/2009, 18h52

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