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 :

[C++ .Net]OpenGL et Windows Forms


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut [C++ .Net]OpenGL et Windows Forms
    Bonjour,

    J'ai beau chercher .Net et OpenGL sur Google et sur ce forum, je ne trouve pas la réponse à cette question toute simple :
    "comment faire de l'openGL dans une fenêtre en .NET ?"
    Ou plus spécifiquement :
    comment obtenir un contexte graphique OpenGL dans une *portion* de Fenêtre ? Je voudrais, au milieu d'une interface, ajouter une visu 3D.
    J'utilise C++/CLI

    Merci
    +

    Pierre

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Je ne connais pas moi meme C++/CLI , mais ne peut on pas simplement utiliser une lib initialement C ou C++ depuis CLI comme on le ferait en C++ (#include + editions de liens qui conviennent) ??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut
    Citation Envoyé par smashy Voir le message
    Je ne connais pas moi meme C++/CLI , mais ne peut on pas simplement utiliser une lib initialement C ou C++ depuis CLI comme on le ferait en C++ (#include + editions de liens qui conviennent) ??
    Le problème ce n'est pas le include, c'est la façon d'obtenir un contexte OpenGL dans une portion de fenêtre. Par exemple, je veux faire de l'OpenGL dans un Panel dans une Windows Form; c'est possible ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    bien ... reponse precedente a cote de la plaque

    sous windows normal (API WIN32) on utilise l 'API wgl qui permet de creer un context openGL a partir d un handler de fenetre HWND.

    As tu des methodes pour récuperer les un HWND dans l'API de fenetrage que tu utilises ??

  5. #5
    Membre Expert
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 568
    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 568
    Par défaut
    as tu regardé du côté de nehe ?
    il y a un basecode pour le .net : http://nehe.gamedev.net/counter.asp?...nehegl_net.zip
    en espérant que ça corresponde à ce que tu cherches

    sinon il y a aussi OpenTK :
    http://opentk.sourceforge.net/home/?q=node/10
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut
    Citation Envoyé par shenron666 Voir le message
    as tu regardé du côté de nehe ?
    il y a un basecode pour le .net : http://nehe.gamedev.net/counter.asp?...nehegl_net.zip
    en espérant que ça corresponde à ce que tu cherches

    sinon il y a aussi OpenTK :
    http://opentk.sourceforge.net/home/?q=node/10
    Je vais regarder cela.
    Un bref coup d'oeil à Nehe m'inquiète cependant : je vois surtout des techniques pour obtenir une fenêtre OpenGL avec des hDC hWNDW et compagnie. Dans les Nehe C#, il y a bien une espèce de OpenGL custom control, mais je ne sais pas si je vais pouvoir l'adapter en C++/CLI.

    En tout cas, rien n'est simple pour faire de l'OpenGL dans un contrôle de Windows Form...

  7. #7
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    C'est pas ca que tu cherches ?
    http://www.codeproject.com/managedcp...ewWinForms.asp
    Bye

    (La clé semble être ici : System::Windows::Forms::NativeWindow)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut
    Citation Envoyé par Djakisback Voir le message
    C'est pas ca que tu cherches ?
    http://www.codeproject.com/managedcp...ewWinForms.asp
    Bye

    (La clé semble être ici : System::Windows::Forms::NativeWindow)
    Ah, ça a une bonne tête. Dès que j'y arrive, je préviens :-)
    Merci

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 55
    Par défaut
    Bon, j'ai finalement réussi à faire ce que je voulais en piochant des infos chez Nehe.

    Voici ma réponse :
    On peut dessiner en OpenGL dans n'importe quel contrôle; la difficulté étant de construire les bons contextes graphiques. Voici une méthode qui fonctionne :

    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
     
    #include <windows.h>
    #include <gl/GL.h>
    //ne pas oublier de linker avec OpenGL32.lib
     
    ...
    //dans n'importe quelle fonction (pas forcément OnPaint), si on veut dessiner dans l'objet toto
    System::Drawing::Graphics^ graphics - toto->CreateGraphics();
      HDC hdc = static_cast<HDC>(graphics->GetHdc().ToPointer());
      PIXELFORMATDESCRIPTOR pfd = { 
        sizeof(PIXELFORMATDESCRIPTOR),   // size of this pfd 
        1,                     // version number 
        PFD_SUPPORT_OPENGL |   // support OpenGL 
        PFD_DOUBLEBUFFER,      // double buffered 
        PFD_TYPE_RGBA,         // RGBA type 
        24,                    // 24-bit color depth 
        0, 0, 0, 0, 0, 0,      // color bits ignored 
        0,                     // no alpha buffer 
        0,                     // shift bit ignored 
        0,                     // no accumulation buffer 
        0, 0, 0, 0,            // accum bits ignored 
        32,                    // 32-bit z-buffer 
        0,                     // no stencil buffer 
        0,                     // no auxiliary buffer 
        PFD_MAIN_PLANE,        // main layer 
        0,                     // reserved 
        0, 0, 0                // layer masks ignored 
      }; 
      int iPixelFormat = ChoosePixelFormat(hdc, &pfd); 
      SetPixelFormat(hdc, iPixelFormat, &pfd); 
      HGLRC oglgc = wglCreateContext(hdc);
      wglMakeCurrent(hdc, oglgc);
      //...ici vous faites votre tambouille en OpenGL...
      //...
      wglSwapLayerBuffers(hdc, WGL_SWAP_MAIN_PLANE);
      wglDeleteContext(oglgc);
      graphics->ReleaseHdc(System::IntPtr(hdc));
    Attention toutefois ! Si vous voulez utiliser un tel code dans un OnPaint, vous récupérez l'objet Graphics du PaintEventArgs. Dans ce cas, il faut utiliser un PixelFormatDifférent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        PFD_DRAW_TO_WINDOW |   // en Plus !
        PFD_SUPPORT_GDI |           //en plus !
        //PFD_DOUBLEBUFFER,      // en moins !
        PFD_SUPPORT_OPENGL |
        PFD_TYPE_RGBA,         // RGBA type
    Le PFD_DOUBLEBUFFER est en moins, car vous devez avoir activé le DoubleBuffer GDI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      this->SetStyle(System::Windows::Forms::ControlStyles::DoubleBuffer, true);
      this->SetStyle(System::Windows::Forms::ControlStyles::UserPaint, true);
      this->SetStyle(System::Windows::Forms::ControlStyles::AllPaintingInWmPaint, true);
      this->UpdateStyles();
    Voilà

    +
    Chacha

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

Discussions similaires

  1. OpenGL Application Windows Forms
    Par CliffeCSTL dans le forum Débuter
    Réponses: 1
    Dernier message: 06/04/2012, 08h35
  2. Réponses: 11
    Dernier message: 10/03/2006, 16h56
  3. [VB.NET] Partager un dataset entre 2 windows forms ???
    Par kissskoool dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/07/2005, 11h34
  4. [VB.NET] windows form traits
    Par DG JohnJohn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2004, 15h05

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