2012-02-07 10 views
2

申し訳ありませんがタイトルが混乱している場合は、1つのフレーズでまとめるのは難しいです。ウェブブラウザでのシミュレーション

私は、Webブラウザでロボットシミュレーションをレンダリングするプロジェクトを行っています。 具体的には、私が勉強している大学では、C++で書かれたシミュレータを使用して、このプログラムは環境内で進化するロボットをシミュレートします。 このシミュレータには、3D OpenGLビジュアライゼーションなどの多くの出力が用意されています。 1つの出力は、各タイムステップごとに出力される基本テキストレンダリング、環境内のすべてのロボットの位置付けです。

[OK]ので、私はブラウザで行われている新しいタイプのビジュアライゼーションに取り組むように頼まれました。 これは、シミュレータ用のコードをアップロードしてサーバ上で起動し、サーバ上でシミュレートしている間はブラウザ(HTML5 CanvasまたはSVG内)でシミュレーションを見ることができることを意味します。

私はまず、Ajaxを使ってシミュレータからデータを取得し、キャンバスライブラリを使用してロボットを画面に描画することを考えました。しかし、彼らはWebサーバーが必要ではないので、WebSocketサーバーとして機能し、ブラウザが直接話すことができるように、シミュレータに新しいタイプのビジュアライゼーションを直接書き込むことを考えました(実際にはC++ WebSocketライブラリを使用します)。 Webサーバーを必要とせずにシミュレータに接続できます(可能かどうかわかりません)。

まあ...それはアイデアです。あなたがそれについてどう思っているか教えてくれたら、アドバイスやリンクを私に教えてもらえると素晴らしいでしょう。 Webサーバーなしでこれを処理することは可能ですか?シミュレータでHTTPプロトコルを実装しないとできない場合は、このアイデアをスキップしてWebサーバーで処理します:)

2番目の質問はより正確です: 私はすでにHTML5 Canvasライブラリ.js、jCanvaScript、dojo.gfx、cake、doodle.js、bHive、KineticJS。私はまだどちらを使うのか分からない。 jCanvaScriptでいくつかの実験を開始しましたが、私は問題に直面しています。 私はサーバーからデータを取得し(各タイムステップでロボットの位置)、次にそれらをキャンバスに描画する必要があります。私はいくつかの.animate関数を使用していました。この関数は、アニメーションの時間であるmsの数をとり、シミュレーションの各タイムステップで移動しなければならないすべてのオブジェクトのアニメーションを同期させる方法を知りません。 そのようなシミュレーションを実装するのに役立つフレームワークをご存知ですか? (タイムステップごとにオブジェクトを動かすだけです)。

それは、私の貧しい英語のための謝罪です、私はそれが理解できればいいと思いますが、私に言い換えれば言います。

ご協力いただきありがとうございます。 私はそのプロジェクトで少し失われており、どんなアドバイスも大歓迎です!

良い一日を。

Balzard。

答えて

0

私は最初の質問を残したと思います。 :)私はあなたがgenetic algorithmsに探している必要があると思う。

Here is one with rockets using HTML5 canvas

+0

ご回答いただきありがとうございますが、実際にはシミュレートを実装する必要はありません。これは既にシミュレータによって行われています。私は「ただ」既存のシミュレータの出力を使ってブラウザでシミュレーションをレンダリングする必要があります。 – Balzard

0

1)インターネットからの外部データにアクセスする場合は、サーバーの実行を避けることはできません。

あなたはsimulator.exeを実行し、その出力をテキストモードで捕捉すると仮定します。

このシミュレータはwindowsアプリケーションがある場合、私はそれがlinuxのためならC++

iはnode.js

に試してみると思いますお勧めしますどのように多くの更新毎秒あなたは

< 5使用AJAX

を期待してい

> 5 go for WebSocket

2)キャンバスAPI自体は本当に使いやすいので、おそらくそれを処理するライブラリは必要ありません。

やアニメーションに関する注意 - 時間だけで新旧データ間を補間 - 私が何を意味するか:

PSEUDO CODE: 

duration = 20; // it's equal to synchronising interval 
onDataReceived(data) { 
    // get the step width needed to achieve `new x` in `duration` 
    robot.stepX = abs(robot.x - data.x)/duration; 
    robot.newX = data.x; 
} 

timerLoop { 
    if(robot.x < robot.newX) robot.x += robot.stepX; 
    // ... 
} 

あなたはノードでそれを行うことを決定した場合、あなたならば、これはあなたにMultiplayer JavaScript game built with Node.JS - Separating players

3

を助けるかもしれませんシミュレーションソースにアクセスし、WebSocketサーバーコンポーネントを直接ビルドしたいと思います。この種のことを行うためにスタンドアロンのC++ WebSocketライブラリ(WebSocket ++、https://github.com/zaphoyd/websocketpp/、BSDライセンス)を作成しました。 WebSocket ++は、C++アプリケーションの出力を自己完結型WebSocketサーバー経由で公開するために必要なすべてのコンポーネントを提供します。一方、WebSocket node.js/socket.ioを介してstdoutを公開する必要がある場合や、Autobahn WebSocketライブラリ(Python)を設定する方が簡単かもしれません。

これまでのところ、C++仮想世界サーバーからキャンバスを介してレンダリングするためのライブデータをプッシュするためにWebSocket ++を使用しました。現在、C++熱拡散シミュレータで作業しており、コンパイルされたjavascriptアプリケーション。あなたがすべてのC++のルートについて考えているなら、GitHubで私にpingをしても構いません。

関連する問題