Salut,
Je débute avec Irrlicht et je cherche à l'utiliser avec SFML, en laissant le contrôle de la boucle du programme à la SFML qui dira à Irrlicht d'afficher la scène.
Le problème c'est que Irrlicht semble créer une fenêtre et que tout découle de là.
Donc voila, j'aimerais savoir si c'est possible, si oui je vous prie de me dire comment
Merci d'avance
Hors ligne
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à.
Dernière modification par Gehogor (21-06-2009 00:27:37)
Hors ligne