在Web浏览器中进行模拟

时间:2012-02-07 15:22:49

标签: javascript ajax websocket simulation html5-canvas

很抱歉,如果标题令人困惑,很难总结一句话。

我正在开展一个项目,包括在网络浏览器中渲染机器人模拟。 更具体地说,在我正在学习的大学里,他们使用的是用C ++编写的模拟器,这个程序可以模拟在环境中演化的机器人。 该模拟器具有许多输出,如3D OpenGL可视化等。 一个可用的输出是基本文本渲染,每个时间步输出,每个机器人在环境中的位置。

好的,所以他们让我在浏览器中进行一种新的可视化工作。 这意味着可以上传模拟器的代码,在服务器上启动它并在浏览器中查看模拟(在HTML5 Canvas或SVG中),而不是在服务器上模拟它!

好的,所以我首先想到使用Ajax从模拟器获取数据并使用一些Canvas库在屏幕上绘制机器人。但是他们不想要一个Web服务器,所以我想在模拟器中直接编写一种新的可视化类型(使用C ++ WebSocket库,如果这实际存在),它将充当WebSocket服务器,以便浏览器可以直接对话在不需要Web服务器的情况下到模拟器(不知道是否可能)。

嗯......这就是主意。如果你能告诉我你对它的看法并给我一些建议/链接,那将是非常棒的。 没有Web服务器可以处理这个问题吗?如果在模拟器中没有实现HTTP协议是不可能的,那么我将跳过这个想法并使用Web服务器:)

第二个问题更精确: 我已经看过一些HTML5 Canvas库,fabric.js,jCanvaScript,dojo.gfx,cake,doodle.js,bHive,KineticJS。我仍然不确定使用哪一个。 我用jCanvaScript开始了一些实验,我遇到了一个问题。 我从服务器获取数据(每个时间步的机器人位置),然后必须在画布中绘制它们。我正在使用一些.animate函数来获得平滑的动作。这个函数需要几个ms,动画的时间,我不知道如何同步我在模拟的每个时间步移动的所有对象的动画。 你知道一个有助于实现这种模拟的框架吗? (只是在每个时间步之间移动物体)。

就是这样,为我可怜的英语道歉,我希望这是可以理解的,如果没有,请告诉我,我会改写。

提前感谢您的帮助。 我对这个项目有点迷失,任何建议都会非常感激!

祝你有个美好的一天。

Balzard。

2 个答案:

答案 0 :(得分:3)

如果您有权访问模拟源并希望直接在其中构建WebSocket服务器组件,那么我已经编写了一个独立的C ++ WebSocket库(WebSocket ++,https://github.com/zaphoyd/websocketpp/,BSD许可)来完成这样的事情。 WebSocket ++提供了通过独立的WebSocket服务器公开C ++应用程序输出所需的所有组件。另一方面,如果您只需要通过WebSocket节点暴露stdout.js / socket.io或Autobahn WebSocket库(python)可能更容易设置。

到目前为止,我已经使用WebSocket ++将实时数据从C ++虚拟世界服务器推送到浏览器以通过画布进行渲染,目前正在使用C ++热扩散模拟器,该模拟器将在随附的javascript应用程序中显示模拟的实时可视化。如果您正在考虑所有C ++路由,请随时在GitHub上ping我。

答案 1 :(得分:0)

1)如果您想从互联网访问任何外部数据,则无法避免运行服务器。

我假设您将运行simulator.exe并以文本模式捕获其输出。

如果此模拟器是windows应用程序,我建议C++

如果是linux,我会尝试node.js

您期望每秒多少次更新

< 5使用AJAX

> 5转到WebSockets

2)Canvas 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

相关问题