5

OpenGL と Visual Studio C++ でラバー バンドを作成する方法を見つけようとしています。私が直面している問題は、一部の Win 7 コンピューター (つまり、私の上司) では、フロント バッファーの読み取りまたは描画が許可されないため、直接描画できないことです。

glDrawBuffer( GL_FRONT );
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_FRONT, GL_LINE);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
*//Doesn't draw lines*

または、フロント バッファをバック バッファにコピーします (再描画には時間がかかります) swapbuffers 描画を呼び出してから agian をスワップします

glReadBuffer( GL_FRONT );
glDrawBuffer( GL_BACK );
glCopyPixels(0, 0, Width, Height, GL_COLOR);

glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_BACK, GL_LINE);
SwapBuffers(hdc);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
SwapBuffers(hdc);   
*//Doesn't display original drawing*

何か案は?

4

1 に答える 1

1

私は次のようにします:

  • シーンをオフスクリーン バッファ (バック バッファまたはその他) に描画します。
  • glReadPixels を使用して画像をメイン メモリに読み込む
  • メイン メモリ内の画像からテクスチャを作成する

この後、画面上に画像を描画するには、レンダリング領域全体をカバーする単一のクワッドを描画し、作成されたテクスチャでテクスチャリングします。この方法では、画像を画面に描画するときに実際のシーンを再レンダリングする必要はありません。

最新の OpenGL 実装では、イメージをメイン メモリに移動したり戻したりする必要なく、テクスチャにレンダリングすることもできます。繰り返しますが、シーンのレンダリングがすでに遅い場合、ここでのパフォーマンスの違いは目立ちません。

于 2011-08-05T10:46:12.497 に答える