0

アンマネージ C++ OpenGL ビューアーを WPF に埋め込む予定です。要件は(堅牢性と開発の容易さは別として)

  • 適切なサイズ変更
  • OpenGL ビューア領域のコンテキスト メニュー (ビューア関連のアクションのみ)
  • イベント (例: OpenGL ビューアーでのオブジェクトの選択によってトリガーされる)
  • WPF ダイアログは、OpenGL スペースの上に描画する必要があります

これまでのところ、ホストされた WinForm コントロールを (C++/CLI ラッパー経由で) 使用することについてのブログやディスカッションをいくつか見つけましたが、上記のすべての要件を (可能であれば) 実現するのは少し難しいようです (少し面倒でも)。

ActiveX コントロールを作成するのはどうですか? ActiveX コントロールを作成した経験はありませんが、利点の 1 つは、それが独自のプロセスで実行されることです。

それは良い考えですか、それともさらにいじくり回しますか?

編集:OpenGLビューアについてもっと明確にする必要があります。これは、OpenGL のみをサポートする C++ 3D エンジンに基づく既存のアプリです。DirectX 対応エンジンへの移植は、最後の手段と見なされます。

4

2 に答える 2

1

なぜあなたはactivexが欲しいのですか? SharpGLが easyear を必要とする仕事をしているので、管理された PInvoke ベースのラッパーがいくつかあります。しかし、WPF を使用していて、Viewport3dオブジェクトを持っているのに、なぜそれを使用しないのでしょうか? 3D エンジンに精通している場合は、その単純さに感謝するでしょう (速度の面で多少の欠点はありますが)。

別のポイントは、この質問 here に従って、純粋なソフトウェアモードを使用して Opengl がセッション 0でレンダリングできるという事実により、OpenGl を優先して WPF 3d レンダリングを放棄することを余儀なくされたためです。asp.netこれは、サービスまたはアプリケーションからオフスクリーン ビットマップで何かをレンダリングすることを計画している場合の要件です。

于 2013-03-14T05:44:33.410 に答える
1

私は ActiveX を使用しませんでしたが、あなたが達成しようとしていると信じていることを達成しました。この道を進むにあたって、2 つの情報が役に立ちました。

  1. マネージド コードとアンマネージド コードの混在

    • マネージ C++ はアンマネージ C++ とはまったく異なる方法でコンパイルされ、データはまったく異なるヒープに格納されることが判明しました。幸いなことに、コードのセクションを管理対象または管理対象外としてマークすることができます...

    #pragma managed
    #pragma unmanaged

  2. OpenGL コンテキスト管理

    • この記事で説明されている方法と同様の方法に従いました
    • 複数の OpenGL ウィンドウを管理する必要がある場合は、wglMakeCurrent と wglShareLists が相棒になります。

幸運を!

于 2013-03-14T05:39:21.353 に答える