2

OpenGLが描画されない、よくある間違いなどに関するたくさんの記事やSOの質問を見てきました。これは、私を困惑させています。

glOrthoいくつかの異なる設定、異なる頂点の位置、色などを試しましたが、すべて役に立ちませんでした。

コードのクリアカラーが紫色(ウィンドウ紫色)であるため、OpenGLの状態が有効であることを確認できます。gDEBuggerは、フレームが更新されていることも確認しています(Frapsも同様です)。

これがコードです。「役に立たなかった」とマークされた行は元々そこになく、私が試したものと失敗したものでした。

QTWindow::QTWindow( )
{
    // Enable mouse tracking
    this->setMouseTracking(true);
}

void QTWindow::initializeGL()
{
    // DEBUG
    debug("Init'ing GL");
    this->makeCurrent(); ///< Didn't help
    this->resizeGL(0, 0); ///< Didn't help
    glDisable(GL_CULL_FACE); ///< Didn't help
    glClearColor(1, 0, 1, 0);
}

void QTWindow::paintGL()
{
    // DEBUG
    debug("Painting GL");
    this->makeCurrent(); ///< Didn't help
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,1,1);
    glBegin(GL_TRIANGLES);
    glVertex2f(500,100);
    glVertex2f(100,500);
    glVertex2f(0,0);
    glEnd();
    this->swapBuffers(); ///< Didn't help
}

void QTWindow::resizeGL(int width, int height)
{
    // DEBUG
    debug("Resizing GL");
    this->makeCurrent(); ///< Didn't help
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1000, 0, 1000, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

カリングをオフにしても、三角形はまったく表示されません。ただし、3つのデバッグログはすべて、本来あるべき状態で正確に呼び出されます。

私は何が欠けていますか?

4

2 に答える 2

0

QTWindow :: resizeGL()関数の最初でglViewport()関数を呼び出してみてください。

glViewport(0, 0, width, height);

また、widthheightを0に設定してresizeGL()を呼び出さないでください;)さらに、ウィンドウのサイズが変更されるたびにQtによって呼び出されるため、resizeGL()を直接呼び出す必要はありません。

swapBuffers()関数へのすべての呼び出しを削除できます-それはQtによって内部的に呼び出されています。

makeCurrent()関数は、他のすべてのGL呼び出しの前に呼び出す必要があるため、initializeGL()で呼び出すことをお勧めしますが、paintGL()関数で呼び出す必要はありません(paintGL()が呼び出されている場合を除く)。別のスレッドから呼び出されましたが、コードには含まれていないと思います)。

于 2013-02-10T22:26:49.773 に答える
0

問題はバージョンであることになりました。glGetString(GL_VERSION)示された4.2互換性コンテキストで返されたバージョン文字列が使用されていました。

メソッドの三角形の呼び出しはpaintGL3.1で削除されたので(私が正しく思い出せば)、なぜそれらが何も描画しなかったのかは明らかでした。さらに、互換性があるため、エラーはスローされませんでした。モード。

QGLWidgetでバージョンを3.0未満に下げることができなかったため(別の掲示板で通知されたため、QTには2.1が必要であるため)、バージョンを3.0に設定し、3.0の描画呼び出しをいくつか使用してみました。仕事をしています。

于 2013-02-11T03:45:36.357 に答える