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

Qt Discussion :

Qt et Directx10


Sujet :

Qt

  1. #1
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut Qt et Directx10
    Bonjour,

    J'aurais voulu savoir si l'on pouvait utiliser une fenêtre créée avec QT, pour afficher une application Directx ? En gros peut-on récupérer le handle de la fenêtre QT pour l'utiliser ensuite dans une application Directx ?

    Merci.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je ne sais pas si cela peut t'aider mais je crois que pour recuperer le HANDLE d'une fenetre Qt il faut utiliser la methode WId QWidget::winId().

    Apres pour ce qui est de l'intégration directX je penses que cela devrait fonctionner mais je n'ai jamais essayé.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Merci pour ta réponse je teste ça des que possible.

  4. #4
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je viens de voir et c'est bon je peux récupérer le handle de la fenêtre avec cette fonction.

    Par contre j'ai vu qu'il y avait certaines choses a faire pour intégrer Ogre ou SDL à QT, et j'aurais voulu savoir si quelqu'un pouvait m'indiquer comment faire pour intégrer DirectX à Qt car je n'ai pas trouvé grand chose.

    Merci

  5. #5
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Quelqu'un qui a deja réussi a intégrer directx dans qt, peut il m'expliquer la marche à suivre ?

    Merci.

  6. #6
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par Seb2086 Voir le message
    Quelqu'un qui a deja réussi a intégrer directx dans qt, peut il m'expliquer la marche à suivre ?

    Merci.
    C'est quoi exactement ton problème. Je ne l'ai jamais fais mais je pense que cela est possible si tu utilises Visual. Avec les autres compilo pas sur.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #7
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Je suis en train de regarder comment fonctionne QT et en fait je me demande surtout comment j'effectue mon rendu Directx dans la fenêtre ?
    Avec windows j'avais accés à la "pompe à message" comment faire la pour y avoir accés ?

    Oui j'utilise visual studio 2008.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    es ce que ceci peut aider?
    http://lists.trolltech.com/qt-intere...ad01272-0.html

  9. #9
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Salut merci je l'avais déjà vu ce lien mais je ne comprend pas a quoi sert sa méthode virtuelle et ou et comment est fait le rendu direct3d

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Seb2086 Voir le message
    Salut merci je l'avais déjà vu ce lien mais je ne comprend pas a quoi sert sa méthode virtuelle et ou et comment est fait le rendu direct3d
    dsl je ne connait rien en directx. Demande peut être conseil sur le forum 2D/3D

  11. #11
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Je comprend pa trop le problème. Le lien de Yan semble repondre a ta question. Enfin j'ai pas tester mais cela a l'air correcte. D'apres ce liens tu créer un objet derivant de QWidget. Dans le constructeur tu fais toute l'initialisation de direct3D et apres tu te charges du rendu en redefinissant paintEvent.

    Tu devrais essayer cette voie elle me semble interressante.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  12. #12
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Ok merci j'avais pas vu qu'il fallait redéfinir paintEvent ce sera donc dans paintEvent que j'effectue le rendu de direct3D.

    Je vais tester ca dés que possible merci.

  13. #13
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tiens nous au courant de la suite.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  14. #14
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    J'ai un problème que je n'arrive pas à comprendre, je vous met d'abord le code puis je vous explique mon problème :
    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
     
    class MaFenetreDX : public QWidget
    {
        public:
    		MaFenetreDX(QWidget *parent = 0);
    		virtual ~MaFenetreDX();
     
        private:
    		virtual void paintEvent(QPaintEvent *e);
    		virtual void showEvent(QShowEvent *e);
     
    		QPushButton *m_bouton;
     
    		D3D10_DRIVER_TYPE			g_driverType;
    		ID3D10Device*				g_pd3dDevice;
    		IDXGISwapChain*				g_pSwapChain;
    		ID3D10RenderTargetView*		g_pRenderTargetView;
    		ID3D10Effect*				g_pEffect;
    		ID3D10EffectTechnique*		g_pTechnique;
    		ID3D10InputLayout*			g_pVertexLayout;
    		ID3D10Buffer*				g_pVertexBuffer;
    		ID3D10Buffer*               g_pIndexBuffer;
    		ID3D10EffectMatrixVariable* g_pWorldVariable;
    		ID3D10EffectMatrixVariable* g_pViewVariable;
    		ID3D10EffectMatrixVariable* g_pProjectionVariable;
    		D3DXMATRIX                  g_World;
    		D3DXMATRIX                  g_View;
    		D3DXMATRIX                  g_Projection;
     
     
    		// Structures
    		struct SimpleVertex
    		{
    			D3DXVECTOR3 Pos ;
    			D3DXVECTOR4 Color;
    		};
     
    		HRESULT InitDevice() ;
    		void CleanupDevice() ;
    		void Render() ;
     
    };
    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
     
    #include "MaFenetreDX.h"
     
    MaFenetreDX::MaFenetreDX(QWidget *parent) : QWidget(parent)
    {
         // Mise en place de quelques options pour autoriser le rendu direct dans le widget
        setAttribute(Qt::WA_PaintOnScreen);
        setAttribute(Qt::WA_NoSystemBackground);
     
        setMinimumSize(640, 480);
     
        this->setWindowTitle("Test Fenêtre DirectX");
     
        // Construction du bouton
        m_bouton = new QPushButton("Bouton 1", this);
     
        m_bouton->setFont(QFont("Comic Sans MS", 10));
        m_bouton->setCursor(Qt::PointingHandCursor);
        m_bouton->move(10, 10);
     
        g_driverType = D3D10_DRIVER_TYPE_NULL ;
        g_pd3dDevice = NULL ;
        g_pSwapChain = NULL ;
        g_pRenderTargetView = NULL ;
        g_pEffect = NULL ;
        g_pTechnique = NULL ;
        g_pVertexLayout = NULL ;
        g_pVertexBuffer = NULL ;
        g_pIndexBuffer = NULL ;
        g_pWorldVariable = NULL ;
        g_pViewVariable = NULL ;
        g_pProjectionVariable = NULL ;
    }
     
    MaFenetreDX :: ~MaFenetreDX()
    {
    	CleanupDevice() ;
    }
     
    void MaFenetreDX::showEvent(QShowEvent *e)
    {
        InitDevice();
        QWidget::showEvent(e);
    }
     
    void MaFenetreDX::paintEvent(QPaintEvent *e)
    {
    	Render();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        MaFenetreDX fenetre;
        fenetre.show();
     
        return app.exec();
    }
    Quand je lance l'application j'obtient un écran noir avec un bouton "Bouton 1" en haut à gauche de l'écran.
    Et c'est lorsque je survole ce bouton que j'obtient mon rendu DirectX, en l'occurence un cube de couleur qui tourne.

    Je voudrais donc savoir comment je peux faire pour avoir le rendu dans la fenêtre directement sans être obligé de survoler le bouton.

  15. #15
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    A mon avis, c'est seulement quand tu passes sur bouton1 que la fenetre se redessine (paintEvent). Tu peux verifier cela avec une debugger pour en etre sur. Par consequent je pense que c'est a toi de forcer peut etre le rendu dans ce cas là avec une Timer ou un Thread. Il faudrait tester. Apres peut etre que quelqu'un a une meilleur solution...

    Bon courage pour la suite
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pas mieux.
    L'appel d'un update à temps régulier
    http://qt.developpez.com/doc/4.6/qwidget/#update

  17. #17
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Tu veux dire que je doit utiliser un timer qui appele l'update de la fenêtre ?

  18. #18
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Oui je pense que c'est ce que Yan veut dire.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  19. #19
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Il faudrait aussi vérifier, mais il me semble que QOpenGl appel update après chaque paintevent.

  20. #20
    Membre du Club Avatar de Seb2086
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    J'ai rajouté un timer et ça fonctionne je vois mon cube qui tourne.
    Par contre ca fonctionne quand je le voit sur ma fenêtre qui contient le widget comme ceci :
    (Le rectangle gris c'est mon widget "MaFenetreDX")

    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
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QFrame* MainFrame = new QFrame;
        MainFrame->setWindowTitle("Qt SFML");
        MainFrame->resize(1024, 768);
        MainFrame->show();
     
        MaFenetreDX* fenetre = new MaFenetreDX(MainFrame);
        fenetre->show();
     
        return app.exec();
    }
    C'est normal que ca m'affiche mon rendu dans la fenêtre qui contient le widget puisque j'ai fait ça dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sd.OutputWindow = this->topLevelWidget()->winId();
    mais si à la place je fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sd.OutputWindow = this->winId();
    Je me retrouve avec un écran gris et je vois apparaître par moment mon cube.

    Donc le rendu se fait et se raffraichit bien lorsqu'il est sur la fenêtre contenant le widget mais il ne se fait pas sur le widget lui-même.

    J'aurais voulu savoir aussi quelle fréquence mettre pour mon timer j'ai mis 5 mais c'est peut être trop rapide ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Directx10 et fichiers format .x
    Par korsakoff69 dans le forum DirectX
    Réponses: 9
    Dernier message: 24/11/2010, 14h30
  2. [Directx10] staging texture2D Map() et RowPitch
    Par DjiZ dans le forum DirectX
    Réponses: 2
    Dernier message: 22/02/2010, 17h15
  3. DirectX10 : Charger un mesh .x
    Par Seb2086 dans le forum DirectX
    Réponses: 5
    Dernier message: 06/08/2009, 17h59
  4. SHADER, HLSL, DIRECTX10, C#, que choisir ?
    Par korsakoff69 dans le forum DirectX
    Réponses: 3
    Dernier message: 15/08/2008, 12h13
  5. Vista [ Problème Directx10 ]
    Par 20cents dans le forum Windows Vista
    Réponses: 6
    Dernier message: 02/12/2006, 23h06

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