Bullet デモを Qt アプリケーションに統合したいと考えています。Bullet に付属の App_BasicDemo という Bullet デモ例を使用しています。
Qt なしでこのアプリケーションを実行すると、ウィンドウが開き、非常にうまくレンダリングされます。だから私は、これをQGLWidgetとして置くだけで、Qtウィンドウで同じことをするはずだと思った。しかし、うまくいきません。
GLWidget のコンストラクターで、BasicDemo を作成します。initializeGL では、BasicDemo の myinit と initPhysics を呼び出します。最後に、paintGL で clientMoveAndDisplay を呼び出します。
私が抱えていた最初の問題は、swapBuffers を呼び出すときに clientMoveAndDisplay がクラッシュすることでした。
その行にコメントするだけで、プログラムはクラッシュしませんが、何も表示されません。
私は何が欠けていますか?
編集:
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();
}
編集2:
わかりました、私は答えを得たと思います。Bullet はウィジェットの幅と高さを必要とするため、openGL を初期化するときは、Demo の形状を一度変更する必要があります。これは、前に glutmain が呼び出されたとき、いくつかの Bullet メソッド内で行われたと思います...
scene->reshape(this->width,this->height);
トリックをしました。Bullet Demo が表示されるようになりました。(独立したBulletアプリケーションのように更新されませんが、それは別の問題です)
とにかくありがとうマーティン・ベケット!