1

オフスクリーン レンダリングに QT の QGLFramebufferObject を使用しています。
バッファにレンダリングした後、glReadPixels() を使用して結果を読み取りました
。問題は、読み取った背景色が 0 (透明な黒) である場合と、0xFF000000 (不透明な黒) である場合があること
です。初期化されました。バッファが QGLWidget から継承されたクラスのメンバである場合は 0 です。それ以外の場所で初期化された場合は 0xFF000000 です。

ここで何が起こっているのか誰にも分かりませんか?この読み取りの期待される良い結果は何ですか?

4

2 に答える 2

1

正しいクリアカラー(glClearColor)を設定し、実際にクリア(glClear)を実行しますか?カラー書き込み(glColorMask)マスクが完全に有効になっていることを確認していますか(クリアにも影響します)。次に、QTが奇妙なピクセルコピー転送を設定しているかどうかを確認できます(デフォルト以外、glPixelStore、glPixelTransfer、glPixelMapを参照)。どちらの場合も、RGBだけでなく、RGBAバッファーを取得(および読み込み)していますか?最後に、フレームバッファオブジェクト拡張が特定のグラフィックカード/ドライバの組み合わせでバグがある可能性が非常に高く、プライマリ表示ウィンドウがない場合はさらにそうです。少なくとも両方のベンダーのカードを確認してください。そしてもちろん、失敗する可能性のあるすべての操作の後で、常にglGetErrorをチェックしてください。質問を読み直した後、QGLWidget以外の場合に他の有効なレンダリングが表示されますか?緑と言うのは明らかですか、緑を返しますか?その場合、最初に有効なOpenGLコンテキストを初期化していない可能性が非常に高いためです。フレームバッファオブジェクトは、pbufferとは異なり、外部コンテキストを必要とします。

于 2008-11-08T06:19:42.377 に答える
0

謎解き
GLWidgetにつけているクリアカラーは0でデフォルトのクリアカラーは0xff000000のようです。フレームバッファ オブジェクトをいつ初期化するかに応じて、GLWidget の現在のクリア カラーを受け取ります。

于 2008-11-08T07:24:16.363 に答える