2009-05-19 21 views
7

いくつかの物理シミュレーションを可視化するOpenGLアプリケーションをC++で作成しました。基本的なアプリケーションは、単純なGUIで使用されるDLL内に含まれています。現在はデスクトップPC上で動作していますが、Webサービスにする考えがあります。WebサービスとしてのC++ OpenGLアプリケーション

シミュレーションには専用のハードウェアが必要なので、ブラウザを使用しているユーザーがサービスとしてアプリケーションとやり取りし、その結果を画像(jpgなど)にレンダリングしてブラウザで表示/更新することができます。

私の質問:どのように私はWeb上でアプローチすることができるようにいくつかのサーバー上で実行されるWebサービスに記述されているように、C++アプリケーションを簡単に有効にすることはできますか?私はどんな種類の技術/ APIを見なければならないのですか?同様の問題に取り組んでいる現実的な例はありますか?

+0

イメージの更新頻度はどのくらいですか? –

+0

これは、ユーザーとのやり取りが終わるたびに発生します。やや曖昧ですが、典​​型的なシナリオは、パラメータの変更 - >シミュレーションのためのある時間 - >画像のレンダリングと書き込み - >ブラウザイメージの更新です。この場合、リアルタイムのニーズは厳しくありません。 – user62146

+0

同時にサポートする予定のユーザーはどれくらいですか? 誰でもアクセスできますか、または既知のユーザーだけがアクセスできますか? すべてのユーザーは、他のユーザーの操作を確認できますか?アプリケーションの1つのインスタンス、または複数のユーザーですか? –

答えて

5

これも可能ですが、WebサービスからOpenGLを使用しようとすると、大きな難点があります。 100%オフスクリーンレンダリングを実行し、ウィンドウコンテキストなしで作業するには、これを移植する必要があります。それが私の第一歩であり、それはいつも些細なことではありません。

また、WebサービスからのOpenGLコンテキストを正しく管理し管理することは非常に難しく、関係するオーバーヘッドは非常に苦しいことがあります。レンダリングの数や種類によっては、いくつかの問題が発生する可能性があります。

1

あなたのユーザーのやりとりのニーズが単純な場合は、CGIを見てみましょう。それはかなり理解しやすいはずです。

OpenGLプログラムの出力を見る限り、私はフレームバッファ拡張を見ていきたいと思います。それはあなたがメモリにレンダリングするのを容易にするはずです。それはJPEG圧縮器に送られます。

3

CGIをスケールアップする必要がある場合は、おそらく遅いと思われます&ハッキー。

そこにはいくつかのC++ Webフレームワークがあります。this questionを参照してください。

OpenGLが実行される限り、Jay氏によると、おそらくフレームバッファ拡張を使用する必要があります。 次に、イメージをテクスチャにレンダリングし、glGetTexImage()を使用してピクセルデータを取得できます。そこから、付随するライブラリで必要なイメージフォーマットを保存します。

1

あなたはすでにいくつかのウェブサーバーにアクセスしていると思います。 Apacheなど。その場合はCppServを試すことができます。

ウェブサーバーがCppServと通信できるように設定するだけで済みます。私はあなたのサーブレットを開発することを提案します(サイト上のドキュメントを確認してください)。これはあなたの既存のdllと通信します。 dllはOpenGLに関するすべてを知っているので、jpegイメージなどを作成するのに問題はないはずです。

3

これはWebサービスではありませんでしたが、WindowsサービスではOpenGLレンダリングが必要なのと同じようにproject/questionでした。 Vista上で動作させるには問題が数多くありましたが、最終的にはOpenGLでXP上で動作しました。

私は最終的に私のサービスのプライベートDLLとして動作するように構築したMesaを使ってみました。私は実際にOpenGL呼び出しに入り、どこがうまくいかないのかを知ることができたので、大きな決定でした。それはサービスの下でソフトウェアモードで正常に動作し、ハードウェアアクセラレーションではありませんでしたが、非常にうまく機能しました。

1

Flexのようなものを使ってWeb対応の「コントロールインターフェイス」を作成する方法と、OpenGLレンダリングをビデオとしてストリーミングするサーバーバックエンドについてはどうですか?基本的には、キーボード/マウス入力をFlexアプリケーション経由でリダイレクトし、標準のムービーコンポーネントを使用して「リアルタイム」3Dアクティビティを表示するために使用します。

悪魔の細部に、当然のを....

0

は、GoogleからO3D APIを使用しようとすることができ、サービスのanysortをしない、それははるかにシンプルになります。

+1

私が間違っている場合は私を訂正してください。しかし、この問題は、クライアント側ですべてがローカルで実行されるということでしょうか?シミュレーションは非常に重く、ブラウザを備えたほぼすべてのシステム上のあらゆるユーザー(多分モバイルサイトのユーザーも)に利用できるようにするため、これは「問題」です。 – user62146

+0

このような重いサービスを費用対効果の高い方法で実行できると確信していますか?ブラウザからアクセスできるCleintのサイドソリューションは、あなたにとってはるかに安いでしょう。 – user109074

0

この答えは、あなたがこのアプローチに

  1. を試してみましたが、非常に基本的かつ基本的に聞こえるかもしれない

  2. (ジャスト座標など)クライアントまたはその逆にサーバーからベクトルデータを送信します
  3. クライアント側でレンダリングします。

これは、サーバーが計算を行っているだけで、数値が前後して渡されることを意味します。

すべてのオブジェクト/モデルとテクスチャをベクトル化しようとする簡単な方法ではありませんが、非常に高速です。重いグラフィックイメージの代わりに、ベクトルデータのみが送信されるからです。

関連する問題