Historique des modifications - Message

Message #6544

Sujet: Afficher Irrlicht dans une fenêtre SFML


Type Date Auteur Contenu
Dernière modification 20-06-2009 22:27:37 Gehogor
Bonjour, je ne sais pas si j'ai bien compris ta question, mais j'ai peut être été dans le même cas: je voulais afficher le rendu d'Irrlicht dans une fenêtre Qt (librairie c++ également) et non dans la fenêtre créée par Irrlicht. Voilà un morceau:
bool QIrrlicht::Initialisation(QWidget* parent)     // un QWidget peut être apparentée à une fenêtre dans la librairie Qt
{
    // Initialisation du moteur3D d'Irrlicht ...
    SIrrlichtCreationParameters Parameters;         // Paramètres d'initialisation vidéo pour Irrlicht
    Parameters.DriverType = video::EDT_OPENGL;      // Choix du driver OpenGL ou DirectX
    Parameters.Bits = 16;
    Parameters.Fullscreen = false;                  // option: pleine écran ou non
    Parameters.Stencilbuffer = true;
    Parameters.Vsync = true;                        // option: synchronisation verticale ou non
    Parameters.AntiAlias = true;                    // option: Anti aliésine ou non
    Parameters.HighPrecisionFPU = false;
    Parameters.EventReceiver = m_ManagerEvent;      // pointeur de l'objet getionnaire d'évènement

    *winID = parent->winId();                   	// Récupération de identifiant de la fenêtre Qt
    Parameters.WindowId = (int*)*winID;            	// Avec Linux on fait "parametres.WindowId = winID;"
    
    m_Device = createDeviceEx(Parameters);        	// Création d'Irrlicht avec fenétre Qt comme support
													//m_Device est une variable membre de type "IrrlichtDevice*" dans ma classe QIrrlicht.
}

Si ta librarie te permet de récupérer un identifiant de fenêtre, et bien, ça a de grande chance de fonctionner. Ensuite pour rafraichir ta scène, tu peux faire une petite méthode comme ça:
void QIrrlicht::UpdateFrame()					// Mise à jour d'Irrlicht
{
    if(m_Device->run())            				
    {
        m_Driver->beginScene(true, true, SColor(255,120,120,255));
		// tous les drawAll, drawLine3D,..., possibles ici.
        m_Driver->endScene();
	}
}

Et voilà.
Création du message 20-06-2009 19:16:17 Gehogor
Bonjour, je ne sais pas si j'ai bien compris ta question, mais j'ai peut être été dans le même cas: je voulais afficher le rendu d'Irrlicht dans une fenêtre Qt (librairie c++ également) et non dans la fenêtre créée par Irrlicht. Voilà un morceau:
bool QIrrlicht::Initialisation(QWidget* parent)     // un QWidget peut être apparentée à une fenêtre dans la librairie Qt
{
    // Initialisation du moteur3D d'Irrlicht ...
    SIrrlichtCreationParameters Parameters;         // Paramètres d'initialisation vidéo pour Irrlicht
    Parameters.DriverType = video::EDT_OPENGL;      // Choix du driver OpenGL ou DirectX
    Parameters.Bits = 16;
    Parameters.Fullscreen = false;                  // option: pleine écran ou non
    Parameters.Stencilbuffer = true;
    Parameters.Vsync = true;                        // option: synchronisation verticale ou non
    Parameters.AntiAlias = true;                    // option: Anti aliésine ou non
    Parameters.HighPrecisionFPU = false;
    Parameters.EventReceiver = m_ManagerEvent;      // pointeur de l'objet getionnaire d'évènement

    *winID = parent->winId();                   	// Récupération de identifiant de la fenêtre Qt
    Parameters.WindowId = (int*)*winID;            	// Avec Linux on fait "parametres.WindowId = winID;"
    
    m_Device = createDeviceEx(Parameters);        	// Création d'Irrlicht avec fenétre Qt comme support
													//m_Device est une variable membre de type "IrrlichtDevice*" dans ma classe QIrrlicht.
}

Si ta librarie te permet de récupérer un identifiant de fenêtre, et bien, ça a de grande chance de fonctionner. Ensuite pour rafraichir ta scène, tu peux faire une petite méthode comme ça:
void QIrrlicht::UpdateFrame()					// Mise à jour d'Irrlicht
{
    if(m_Device->run())            				
    {
        m_Driver->beginScene(true, true, SColor(255,120,120,255));
		// tous les drawAll, drawLine3D,..., possibles ici.
        m_Driver->endScene();
	}
}

Et voilà.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
151 invités en ligne
membre en ligne: -
RSS Feed