Je veux intégrer une démo Bullet dans une application Qt. J'utilise l'exemple de démonstration Bullet fourni avec Bullet, appelé App_BasicDemo.Intégrer une démo Bullet simple en Qt
Si j'exécute cette application sans Qt, cela ouvre une fenêtre et rend très bien. J'ai donc pensé, si je viens de mettre cela comme un QGLWidget, il devrait faire la même chose dans une fenêtre Qt. Mais ça ne marche pas.
Dans le constructeur de mon GLWidget, je crée le BasicDemo. Dans initializeGL, j'appelle myinit et initPhysics du BasicDemo. Et enfin, dans paintGL, j'appelle clientMoveAndDisplay.
Le premier problème que j'ai eu, était que clientMoveAndDisplay se bloquerait lors de l'appel de swapBuffers.
Si je commente simplement cette ligne, le programme ne plante pas, mais il ne montre rien.
Qu'est-ce qui me manque?
Edit:
void GLWidget::paintGL() {
scene->clientMoveAndDisplay();
QGLWidget::swapBuffers();
}
void BasicDemo::clientMoveAndDisplay(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float ms = getDeltaTimeMicroseconds();
renderme();
glFlush();
//swapBuffers();
}
void BasicDemo::displayCallback(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
renderme();
//optional but useful: debug drawing to detect problems
if (m_dynamicsWorld)
m_dynamicsWorld->debugDrawWorld();
glFlush();
swapBuffers();
}
Edit 2:
Ok, je pense que je suis la réponse. Quand j'initialise OpenGL, je dois reformer une fois la démo, car Bullet a besoin de la largeur et de la hauteur de mon widget. Je suppose que cela a été fait à l'intérieur d'une certaine méthode Bullet avant, quand il a appelé glutmain ...
scène-> reshape (this-> largeur, this-> hauteur);
a fait l'affaire. Maintenant, je peux voir ma démo Bullet. (Il n'est pas mis à jour comme dans l'application indépendante Bullet, mais c'est un autre problème)
Merci quand même Martin Beckett!
Il y a une méthode resizeGL dans QGLWidget qui devrait être appelée automatiquement avant le premier tirage, vous pouvez mettre des choses dedans. Parfois, vous devez l'appeler manuellement si votre moteur a besoin d'allouer de l'espace, mais il est très bon marché de faire un resizeGL –