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

OpenSceneGraph Discussion :

Comment appliquer une scène OSG sur une fenêtre MFC non modal ?


Sujet :

OpenSceneGraph

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2022
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 25
    Points : 26
    Points
    26
    Par défaut Comment appliquer une scène OSG sur une fenêtre MFC non modal ?
    Bonjour

    J'utilise OSG sur un logiciel de modélisation physique.

    Je créer d'abord une fenêtre en MFC non modal avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CDialog * m_pSimpleDlg = new CDialog();
            BOOL ret = m_pSimpleDlg->Create(IDD_DIALOG8);
            m_pSimpleDlg->ShowWindow(TRUE);
            HWND hWnd = m_pSimpleDlg->GetSafeHwnd();
    Et j'y applique ma scène 3D avec le code suivant :
    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
    RECT rect;
     
            // Create the viewer for this window
            singleViewer = new osgViewer::Viewer();
     
            // Add a stats Handler to the viewer
            singleViewer->addEventHandler(new osgViewer::StatsHandler);
            // Get the current window size
            ::GetWindowRect(hWnd, &rect);
     
            // Init the GraphicsContext Traits
            osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
     
            // Init the Windata Variable that holds the handle for the Window to display OSG in.
            osg::ref_ptr<osg::Referenced> windata = new osgViewer::GraphicsWindowWin32::WindowData(hWnd);
     
            // Setup the traits parameters
            traits->x = 0;
            traits->y = 0;
            traits->width = rect.right - rect.left;
            traits->height = rect.bottom - rect.top;
            traits->windowDecoration = false;
            traits->doubleBuffer = true;
            traits->sharedContext = 0;
            traits->setInheritedWindowPixelFormat = true;
            traits->inheritedWindowData = windata;
     
            // Create the Graphics Context
            osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
     
            // Init Master Camera for this View
            osg::ref_ptr<osg::Camera> camera = singleViewer->getCamera();
     
            // Assign Graphics Context to the Camera
            camera->setGraphicsContext(gc);
     
            // Set the viewport for the Camera
            camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
     
            // set the draw and read buffers up for a double buffered window with rendering going to back buffer
            camera->setDrawBuffer(GL_BACK);
            camera->setReadBuffer(GL_BACK);
     
            // Set projection matrix and camera attribtues
            camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
            camera->setClearColor(osg::Vec4f(0.2f, 0.2f, 0.4f, 1.0f));
            camera->setProjectionMatrixAsPerspective(30.0f, static_cast<double>(traits->width) / static_cast<double>(traits->height), 1.0, 1000.0);
     
            singleViewer->setCamera(camera.get());
     
            view = singleViewer;
            view->setSceneData(root.get());
    Mon problème est que lorsque je créer la fenêtre MFC sans y appliquer ma scène 3D la fenêtre reste non modal mais s'y j'y applique la scène 3D la fenêtre devient modal et il met impossible d'utiliser le logiciel par la suite.

    Commet faire en sorte que la fenêtre MFC reste non modal après que j'y applique la scène 3D ?

    Merci d'avance

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    En débuggant, est-ce que le handle pour la fenêtre vous semble correct ? De même pour les autres variables du coup. N'oubliez pas le code pour vérifier si erreur il y a.
    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
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2022
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2022
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    En débuggant, est-ce que le handle pour la fenêtre vous semble correct ? De même pour les autres variables du coup. N'oubliez pas le code pour vérifier si erreur il y a.
    Bonjour

    Oui j'ai vérifié le handle de la fenêtre. Le problème était que j'ai créé la scène 3D directement dans le thread principal du logiciel, pour y remédier j'ai mis en place un deuxième thread pour la scène et sa a marché.
    Mais merci pour votre réponse

    Cordialement

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/04/2007, 22h30
  2. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 11h54
  3. Comment centrer une fenêtre sur l'écran?
    Par bygui dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 07/04/2006, 11h25
  4. Réponses: 5
    Dernier message: 23/07/2005, 00h40
  5. [icone]Comment appliquer une icone sur le.exe
    Par JavaLeDirePartout dans le forum JBuilder
    Réponses: 7
    Dernier message: 24/07/2003, 18h28

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