私はMainWindowに追加したいQGraphicsViewを持つMainWindowクラスを持っています。実際に何が起こっているのか見ることができます。今私がしようとしているのはキューブをレンダリングすることだけです。QMainWindowへのQGLWidgetの追加
主な機能
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
メインウィンドウCTOR
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
mUi(new Ui::MainWindow),
mDisplay(new GLWidget),
mScene(new QGraphicsScene)
{
mUi->setupUi(this);
//mScene->addWidget(mDisplay);
QGraphicsView *graphicsView = new QGraphicsView;
//QGraphicsView::setupViewport(this);
graphicsView->setViewport(mDisplay);
graphicsView->show();
}
GLWidget :: initializeGL
void GLWidget::initializeGL(void)
{
glMatrixMode(GL_COLOR);
glClearColor(0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glClearDepth(1.0f);
glEnable(GL_VERTEX_ARRAY);
glEnable(GL_NORMAL_ARRAY);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_MULTISAMPLE);
static GLfloat lightPosition[ 4 ] = { 0.5, 5.0, 7.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
qDebug() << "GL Initialized" << '\n';
}
ご覧のとおり、glClearColor
は背景を黒い画面に設定するはずです。問題は、私がレンダリングすると、ポップアップして1つではない2つのウィンドウが表示されることです。 MainWindow
クラスは、GLWidget
をレンダリングするはずのウィンドウフレームを持っていますが、ウィンドウフレームに追加するのではなく、単にQGraphicsView
を使用してフレームとウィンドウの両方を生成します。両方のウィンドウには白い画面しか表示されません。そのうちの1人は少なくともglClearColor
のように黒い背景を示すはずです。
私はここで間違っていますか?
「glClearColor」が呼び出される前のことですか? – zeboidlund
うーん...あなたが間違っているように見える:Qtの仕様書によれば、少なくとも「GL_COLOR_BUFFER」のようなものはない(私はWindows 7からこれをやっているという事実と共に - Linuxは異なるかもしれない) 。さて、 'GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT'ですが、それはAFIKです。 – zeboidlund
いいえ、glClearColorを呼び出してからglClearを呼び出します。そうでないと、OpenGLはクリアするときにどの色を使うのか分かりません。そして、それは '* _BIT'で、QtやLinuxのものではなく、名前はOpenGL仕様で指定されています。 – cmannett85