1

OpenGL を使用する .NET アプリケーションを作成しようとしています。4 つのビューポートが必要ですが、4 つのコントロールを作成して同期する代わりに、1 つのコントロールを 4 つのビューポートに分割します。ビューポートを視覚的に分割するために、OpenGL コントロールに線を描画したいと考えています。カスタム コントロールを使用しています。これを実現するために、基本の UserControl の上に 2 つのパネルを配置しています。中央のパネルは OpenGL パネルで、OpenGL 出力がレンダリングされます。上部のパネルは、ビューポートの仕切りを描画する場所であり、透明であるため、その下のパネルを見ることができます。

問題は、OpenGL ビューポートが読み込まれると (別のスレッドにあるため、数秒間だけ黒くなる)、z レイヤーに関係なく、UserControl 全体が覆われることです。OpenGL パネルを縮小すると、まだパネルのみにペイントされていることがわかりますが、その上にあるものは気にせず、カバーするだけです。

なぜこれが起こったのですか?私が OpenGL コンテキストなどをどのように作成しているかを確認したい場合は、私が従ったチュートリアルを見ることができます。UserControl ではなく、Panel のハンドルを渡しています。カスタム コントロール内のすべてのコントロールは、同じデバイス コンテキストまたは何かを共有していますか?

4

2 に答える 2

2

glViewportウィンドウをビューポートに分割するには、glScissorと GL_SCISSOR_TEST を有効にして組み合わせて使用​​します。OpenGL 自体を使用して、ビューポート スプリッターを描画します。使用する投影法はいつでも変更できます。したがって、スプリッターはウィンドウ全体をカバーするビューポートを作成し、スプリッターを描画してから、ビューポートをペインに制限し、はさみを使用して、物事がその外側に「漏れる」のを防ぎます。

于 2012-08-15T00:06:38.557 に答える
1

OpenGL は、.net Windows フォームを使用して画面に描画するのではなく、グラフィック ハードウェアと直接対話します。目的を達成する 1 つの方法は、opengl 出力をオフスクリーン テクスチャ/フレームバッファ (fbo) にレンダリングしてから、通常の .net UI でフレームバッファにアクセスすることです。代わりに、OpenGL 呼び出しを使用してビューポートの仕切りを描画し、.net UI 要素をまったく使用しないことをお勧めします。

于 2012-08-14T23:48:29.100 に答える